どう、って言われても感想はない
ファイルごとにusingを書かなければいけないのが面倒くさいです。 namespace単位でusingを有効にすることはできないんですか?
本職のプログラマが見て、このソフトって厨房レベルなの? このスレだと何かしら意見でると思ったんだが 評価できるレベルにも達してないってことかw
>>434 public static string GetSpace(int Count)
{
string text1 = "";
for (int num1 = 0; num1 < Count; num1++)
{
text1 = text1 + " ";
}
return text1;
}
こんなんありますが・・・
いろいろ丸見えだけど大丈夫なのかね
>>438 ワロスw初心者丸出しのコードだな、おいw
MainFormが肥大杉だお デザイナで弄くる時に大変そうだお
442 :
デフォルトの名無しさん :2006/05/04(木) 22:58:09
せめてStringBuilder使ってくれよw
>>442 作成する文字列の長さがあらかじめ分かっているのに
無駄にStringBuilderつかってるところもあったよ
>>445 いや、capacity指定すれば大してかわらんし。
.NETアプリってとりあえずReflectorで中身見ちゃうよな
449 :
デフォルトの名無しさん :2006/05/04(木) 23:15:55
ダウソ板から来ました! 屑ども死んでください><
GetNodeStateはなにやってるんだろう enumじゃいけないのかなあ
451 :
デフォルトの名無しさん :2006/05/04(木) 23:30:08
ダウソ板からきたじょ くっせー板www
まぁゆっくりしてけ。
(・∀・)カエレ!!!
せめてdotFuscateくらいしてればこんなに叩かれまいに。
ではゆっくりと帰ります
やっぱこうやってすぐ中見えちゃうからみんなC#やりたがらないのかな。 C#でやるならソース公開する前提でやらないと
あほらしいよな、ソース覗き放題ってのは。 プログラマの価値を失わせることになる。 C#でつくったものは公開したくない。
>>455 うまい技術は盗まれるが、糞な技術は盗まれる心配がないという点では、
最良な書き方なのかも。ある意味。
と、技術のない人が言ってみるテスト。
敢えて糞に書く、か。 自動糞化ソフトとか作ればいいのか?
>>460 パクらせておいて、著作権侵害で請求する方が金になる場合は別かもしれないぞ。
パクったコードも見えるわけだから。
>>433 Read の返値で判断した方が良かったと思う
とりあえず
>>434 内のメソッド、
ループはRじゃなくてL
明日は我が身になりそうで怖いな。 FuscatorのためにもやっぱStandard買おう。
standerdならdotfuctorついてるんけ?
>>443 43[89]じゃないけど書くなら
public static string GetSpace(int Count)
{
return new String(' ', Count);
}
とか。
わざわざメソッド作るまでもないじゃんw
目欄、目欄!
ただ、GetSpaceって言いたかっただけちゃうんかと
空白を指定数分ほしくなるようなことってあるか? PadLeftとかは使うけど。Formatもあるし、いらんだろ
>>469 いやそれはそうだけど元コードの中の人が
わざわざ作ってたからそれに倣ってみただけ。
あの板で始めたのが失敗だったな。 こっちだったら…… いくらタコでも本人の熱意があれば 助ける奴もでてきただろう………………か?
だなぁ…でも本人は目立ちたがりやっぽいしこっちには来ないんじゃないか?w
ちょうどこの板に C# 第三のスレ(タイトルからしてネタスレ)があったんだがな。
何人かは釣れたし、本人は満足してるんじゃないか それにしても、.NETの印象が悪くなったのは悲しい・・
Formのファイルを分割できないでしょうか? TabPageにひとつのファイルみたいに。
>partial 手動分割ですよね? デザイナ対応って可能ですか? デザイナからのEvent作成とか。 教えて君ですいません。
481 :
478 :2006/05/05(金) 02:33:09
partialで分割サンプル作ってデザイナからEvent読んでみましたが、 やはりObject記述のファイルを最後まで読んで終了ですね。 Object記述とEvent記述で分けたのが間違いでしょうか? IDEが非対応なだけでしょうか?
>>481 非対応だね。手動でイベント分けて別クラスで処理させるとかしかないねぇ
483 :
478 :2006/05/05(金) 02:48:32
どもです。 しかしVSって意味無く重いし、using補完もされない... 他のIDEって無いんですかね? 参照設定とか基礎API展開しておいて、自動補完してくれるような。
アレを意味無く重いと言うか。 是非ともアレと同等以上のIDEをアレより軽く作ってくれ。
485 :
433 :2006/05/05(金) 09:53:03
>>464 回答ありがとうございます。
しかし、
int length;
do
{
length=ns.Read(data,0,data.Length)
}while(length==data.Length)
のようにしてみましたが、依然読込みが途中で終わります…。
試しにBorland C++ BuilderのTClientSocketで同等の機能を持ったものを作ったら
ちゃんと受信できてるようなので送信自体はうまくいってるみたいです。
毎ループ Read の返値を表示させてみ?
487 :
433 :2006/05/05(金) 12:00:54
>>486 表示させたりSleepを入れてみたら確かに全て受信できました。
しかし、そのようなことをしなくても全て受信する方法はないのでしょうか。。。
んん? 表示させただけで受信できるのか? それ偶々のような気がするが……。 Read は size パラメータで指示したサイズより小さくても処理を返すのが問題のはず。
489 :
433 :2006/05/05(金) 12:05:31
>>488 の理由で、Read が 1 でも返すならまだその NetworkStream は有効であると。
491 :
433 :2006/05/05(金) 12:30:44
>>490 具体的にはどうすればいいのでしょうか。
ここから先は有料となります
ワロw
494 :
デフォルトの名無しさん :2006/05/05(金) 14:59:36
オプション ソース貼り付け 10000円 出張レクチャー 30000円 コーディング代行 50000円
出張レクチャー安いなw
レクチャーキボヌ
前に張られてたけど 【テスター募集】名も無きP2Pソフト開発スレ Part1 tp://tmp6.2ch.net/test/read.cgi/download/1146675993/ 面白いなwwwwwあのソース書いたやつと俺らの技量がどっこいどっこいといわれて糞ワロタ
あのさ、大勢の人間が集まる掲示板で「俺らの技量」なんてものがあるとでも思っているのか?
マジレス返された orz
このスレにまで下らない論争持ち込むつもりなら、ここから先は有料となります
いくらですか?
ひゃくおくまんえんです!
>>501 パンスト破り 500円
パンスト素股 1,000円
ピンクローター 1,000円
生パンティ 1,000円
聖水 1,500円
即尺 3,000円
顔射 3,000円
パイズリ顔射 3,000円
ポラロイド撮影(2枚) 3,000円
オナニー鑑賞 3,000円
バイブレーター 5,000円
ごっくん 5,000円
A・F 10,000円
505 :
433 :2006/05/05(金) 17:34:12
つまりわかんないんですね。 どうもありがとうございました。
そうだねお疲れ
507 :
デフォルトの名無しさん :2006/05/05(金) 19:43:27
>>505 解るよ。だけどお前には教えてやらない。
おれもレベルが高いけど教えてやらない
509 :
デフォルトの名無しさん :2006/05/05(金) 20:19:28
同ケースのコードを組んだことがあるならまだしも イリーガルな部分を返答するには、テストコード組んでみて動作検証してみないと 答えが出てこない場合もある。 そこまで手間を割いてホイホイ教えるほどお人好しではない。
ていうか 433 にはもう答えが出てるから……。 433 は読めてないようだけど。
511 :
デフォルトの名無しさん :2006/05/05(金) 22:25:42
女って本番よりAFの方が重要度低いのか・・・・
AFはSEXじゃないんで安くなる
あれだけ書かれても分からんとは
514 :
デフォルトの名無しさん :2006/05/06(土) 21:20:46
厳密名での署名についての質問です。 「ある厳密名がついていないDll」(A)があって「それを使用しているライブラリ」(B)を厳密名をつけて管理する。 ということはできるのでしょうか? dllで提供されているAに対して厳密名をつけたいと思いal.exeなどをみたのですが dllは受け付けないようでうまくいきません。 sn -R を使って署名しなおそうと思っても失敗するのですが、DLLに対して外部の者が署名するということはできないのでしょうか?
それできたら署名の意味なくね?
署名を新たに他の者が発行したとしても、 元の署名が無効となるわけではないので、意味はあるのではないかと 保証のないものを後から保証を肩代わりみたいな。
保障されていないものを参照している時点で意味はない。 後から保障を肩代わりってのは意味がないでそ。 保障されたものを参照しないと参照先は保障できないんだから。
保障じゃなくて保証だよっ orz
-Rは署名済みのアセンブリかせめて遅延署名されてないとできない、と思う。
バージョン管理とかの点を考えて、署名されていないアセンブリを使用者が署名というのは それなりに意味があると思うんだけどなぁ。間違ってる? 部署Aで作られたdllを部署Bで使用していて、ある時にAで作られたdllが厳密名で署名されていないことに気づいた。 セキュリティやバージョン管理を考えて、Bは自分のアセンブリに対して厳密名で署名したかった。 Bにしてみれば、Bが作った物は 「今ここにあるAで作られたdll」でしか動かないわけで Bが「Aで作られたdll」に対してしるしをつけたい。 このdllなら動くぞ、という保証みたいな意味で使えるかなと
Managed DirectX(MDX)を補助的な役割で使おうと思っています。 コンパイル時にMDXを参照に追加しているのですが、 実行時にMDXのアセンブリがロードできればMDXを使い、そうでなければ違ったコードを実行するという感じでやろうと思っています。 プログラム開始時にMDXがロードできるかどうかを知ることはできるのですが、実行する時点で問題があります。 void SomeMethod() { if (canUseMDX) { Device device = ... Texture texture = ... } else { ・・・ } } という感じにしたいのですが、MDXがインストールされていなかった場合(canUseMDX==false)、たとえ実行されなくても 関数内にDeviceなどの宣言があると、関数に入った瞬間例外が発生するらしく、次のようにせざるを得ない状況です。 void _SomeMethod_2(){ Device device = ... Texture texture = ... } void SomeMethod() { if (canUseMDX) { _SomeMethod_2(); } else { ・・・ } } この書き方だとMDXを使う箇所が増えてきた時にメンテナンスが難しくなってしまいます。 この問題を根本的に解決する方法は(設計云々以外に)ないでしょうか?
>>520 問題は A.dll が本当に A で作られたアセンブリなのか、B が検証することができないって事だ。
出所不明の A.dll を参照しているのなら B.dll も全体として厳密ではなくなってしまう。
>>521 設計以外でどうやって根本的に解決するんだw
MDX を使うバージョンの DLL と、使わないバージョンの DLL を用意する。
それぞれは同じ抽象クラス(またはインターフェイス)から派生したクラスのみを使う。
メインのアセンブリは抽象クラスのアセンブリを参照する。
実行時に MDX が使える場合は MDX.dll を、使えない場合は GDI.dll を動的にロードしてインスタンスを作成し、
抽象クラスにキャストして扱う。
プラグインでよくある構成だよ。
523 :
521 :2006/05/06(土) 23:32:12
>>522 レスどうもです。
その場合たぶんそれぞれのdllを用意する必要はなく、メインアセンブリ内で各クラスを定義するだけで大丈夫ですね。
ただ、必ずしもMDXを使った処理と使わない処理が対になっている訳でなく
(独立したif(canUseMDX) {...} と if (!canUseMDX) {...} が散らばっている感じです)、
それぞれの処理に明確な名前を与えるのが難しいような感じなので
>>521 の上の書き方がベストだと思います。
・・・と思ったのですが、その書き方をする方法がないのならば仰る方法がベストですかねえ。
#話がそれますが参照のプロパティで「ローカルコピー」をtrueにすればMDXのアセンブリが出力ディレクトリにコピーされるのですが、
#それでも実行時にMDXがロードできませんでした。ローカルコピーって何の意味があるんでしょう?
ロードって何のロード? アセンブリ自体のロードならできると思うけどそれ以外はアウトじゃね?
あとは内部的にロードされる別のアセンブリがあるとか。
>>514 「ある厳密名がついていないDll」(A)をリフレクションして使えば署名できると思うけど。めんどくせーけど。
527 :
526 :2006/05/07(日) 00:11:44
あ、ごめん、Aを署名しようとしたのか。Bの方かと思った。忘れてくれ。
528 :
521 :2006/05/07(日) 00:11:51
>>524 アセンブリのロード自体ができていないようです。
具体的にはVector2のみを使用した関数を呼ぶと
FileNotFoundException : 指定したモジュールが見つかりません。(Exception from HRESULT: 0x8007007E)
が発生します。
>>525 出力されたアセンブリ(Microsoft.DirectX.dll)がMicrosoft.VisualCを参照しているようなのでそれも出力してみましたが
やはり同じでした。
結局この場合ローカルコピーは使えないということなんでしょうかね。
>>517 ,519,522,526レスサンクス
「今手元にあるAのdll」だけを真実としてアイデンティティを認めて名前を付ける。
Bとしてはセキュリティ保護・バージョン管理の道具として、うまく使えないものかと。
使用しているdllに一つでも厳密名がついてないなら厳密名を利用できないのは当然として、
後付できないのは不便だなぁと。
結局、sn.exe/al.exeではdllへのオーバライドの署名は無理ということか。(逆アセすればできそうだけど)
たしかに、後から署名できると便利と思うこともないではない。 ただ、現実問題としてこれを許すと、明らかに間違った署名の使い方を されてしまう危険性がある。 署名というか厳密名という仕組み自体の確実性を壊してしまいかねない。 こういう余地を含めることは許容できなかったんだと思うよ。
ていうかildasmとilasmで何とかなるだろ。
.NET 2.0 では SuppressIldasmAttribute なる属性が追加されていてな
意味なさげ
こ、こんなのあったのか…
suppress 属性を無視するようになる ildasm のパッチまだー?
WebClientのDownloadProgressChanged、 OpenReadAsyncだと呼ばれないんですけどぉ!?
まずはソースうp
538 :
ほい :2006/05/07(日) 18:47:26
private WebClient _wc; private void Form1_Load(object sender, EventArgs e) { _wc = new WebClient(); _wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(_wc_DownloadProgressChanged); _wc.OpenReadCompleted += new OpenReadCompletedEventHandler(_wc_OpenReadCompleted); _wc.DownloadDataCompleted += new DownloadDataCompletedEventHandler(_wc_DownloadDataCompleted); } private void button1_Click(object sender, EventArgs e) { _wc.OpenReadAsync(new Uri(txtUrl.Text)); //_wc.DownloadDataAsync(new Uri(txtUrl.Text)); } void _wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { label1.Text = e.BytesReceived.ToString(); label2.Text = e.TotalBytesToReceive.ToString(); progressBar1.Value = e.ProgressPercentage; } void _wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { MessageBox.Show("Complete"); } void _wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e) { MessageBox.Show("Complete"); }
で、どこで読み込んでるのかね?
確かに発生しないようだな。 MSDN フォーラムのフィードバックに投げた方が良いかも。
541 :
デフォルトの名無しさん :2006/05/08(月) 00:25:12
HttpListener上でWebサービスをホストする方法ってどこかにサンプルないですか?
Webサービス呼び出しのコールバックを受け付けるような使い道で使いたいのですが。
「IISが稼動していない環境でも、簡単にWebサービス を公開できるようになる」と聞いたんですけど
具体的実現方法がよくわかりません。(どこまでやってくれるものを期待してよいのかどうかが知りたい。)
とりあえず、Webサービス作成プロジェクトで作った↓のようなものに
http://localhost/Serviceでアクセスできるようにしたいのですが 。
public class Service : System.Web.Services.WebService{
[WebMethod]
public string HelloWorld() {return "Hello World";}
}
値型、参照型をコントロールしたい フォームごと、ダイアログごとにソースを分けてイベント処理やコードを記述をしたい 何でもかんでもform1に記述しなくちゃならないのは気持ち悪いんだよね やらないでいい方法もあるけど、面倒だし てな人はC++お勧め 始めVBやってたけどいろいろ不満がでてC#をやり c#はほんと記述が簡単で細かい処理もできるしよかったけど C++やるとさらに細かく処理できて楽しい やっぱ最終的にはC++になるんだなー
そうだね
> やらないでいい方法もあるけど、面倒だし C++だともっと面倒だが
うらやましいな。 C#の手軽さに毒された俺はもうC++に戻れない・・・気がする。 すくなくとも趣味の範囲ではC++やる気しないなあ 速度が重要になってくるとそうでもないのかも知れないけど
メモ帳クローンが10分で作れるからなあ…
547 :
542 :2006/05/08(月) 18:53:12
>>544 そうなの?
>>545 そりゃ便利だけどさ、配布したいとかなるとさ
.ランタイムいれてくださいーっていうのがな・・・
やっぱネイティブでやりたいわけです
自分だけで楽しむならまあ、C#最強ですな
C++はまだ、始めたばかりでよくわかってないんだけどw
概要についていろいろ見てみると、自分がやりたかったことが
C++だと手軽にできる。APIやネイティブやらフックやら
もちろん、C#でもできるけど、きっちり学びたいんですよねー
548 :
542 :2006/05/08(月) 19:01:26
>>544 たとえばさ、OKダイアログ作るのでもさ、フォーム内に記述しちゃうでしょ?
扱いが簡単だから、
C++だったら、別のソースでイベント受けてresult==OKだった場合はうんぬんとか
記述できるし、まあ、C++でイベント作るとなると、あっちこっちに記述しないといけないのはちょっと面倒だけど
あとで、自分のソース見るときにわかりやすいんだよね。
TraceListenerを作ってTrace.Listenersに加え、ログをはこうとしたんですが、 よそのDLL(勝手にいじれない)がTrace.WriteLineしているらしく、 余計な文字列がログに混ざってしまいます。 これを抑止できませんか?
550 :
デフォルトの名無しさん :2006/05/08(月) 20:22:34
「よそのDLL」と違う名前のログファイルに吐けばよい(・∀・)
551 :
デフォルトの名無しさん :2006/05/08(月) 20:24:18
>>547 >.ランタイムいれてくださいーっていうのがな・・・
大丈夫だよ。次期Windowsではデフォで
.NETがインストールされるから。
TraceListener.Filter をどうにかすればできそうだが
>>542 C++ね…C#になれるともう使いたくね。
何とか使えるコードがかけるレベルになるだけで書籍を
何冊も抑えないといけないような言語仕様って終わってる。
「絶対やっちゃいけないこと」集めただけであれだけたくさん本
書けるんだもん。
554 :
542 :2006/05/08(月) 21:11:52
本買わないと無理なのか・・ やっぱC++やめました てか、C#でネイティブアプリ作れるようにしてくれよ! って言っても趣旨が違うから無理なんだよなー VB6ひっぱりだすか
VBランタイムはいいのか
D 言語が完成すればなぁ。
VS2005+C#を使用しています。 Bitmapクラスにロードしたフルカラー画像をGIF以外の形式で256色に減色して保存する方法ってありますか? Bitmap.SaveメソッドはどうやらGIF以外フルカラーでしか保存できなさそうですし・・・
558 :
542 :2006/05/08(月) 21:21:30
TraceSource使え。
>>557 取りあえず標準クラスライブラリ使ってお手軽にってのは存在しない。
自前で減色処理を実装する必要がある。
ひょっとしたらどこかにその辺の実装クラスがあるかも知れないが。
Paint.NET とかはどうなんだろ。
あ、一旦 GIF で保存してそいつを保存し直すって手もあるか。
いずれ.NET上で動く.NETが出来てその.NET上で動くOSが出来て、そのOS上で動く.NETができて いずれ、スタートレックみたいにコンピュータと会話しながらプログラミングできる時代がくるのはいつですか?
未完の大作
ミカンの大作
>>561 > いずれ.NET上で動く.NETが出来てその.NET上で動くOSが出来て、そのOS上で動く.NETができて
その時はそのOSの上で.NETではない新しいフレームワークが最新の開発環境になってるから
> いずれ、スタートレックみたいにコンピュータと会話しながらプログラミングできる時代がくるのはいつですか?
コンピュータと会話しなくてもシステム開発屋を呼べば会話するだけでソフトはできまっせ
金は掛かるけど
くだらねぇ
いちいち会話しないといけないの?めんどくせ〜
全ての要望をコンピュータが先読みして処理してくれるくらいじゃないとな まあ、人間いらない世界になるわなー
結構多くの人間が最適化で削除されると思う。
Earth.GC.Collect();
そして誰もいなくなった
ウワァァァアン!! 。・。∧_∧。・。 。゚ ( ゚´Д`) ゚。 o( U U 'ー'ー' 皆、何処行ったの〜。
Earth.GC.KeepAlive(all);
public static Object = me;
質問させてください。以下のようなコードをcscでコンパイルして実行すると FolderBrowserDialogは表示される(フォームとボタン)のですが、肝心のフォルダ選択をする コントロールが表示されずに困っています。 static void Main() { FolderBrowserDialog fbd = new FolderBrowserDialog(); fbd.ShowDialog(); } VS 2005 expressで新規プロジェクトを作成し、イベントから同じようなコード(ダイアログのインスタンス がフォームのメンバ変数になっているだけ)を起動すると表示されるのですが、 今実際に開発しているアプリケーションがcscでコンパイルされることを前提にしているので、 VSに移行するというのも難しく。 cscでコンパイルしてFolderBrowserDialogを正常に動かす方法を教えていただけないでしょうか。
STAThread 属性付けろ
即レス有り難うございます。無事表示出来ました。 これからぐーぐる先生にSTAThreadについて聞いてきます…
泣きながら戻ってくるなよ。
S(TAT)hread
誰が上手い事を言えとw
不覚にもワロタ
583 :
549 :2006/05/10(水) 01:03:54
フォーム上のコントロール たとえばテキストボックス「txtName」を参照するときに this.txtName.Text txtName.Text とどっちで書いても普通に使えますけど、どっちのほうが一般的に良いとされているんでしょうか?
this 付けた方がローカル変数と区別つきやすいから付けてる
プロセスは仮想的なもんだから、プロセスのメインモジュールのパスな。
>>587 System.Diagnostics.ProcessModuleのFileNameで取得できました。thx。
>>584 俺の場合、コントロールは「txt」「lbl」など明らかにコントロールであるとわかる
名前をつけてるからthisはつけない。
メンバ変数も「_xxxx」みたいにしていてわかるからつけない。
関数を呼ぶときにつける。this.Close();
後プロパティにもつける。 this.IsClosed
>>589 MSの推奨する名前付け規約と違うやりかたを持ち出されても...
592 :
589 :2006/05/11(木) 00:49:43
私はMSの命名規則を隅から隅まで熟読し、完全にのっとってプログラミングしています。 ただコントロールの名前だけは別。 そしてこの自分の意見と同じ人がかなり多いことが判明したので、そのまま通してます。 なので検索して調べてみてください。
593 :
589 :2006/05/11(木) 01:35:56
名前空間は必ず会社名から始まるようにしてますし、publicなメンバはすべてPascal形式です。 英単語の省略は避け、ものすごく長い名前を採用しています。 変数に型名の一部をつけたりしないし、必ず変数の内容のわかる名前にしてます。 Flagとかflgとかは使いません。単語の区切りに_を入れたり記号を入れたりしません。 インターフェイスの先頭には必ずIをつけてますし、キャンセル可能なイベントは〜ing形式にしてます。 ちゃんとMSの命名規約に書いてあります。 私は名前付けに漏れがないかFxCopでチェックします。 それでもコントロールは例外にしています。
594 :
デフォルトの名無しさん :2006/05/11(木) 01:53:52
メンバ変数のって_から始めるの推奨してたっけ?
やあ、713だ。
596 :
デフォルトの名無しさん :2006/05/11(木) 03:14:46
FxCopってのあるんだ始めて知った おもろい
597 :
デフォルトの名無しさん :2006/05/11(木) 03:23:44
演算子はオーバーロードな。 理由も書いてるだろ。 まあ、C# では弱いね>文字列の比較 それ以外については、Object.Equals のドキュメントにガイドラインが示されてる: > ・参照型のセマンティクスが、その型がなんらかの値を表しているという事実に基づいている場合には、 > この参照型の Equals のオーバーライドを検討してください。 > ・ほとんどの参照型では、Equals をオーバーライドする場合でも、 > 等値演算子はオーバーロードしないでください。 > ただし、複素数型のような、値のセマンティクスを持つ参照型を実装する場合には、 > 等値演算子をオーバーライドする必要があります。
>>589 継承したとき、this付けないと継承元のが呼ばれちゃうから、
ちゃんとthis付けた方がいい。
>>600 継承元と同じ名前のメンバ名つける気ですか?
関数の話だろ?
>>599 MSDNにはこうある。
>既定では、演算子 == は、2 つの参照が同じオブジェクトを示すかどうかを確認して参照の等価をテストするため、
>この機能を取得するために参照型で演算子 == を実装する必要はありません。
>型が変更できない場合、つまりインスタンスに含まれているデータを変更できない場合、
>その型は、変更不可能なオブジェクトとして、同じ値を持つ限り同一と見なされるので、
>参照の等価の代わりに値の等価を比較するように演算子 == をオーバーロードするのが有効です。
>変更不可能な型以外で演算子 == をオーバーライドすることはお勧めしません。
stringは変更不可能な型だからこの例外規定に当てはまるわけで、
他では使おうとは思わないが stringだけ特別扱いでいいと思う。
難点としてはJavaやるときもつい文字列の比較に==を使ってしまいそうになることぐらいか。
>>602 関数、プロパティ、protectedやpublicなインスタンス変数のどれも継承先で隠蔽にするには
明示的に new キーワードが必要で、あえて使おうとは思わないな。
>>600 隠蔽にしろoverrideにしろ何もつけなきゃ継承先のが優先されるだろう?
継承もとのstatic関数のこと言ってるんじゃない?
んなもんはじめからthisじゃ呼べないだろ。
>>606 だからstaticじゃない関数を呼ぶときには
thisを付けなきゃダメってこと。
えー
だから、基底クラスのstatic関数と継承クラスの非static関数が同名になってしまったときに 継承クラスで後者を呼ぶときはthisを付けなきゃならない、って場合を考えろと言うことだろ?
言ってることがうにくらげ。具体例をソースで示してよ。
そんなことは普通やらない。 普通やらないことのために書き方を変えたりしない。
>>609 その場合でもnewをつけないと警告が出るよ
もう好きなように書けばいいと思うよ。
継承元を呼ぶ場合は base.func1()で、override や new(隠蔽)した方を呼ぶ場合はthisは必須ではない。 それから、static関数を呼ぶ場合はクラス名.関数名() で呼ばないと警告が出る。 thisは付けても付けなくても生成されるコードに差は無いから規約があるならそれに沿って、 無いなら好きなほうにしろでFAだったと思う。 thisを使う必要があるのは次のケースぐらいだったかと。 private int count; void func1(int count) { this.count = count }
プロパティの中でキャストしてやりたいのですが、方法がわかりません。 動かないコードですが、 private Arraylist _array = new ArrayList(); public ItemBody item[int i] { get { return (ItemBody)this._array[i] } } のような感じで、_array の実体は ItemBody クラスのインスタンスが格納されている 状態で、itemプロパティで、_array から必要な項目を ItemBody 型として 取りだしたいのですが…。 アドバイス頂けないでしょうか?
>>615 > public ItemBody item[int i]
C# では引数付きプロパティはサポートされてないよ。
617 :
615 :2006/05/11(木) 18:03:54
>> 616 ありがとうございます。という事は、プロパティではなくメソッドで実装しないといけない、 という事ですね。プロパティではできない事がわかっただけでありがたいです。
2.0なら private List<ItemBody> _array; public List<ItemBody> item[int i] { get { return this._array; } } これでそれっぽくなる 1ならインデクサを実装したItemBody専用のコレクションクラスを作るしか無さそう
619 :
618 :2006/05/11(木) 18:05:25
621 :
618 :2006/05/11(木) 18:18:32
そういえばそうか。 ReadOnlyItemBodyList : List<ItemBody> ...そこまでするならitem(int index)で代用したほうがいいね
List<T> じゃなくなるが、一応 List<T> には AsReadOnly メソッドがある。
DataGridViewなどでセルの値を取得するのにたとえば MessageBox.Show(dataGrid[0,0].value.ToString()); と書くとします。 ところがそのセルがnullだった場合エラーになりますよね。 ではこういう時にどうするかってことなんですけど、もちろんこのコードの前でnullだったら実行しないという if文を書けばいいのはわかりますが、たとえばVBでいうところのnz関数みたいなものがあれば 1行で事足りるのかなと思ったりしました。 手間を惜しむわけではないのですが、短くなればそれに超したことはないなと思いました。 オブジェクト指向という考え方からすれば dataGrid[0,0].value.ToString() こういう書き方をしないで、ちゃんとセルのインスタンスを作ってからそれを処理するべきなんでしょうけど、 こういうアクセス方法を用意してくれるならnz関数とかもありなのかなと思ったり・・・。 こういう場合はどういう書き方をするのが一般的なんでしょうか?
>>623 DataGridColumnStyle.NullText
626 :
623 :2006/05/12(金) 13:00:08
>>625 こんなのがあったのか・・・。
まだまだ勉強不足でした。
627 :
デフォルトの名無しさん :2006/05/12(金) 18:53:07
あの〜すみません。 TreeNodeで、下位のノードがあるかどうかを調べるにはどうしたらよいでしょうか?
Nodes の Count 見ればよかろ
629 :
デフォルトの名無しさん :2006/05/12(金) 19:05:14
へば! そういえばそうでしたね! ありがとうございます!!!
630 :
デフォルトの名無しさん :2006/05/14(日) 08:46:13
みなさんはtry-catchって全てのメソッドに入れてますか? 自分はほぼ全メソッドに入れてますがこれって一般的なのか? 以前、ロジック上どう考えても例外発生しないところで 例外が発生しアプリが異常終了した苦い経験があり try-catchをやりまくることに決めたのです。。。 catchしてExceptionのメッセージ、スタックトレースをログ出力したり、 他に取得した方が便利な情報はないか悩んだり、 そのときほど例外処理は難しいと思ったことはなかったよ。
>>630 例外は正しく処理できなければプログラムが終了する。それはあたりまえ。
正しく処理できない例外まで捕まえて握りつぶしてるのであれば愚の骨頂じゃないかなぁ?
乗っかって質問 通常の動作では出ないはずの例外は ドキュメントに書いてあってもあえてcatchしてないんだけど やっぱりcatchしたほうがいい?
>>632 処理するつもりが無ければしなくていい。
っていうかできないだろ。空の catch でも書くつもりか?
DLLにするような独立性の高いクラスでは一通り補足して他の例外にまとめたりログ吐いたりするようにしている。 そうじゃないものは必要なものだけ。この辺はJavaのそれとはポリシーが違うから郷に入っては郷にだよ。
635 :
デフォルトの名無しさん :2006/05/14(日) 10:32:26
>>630-634 正しく処理できない例外は
デバッグ段階ではひとまずcatchしてログを吐かせて理由を調べ、
↓その上で
実際のリリース版ではログに吐いて処理継続していいのか
上位階層にスローするとか、ほんとに終了させちゃうのか、どうするのかを
判断すべきでしょうね。
ゲーム作ってるが、例外が発生したらもう続けようがないので 一番上の層だけで受け取ってメッセージ出力させてる。
637 :
デフォルトの名無しさん :2006/05/14(日) 11:30:07
exceptionのstacktrace見ても解読するの難しい。。。初心者房ですまぬ。
何故厨房は厨房のことを房と略すのか不思議でならない。MS厨とか書いてあっても「えむえすぼう」 と読んじゃっているんだろうか。
639 :
デフォルトの名無しさん :2006/05/14(日) 11:34:45
厨房は厨房のことを房と略す 厨房は厨房のことを房と略す 厨房は厨房のことを房と略す
なぜかへんがえできない
デバッグ時もキャッチしない。 どうせデバッガで止めることもできるから。 ライブラリでも想定外のものはキャッチしない。 ただこれは場合によるな、キャッチしてラップすることもある。 普通の使う側でも想定外のものはキャッチしない。 どうせキャッチしても何もできないんだから。 ログ出力とかは一番上位で勝手にさせるし。
すべてのメソッドでtry-catchなんてやるわけがない。 いったいそれぞれのcatchで何をする気だ。
想定外のエラーが起こってるのに処理を続行するなんて恐ろしいことはできん。
すみません、初心者です。 子ウインドウの作成はどうすればいいのでしょうか。 SDKでいう、WS_CHILD属性のウインドウです。
>>645 from2.ShowDialog(this);
647 :
645 :2006/05/14(日) 16:44:10
>>646 すみません、それはモーダルダイアログでした。
作りたいのは、親ウインドウが動くと子ウインドウも動いて、
子ウインドウをクリックしてもタイトルバーが青くならないタイプのものです。
MDIウインドウも試しましたが、背景色が濃いグレーに固定されてしまって
希望するものになりませんでした。
>>647 だからダイアログだっつってんだろ!!!
?ダイアログじゃないでしょ
しかもfrom2って何
>>645 の言いたいこともよくわからん
form.Controls.Add(child) とかじゃないの
650 :
645 :2006/05/14(日) 18:04:27
>>649 多分そういうことですが、childの部分にフォームを与えたところ
'トップレ ベルのコントロールをコントロールに追加できません。'
という例外が発生しました。
WindowsSDKで、CreateWindowの引数のスタイルがWS_CHILD、親ウインドウが
親ウインドウにしたいウインドウのハンドルを指定したときにできるものです。
651 :
645 :2006/05/14(日) 18:13:25
>>649 TopLevelプロパティをfalseにしたところ、form.Controls.Add(child)の
やり方で出来ました。ありがとうございます。
フォームはトップレベルウインドウだから子ウインドウにはできないですよ
質問です。 ドライブをリストするプログラムを作ったのですが、ちょっと問題があります。 テストに使用したPCにはフロッピードライブがついていないのですが、DriveInfo.GetDrives() の結果にはAドライブが含まれており、 DriveInfo.IsReady は false が返るのですが、呼び出しに5秒ほど待たされるという状態です。 一応 try { string s = drive.VolumeLabel; } catch { continue; } などと試してみたのですが同様でした。 ドライブがあるかないか短時間に調べる方法はないでしょうか?
>>653 ん〜、うちではそんなこと無いな……。
WMI の Win32_LogicalDisk 使えばどうなる?
655 :
653 :2006/05/14(日) 23:19:54
>>654 レスどうもです。
WMIについてはよくわからないのですが、Webページを参考に
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk")
For Each objDisk in colDisks
Wscript.Echo objDisk.Caption
Next
のようなコードを実行したところ
A:
C:
D:
・・・
のように表示されました。最初のA:が表示されるまでにはやはり5秒ほどかかったようです。
>>642 今急に思いつきで、全部のメソッドで
catch(Exception ex){
Trace.WriteLine(メソッド名);
Trace.WriteLine(ローカル変数や仮引数などの名前と値);
throw;
}
とか書いておいたらいざというときデバッグしやすいかもとか思ったんですが
いかがでしょうよ?
デバッグとかやりやすいってのはまあわかるが、 実際そんなことやっとれんでしょうよ。 やっぱしAOP的にやれんときついでしょ。
>>656 もっと大きい単位でDebugかTrace入れとけば間に合うだろう。
catch (Exception ex) {
System.Diagnostics.Debug.WriteLine(ex.ToString());
}
catchブロック内は「ログ吐きクラス」でも作って、 その中の「ログ吐きメソッド」を呼ぶようにした方が楽。 関数名なんかはそのメソッド内でスタックトレースから 取得するようにしたらよい。
つ[ log4net ]
デザイナってツールボックスやサーバエクスプローラからD&Dで簡単に コードを自動生成できて便利なんだけど、これって必ずしもControlに 依存しないよね。だけど、Control継承クラスじゃないとデザイナ画面が 出せません。それ以外のクラスでもデザイナが使えるようにすることって できないんでしょうか?
.NET では基本的に Control じゃない == 非 GUI ということになるが、デザイナを使いたい非コントロールってなんだ? それとも OpenFileDialog みたいなコンポーネントを作りたいってこと?
データベース周りいじっててそう思いました。 DataAdapterやDataSetなんかをデザイナで簡単に作成できるんですが、 それは必ずしもUIと一体化させるとは限らないような気がして。
分かりづらくて申し訳ない。要するに(一例として) UIを持たずにデータベースにアクセスするようなクラスでデザイナ を使えないかということです。
コンポーネントの追加ではいかんのか
ああ、こんなときにコンポーネント使うんですね。 ありがとうございます。
>>663 機能多すぎて使いづらい・・・(´・ω・`)
起動時に開かれる親formのインスタンスを取得したいのですが、 何かいい方法ないですか?
必要としてるメソッドに参照を渡せ
>>672 起動時のウィンドウって形で取得したいので、パラメータ渡しはしたくないんですよね。
Formの状態を設定するだけなんでFormにキャストしてあげればいいし。
Form myForm = (Form)Application.OpenForms[0];
というわけで、これでいけるかどうか実験中です。
>>671 「起動時に開かれる親form」って何?
そもそもそういう特別なWindowってあったっけ?
アプリによっては[起動→スプラッシュウィンドウ→初期化処理→メインウィンドウ]って流れになるから必ずしも最初にCreateWindowされるのが全ての親になるって保証はないわけだが。
どれが親になるのかは開発者しか分からないから、
>>672 の回答が正解だと思うんだけどね
もしかして単に「最初に作られるトップレベルウィンドウのインスタンスを取得したい」って話?
そういう場合普通概念的には透過プロキシ使えよ、という。
しかしあらゆるメソッドでプロキシ使えってのは はっきり言って現実的じゃない。ような気がする。
678 :
デフォルトの名無しさん :2006/05/17(水) 11:36:19
メールクライアントを作ろうとしてるんだが、 POP3のやりとりで USER−>PASS−>STAT で動かなくなる。 アンチ・ウィルスを止めるとうまく動く。 どないせえっちゅうんや。
アンチ・ウィルスを止める
どないもこないもありまへんがな
止まるだけならマシやがな 俺のはコマンド間違えるとアンチウィルスソフトが強制終了するがな 再起動するまで直らんがな
682 :
デフォルトの名無しさん :2006/05/17(水) 14:09:49
using Microsoft.Office.Interop;←こんな感じで参照しているのに、 using Microsoft.Office.Interop.Word;←こんな感じで参照しているのに、 private Microsoft.Office.Interop.Word.Application WdAppli;←ここまで丁寧にかけば大丈夫だた。 replaceAll = Word.WdReplace.wdReplaceAll; ←これはエラーでる。 これはなぜでしょうか。 word2000を使用していた頃はこんなことにはなりませんでした。 word2000をアンインストールして、word2003をインストールし使用するようになったら、急に自分で作ったソフトがエラーを出すようになってしまいました。 なお、既に、 wordobjectlibrary11.0は参照追加済みです。 宜しくお願いします。
エラーの内容を書かないのは相変わらずだな
C#2.0のアプリでファイルアップロード機能を作ろうと思っています。
下記のようにして、win2kサーバのWeb共有を施したフォルダをアップロード先に指定しました。
NetworkCredential nc = new NetworkCredential();
nc.UserName = "username";
nc.Password = "pass";
webClient.Credentials = nc;
System.Net.webClient.UploadFile(url,localpath);
url="
http://192.168.0.1/DLSample/ "
localpath(コモンダイアログより取得)
これを実行すると以下の例外が表示されアップロードが出来ませんでした。
パスワードの間違い等はありません。
System.Net.WebException: ログオン失敗: ユーザー名を認識できないか、またはパスワードが間違っています。
---> System.IO.IOException: ログオン失敗: ユーザー名を認識できないか、またはパスワードが間違っています。
以上です。
申し訳ありませんが解決方法のヒントをいただけないでしょうか。
NTドメインは?
>>685 回答ありがとうございます。
[NTドメイン]と言うものを考慮する必要があることを知りませんでした。
そのあたりについてもういちど調べてみます。
ちなみにサーバ上のフォルダにファイルをアップロードするという機能自体は
WebClient.UploadFileを使用することで実現できるのでしょうか。
>>682 using Word = Microsoft.Office.Interop.Word;
private void tabControl1_Selecting( object sender, TabControlCancelEventArgs e ) { MessageBox.Show( e.TabPageIndex + "\n" + tabControl1.SelectedIndex ); } で、e.TabPageIndex と tabControl1.SelectedIndex が同じ値だけど、 これっておかしくない? tabControl1.SelectedIndex は Selected の後で変わるべきちゃうか? だって SelectedIndex だもん
結局Javaもプロパティをサポートすんだね。 どんだけパクれば気が済むんだ
691 :
デフォルトの名無しさん :2006/05/19(金) 05:12:47
>>690 C#も、JavaとDelphiパクりだし気にスンナヽ(´Д`)ノ
確かにJavaはパクってるがDelphiをパクったというのはどうだろうか
ああ、設計者が一緒だから、パクりじゃないだろ、といいたいのかもしれんか・・・
教えて下さい。 string uri = @"URL〜/cgi-bin/set?data=["\]"; WebClient wc = new WebClient(); Stream st = wc.OpenRead(uri); てな感じで/cgi-bin/set?data=["\]を送りたいんですが、 wc.OpenRead(uri);を実行すると、勝手に["\]がエスケープされて %22,%5Cになってしまいます。 訳合ってエスケープしたくないんですが、 エスケープせずに送る場合はどうすればいいんですか?
UrlEncode しなきゃ駄目な文字だし。そのまま送ったら RFC 違反。
>697 そうなんですが・・・ でも、IEのアドレスバーに/cgi-bin/set?data= "\ って入力して、Enter押すと半角スペースは%20に エスケープする癖に、"\については無変換で送ってるんですよ。 実際、送ったパケットをキャプチャしてダンプを見ると、22 5cで送ってるし・・
>>698 といっても
>>697 の言うとおりだし・・・
>半角スペースは%20に エスケープする癖に
半角スペースはエスケープしないとhttpサーバでエラーになるから、
シフトJISをそのまま送る凶悪なIEでもさすがにエスケープせざるを得ない。
>699 じゃあやっぱりIEがRFC無視したクソ野郎ってことですね(´Д`) ああ〜IEを踏襲した仕様云々〜なんて言わなきゃよかったよ・・・ WebClientっぽいのを一から作って間に合うかどうか(;´Д`) 色々ありがとう。 吊ってきます・・・
なぜそこでクライアントを1から作るという発想になるのか
次のようなidlを元にmidlとtlbimpを使用して相互運用アセンブリを作成しました。 import "oleidl.idl"; [uuid(82636634-EA4C-4577-8CEF-E5D917E709AE)] library Test{ [uuid(4635C6B4-7916-4a6e-8266-1B92C9B3DBD9)] interface ITest :IUnknown{ HRESULT MethodA(GUID guid); }} .Net Framework には Guid 固有のマーシャリング処理が含まれているので MethodAの引数の型は System.Guid になるか、と期待したのですが、 相互運用アセンブリ内で定義されたGUID構造体になってしまいます。 MethodAの引数の型が System.Guid になるようにするには どうすればよいのでしょうか?
PanelのAutoScrollがtrueで、 乗せているコントロールの幅と高さがPanelを超える場合でも、 スクロールバーが縦と横の両方表示されるPanelと 縦しか出ないPanelがある。 PanelもPanel上のコントロールも、DockはNone以外。 Dockが共通でも挙動は異なる。 必要時にスクロールバーが表示されるにはどうしたらいいだろうか。
>>703 もっと条件詰めれ
つか AutoScroll と Dock は相性悪いと思うが
ScrollableControlの使えなさは異常 糞杉
>>704 >もっと条件詰めれ
痛いとこ突かれた。ほか書くことないもんなあ。
環境はC#2005 Express。ぐらい?
Panelは別のPanelに乗っている。
挙動の異なるPanel同士は隣接し、片方がDock.FillでSplitterで分割。
あと訂正。DockがNoneのものもある。
>>705 そうなのか?
AutoScrollPositionが負の値で取得されるのはどうかと思った。
>>706 >Panelは別のPanelに乗っている。
親のPanelをDockやめてAnchorにしたら上手くいったことがあったようななかったような
デイトタイム構造体への変数入力について教えて下さい。 分や秒だけ、入力し、他の数字(日付や年)は、すでに入っている値をそのままにするにはどうしたらいいのでしょうか? 例えば以下のように数字を入れた後、 X = new DateTime(2006,5,20,21,5,15); 2006年とか5月はそのまま変更することなく、 分と秒だけ変えたいのです。 教えて下さい<(_ _)>
作り直せ。
ぷろぱてー
>>709 レスありがとうございます。
作り直すというのは、どういうことなのでしょうか?
X = new DateTime(X.Year, X.Month, X.Day, X.Hour, newMinute, X.Second, X.Millisecond); 元の値から差を計算して AddMinutes でもいいけどな。
>>712 あああ〜〜
なるほどそうやればいいだけなのですね。
ありがとうございました。
714 :
デフォルトの名無しさん :2006/05/21(日) 02:09:42
本アプリと、本アプリで使用するデータエディタを作成しております。
データエディタで作成したデータ(クラスオブジェクト)をシリアライズ化してファイルに出力し、
本アプリで読み込んで逆シリアライズをかけたのですが、
アセンブリ 'DataEditor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' が見つかりません。
と言われました。
本アプリ :SOX.exe
データエディタ :DataEditor.exe
なので、エディタの実行ファイル名をSOX.exeにすると本アプリでも読み込めました。
シリアライズ化したクラスオブジェクトを逆シリアライズすることが出来るのは、
同じ名前の実行ファイルだけなのでしょうか?
別の実行ファイルでも逆シリアライズできる方法を教えてください。
↓ここを参考にしました。
ttp://dobon.net/vb/dotnet/file/binaryformatter.html
そのデータクラスを独立した DLL にして、両方から参照させろ。
>>714 シリアライズしたい型をdllの中で定義して、
SOX.exeとDataEditor.exeの両方から参照してみては?
>>714 XMLSerializer使うってのはどうよ。
1.1だと日本語環境で致命的なバグがあったけど2.0なら使えるんじゃないかな
718 :
703 :2006/05/21(日) 09:47:47
>>707 Anchorで代用できるか試したがうまい具合にPanelを広げられなかった。
自己解決したので報告しとく。
StatusBarのzオーダーが原因だった。
他のコントロールよりも後ろに配置してやらないと今回のような不具合が見られるようだ。
これはToolBarにも同様のことがいえる。
皆さん回答ありがとう。
XMLSerializerで1.1だと日本語環境で致命的なバグ げ、これってどんなの?
10分ぐらい固まるんじゃないっけ
サンクス、XmlSerializerバリバリ使ってるから心配だったわ。
XmlSerializer不便じゃないか?XmlIncludeAttributeとか
設定ファイルなんかの 設定オブジェクト<=>Xmlでの永続化が便利じゃない? List<string>とかもそのままいけるし ある程度階層化とかも容易だし List<XmlSerialisableな設定オブジェクト>みたいな
725 :
714 :2006/05/21(日) 20:03:07
皆さんありがとうございました。 大変参考になりました。
726 :
デフォルトの名無しさん :2006/05/22(月) 15:35:24
フォームが突然普通のクラスに変わってしまうのぜすが、 同じような経験の方いませんか? (デザイナで開けず、単なるクラスとしてしか触れないので、ボタンの配置等ができない) HogeForm : Form と、フォームを継承しているのに、右クリックにて表示される 「デザイナの表示」メニューが消えてしまうのです。 アイコンも、フォームのアイコンでなく、クラスファイルのアイコンです。
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を /// コード エディタで変更しないでください。
ソフトキーボード作りたいんですけど、 キーボードの入力イベントってソフト的に発生するにはどうすれば良いですか?
KeyDown,KeyUp,KeyChar(うろ覚え)
>>729 なんかそれらはキー入力を処理するためのもののようです。
んじゃ、SendMessageすればいけるんとちゃう?
どもです。 検索の結果、SendKeys.Send()でいけそうな感じです。 でもマイクロソフトのサイトには、「重要」危ないから使うな、って書いてあるけど。
>>702 今更のレスだが、ilasm と ildasm 使えと言うことになるんじゃないかな
734 :
デフォルトの名無しさん :2006/05/24(水) 09:59:39
ここ数日、突然ステップ実行に異常に時間が(1行5秒ぐらい) 掛かるようになってしまったのですが、同じ現象に遭遇した人 いませんか? ブレークしない分にはデバッグ実行も普通に動作しています。 よろしくお願いします。
エディット&コンティニューを有効にしたとか? //それで遅くなるかは知らん
>>735 ありがとうございます。
エディット&コンティニューとは何でしょうか?
試してみたいと思うのですが。
737 :
デフォルトの名無しさん :2006/05/24(水) 10:08:17
>>735 あ、オプションのデバッグのところにありました。
確かに有効になってます。
これってデフォルトは無効なんでしょうか?
738 :
デフォルトの名無しさん :2006/05/24(水) 10:15:24
>>735 無効にしてみましたが、結果は同じですね。
またされている間の5秒間はCPU使用率も100%になってます。
書き忘れてましたが、VS2003 + ASP.NETです。
>>735 その後、いろいろ試していたらどうも
ソリューション依存っぽかったので
8MB程度に肥大化していた.suoファイルを
削除して作り直したところ元に戻りました。
(再生成されたファイルは8KB)
エディット コンティニュは有効でも特に
遅くなるという感じはありませんでした。
お騒がせしました。
2003でエディット&コンティニュて使えたっけ? あと、ブレークポイントの数が増えると 極端に重くなる事がある。
>>740 使ったことはないんですが、一応オプションに項目はありました。
742 :
デフォルトの名無しさん :2006/05/24(水) 11:40:53
WebBrowserクラスにて、画像表示のON/OFFやActiveXの実行のON/OFF、 JavaScriptの実行のON/OFF、などをやりたいのですがどのプロパティorメソッドを用いればよいのでしょうか??
743 :
デフォルトの名無しさん :2006/05/24(水) 16:57:18
イミディエイトウインドウて、名前完全修飾じゃないと使えないの? 名前 'Convert' は現在のコンテキスト内に存在しません。 て、出るけど、完全修飾なら使える。。。 何か方法ないかしら?
>>733 どうもありがとうございます。
その方法でやってみましたが、
idlを書き換えた際のMSILの更新が大変だったので
結局、 .NET Reflector でDLLをC#のコードに変換して使用する事にしました。
C#(NET)でファイルパス等の文字列を縮める にはどうしたら良いのでしょうか? 例えばエクスプローラのように "c:\aaa\bbb\cccc"を "c:\aaa\bb..." としたいのですが 自分では見つけられなかったので 今のところPathCompactPathをP/Invokeしてます
DrawString のStringFormatTypeかなんか。
749 :
747 :2006/05/24(水) 22:39:24
あ、できました
StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap);
fmt.Trimming = StringTrimming.EllipsisWord;
e.Graphics.DrawString(,,,,,,fmt);
こんな感じで。
因みにEllipsisPathを指定したら中間だけ省略されて面白いですね
>>748 さんありがとう
GDI+作った奴天才だろ
消え去る運命
app.config で前もって設定した、keyのvalueの変更ってどうやって やればいいんでしょうか?
エディタで開いて変えるねん。 それがいやならXmlDocumentにでも読み込むねん。 それもいやならあきらめるねん。
あー、やっぱり読み込みみたいに簡単にやる方法はないのね。 >>XmlDocumentにでも読み込むねん。 これでやります。dクス >752さん
app.configって動的に書き換えるもんか?
基本的に書き換えるな
2.0ならOpenExeConfigurationとかで開いて変更して保存できるかも。
MSDNでC#の文法一覧書かれてる場所わかりませんか? while(expression)|statementみたいなかんじで・・・ どっかにあったのまえみたんだけれどみつからなす。
言語仕様 で MSDN 検索汁
あったよ。 あとインストールフォルダのlanguagespecificationXXX.docもあった。 さんくすこ
ネットワーク共有についてです。ネットワーク共有で接続しているマシンのサービス名の取得ってできないでしょうか? \\hogehoge\shareddocs とアクセスしてフォルダやファイルの一覧の取得は可能ですが、 \\hogehoge とアクセスして sharddocs などの共有フォルダの一覧を取得したいのです。 c# のリファレンスなどを見ても、ネットワーク共有のクラスなどはないようですし。 どなたかご存じないですか?
.NET 単体じゃ無理。NetShareEnum とかが必要。
>>762 どもです。System.Net あたりに用意されているといいんですけれどね〜。
ありがとうございました。
764 :
デフォルトの名無しさん :2006/05/25(木) 14:41:16
自分でつくったDLLをグローバルアッセンブリキャッシュに登録し VisualStudioから参照の追加でこのDLLを参照させるにはどう指定すればいいのでしょうか
>>764 ・sn.exe
・gacutil.exe
以上
説明不足でした。 登録のほうじゃなく参照のほうを聞きたいです。 参照の追加で%SYSTEM%assemblyフォルダ開いても指定できないし 登録したDLLを直接指定すると絶対パスになってしまう。 別のPCに持って行っても大丈夫なようにファイル名だけ指定したいのですが
>>766 assembly にあるほうじゃなくて、手元に残っている DLL を指定。
開発用の共通ライブラリをプロジェクト間で使い回すためにGACに登録するのは邪道。 GACはあくまで実行時に参照するためにある。
なるほど実行時のみですか。 VSでのビルド時のDLLパス指定ですが 参照設定してるDLLのプロパティにある「パス」って項目が編集不可で相対パスが指定できません。 ほかのPCにもっていっても問題なくビルドできるようにするにはどうすれば良いのでしょう
>参照設定してるDLLのプロパティにある「パス」って項目が編集不可で相対パスが指定できません。 試してみましたか? 変なコピーの仕方をしなければ問題なくビルドできると思いますが・・・
.csprojの中みましたが 参照DLLがプロジェクトと同じドライブにあるとReference/HintPathが相対パスになるが ドライブがちがうと絶対パス指定に。 例えばこの参照DLLがオラクル製のだとして 違うドライブ:%PROGRAMFILES%oracle\bin\oracle.dll を参照させると別のPCにもって行ったときoracle.dllが想定外の場所にインストールされてるとビルドできない。 このあたりをグローバルアッセンブリで解決できればいいなとおもったんですが。 プロジェクトフォルダに参照DLLのコピーいれとくのが普通の解決方でしょうか。
csproj って、実行時には参照されないって知ってる?
>>771 やりたいことはわかりましたが、ドライブが違うのに「相対パス」とか書いても意味ないですよ。
「ファイル名」のことですよね。
参照するアセンブリの場所が変わったときにもファイルをプロジェクトのディレクトリ内にコピーしておくか、
持って行った先でプロジェクトのプロパティで「参照パス」を設定するのが普通なような・・・
それはさておき、元々の質問
>VisualStudioから参照の追加でこのDLLを参照させるにはどう指定すればいいのでしょうか
登録済みのものはファイルを指定しなくても.NETのところの一覧に出てきませんか?
>>773 >登録済みのものはファイルを指定しなくても.NETのところの一覧に出てきませんか?
でてきません。
gacutilからも登録が確認できない。
エクスポローラからassemblyフォルダみるとちゃんと登録はされてんですが。
>>775 >エクスポローラから
お前はもう死んでいる!
string str = "゚<>゚";として str.IndexOf("<>");で-1が返ってくるんだけど何故? 最後の「゚」を取り除くと、ちゃんと1が返ってくる。
"゚<>゚"; ("<>"); ↑かわいい^0^
以前にも話題に出て答えた記憶があるな。 多分 Unicode に起因する仕様(推測)。 濁点や半濁点は、直前の文字と結合して一つの文字として認識されるようだ。 ちなみに全角の濁点半濁点でも同じ。探すと結構その手の文字は多い。 (日本語環境で表示できるのは全半角の濁点半濁点くらいだが)
゚がカルチャ関係でひっかかってたみたいです StringComparison.Ordinal指定したらOKでした。
static void Main(string[] args) {
System.Net.WebClient wc = new System.Net.WebClient();
wc.Headers.Add(HttpRequestHeader.Range, "bytes=0-1");
byte[] data = wc.DownloadData("
http://www.example.com ");
wc.Dispose();
}
これだけのプログラムなんですが、DownloadDataのところでWebExceptionが発生します。
そのWebExceptionを見ると、StatusプロパティがWebExceptionStatus.UnknownErrorです。
InnerExceptionはArgumentExceptionで、Messageが
"このヘッダーは、適切なプロパティを使用して変更しなければなりません。\r\nパラメータ名: name"
StackTraceが
場所 System.Net.WebHeaderCollection.ThrowOnRestrictedHeader(String headerName)
場所 System.Net.WebHeaderCollection.Add(String name, String value)
場所 System.Net.HttpWebRequest.set_Headers(WebHeaderCollection value)
場所 System.Net.WebClient.CopyHeadersTo(WebRequest request)
場所 System.Net.WebClient.GetWebRequest(Uri address)
場所 System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
これを見ると、HttpWebRequestでRangeヘッダーやIf-Modified-Sinceヘッダーなどの「制限付きヘッダー」を設定したときに投げられる例外のようです。
ところがWebClientクラスのHeaderプロパティのドキュメントには
>Headers プロパティは、WebClient が要求で送信するヘッダー情報を含む WebHeaderCollection インスタンスを格納します。
>これは無制限のヘッダーのコレクションであるため、HttpWebRequest などの WebRequest の子孫で制限されるヘッダーを設定できます。
と書いてあります。これはドキュメントが間違っているのでしょうか?
また、WebClientでRangeヘッダーやIf-Modified-Sinceヘッダーを使うにはどうしたらよいでしょうか。
.NET Framework 2.0です。
そう言うもんだと割り切って HttpWebRequest 使えば
MicrosoftのC#のIDEを手に入れたいんですけど、
今、製品版を買うとしたらどれがいいんでしょう?
それと
>>4 にある無料配布中の開発環境はバージョンが古いのでしょうか?
色々種類が多くてわかりません!
>>783 個人開発なら
>>4 にあるので十分性能あるよ。
最近無期限で無料にもなったみたいだし。
>>784 ありがとうございます!
さっそくDLしてきます
>>774 ファイルがわけの分からない深い場所に保存されるのと
仕様がはっきりわからないのが気持ち悪くて
結局XMLSerializer使って設定読み書きしてる。
ScopeをApplicationにすりゃ良いだけだったような。 でもそれ使わずに俺もシリアル化してる。
2005std買ったけど、糞重いから結局無料版のC#でプログラムやってるやつはおれだけじゃないはず
糞重いがリファクタ機能を死ぬほど使う俺には重宝
分離ストレージの管理ツールはSDKにあるstoreadmだけだから、 GUI系の使いやすいツールがランタイムのほうに付くようにならないと安心して使えない。 ただ分離ストレージは制限ゾーンで使えるから制限ゾーンを使うアプリではよく使っている。
アプリケーションの設定ファイルについて言えば、 XMLファイルにすると、ほとんど絶対って言っていいほど 設定用のウィンドウを作ってあげなければならない。 INIファイルならユーザーが自分で開いて楽に設定を変更できる。 よりユーザーに親切にしたいのなら、設定用ウィンドウを 作ってあげればいいし。
手抜きするなら PropertyGrid でいいじゃん
>>791 個人的にはINIでもXMLでも何でもユーザが手でテキスト開いて設定直すって
ありえない気がするので、どっちも設定画面作るのは一緒。俺の場合。
書き直されることを想定して作るけど、推奨はしたくないな……
そういえばMS-DOSの頃はユーザーがINIファイルを開いて、 自由ににカスタマイズするのが当たり前だったよな・・・
コマンド引数付きのバッチファイル作ったりな
>>782 当面はそうしますけど、場合によってはWebClientのほうが楽ですし
ドキュメントに「設定できる」って書いてある以上、出来なきゃおかしいと思います。
しかも例外が発生する場所がおかしいですし。
じゃあお前はドキュメントに死ねって書いてあったら死ぬのか!!!!!!!!!!
>>798 それだったらドキュメントを直せって話になりますし。。。
まあ俺らに言われても困るし、MSDNフォーラムに投げたんだったら後はMSの人の回答を待っとけ。
c++のソースをC#にコンバートするツールはありますか?
無理だし。
803 :
801 :2006/05/28(日) 03:58:08
一旦コンパイルしてからreflectorでソース見ながら手動で変換するしかないのかな?
C++ って Managed C++ or C++/CLI なのか? ま、/clr:pure でもない限りまともに変換できないだろうけど。
805 :
801 :2006/05/28(日) 04:15:40
Managed C++なんですけど、文法が難しくて どうしたもんかと思いまして
>>805 どこの文法が難しいのかと
C#に比べてまともなライブラリが揃って無いからソースウゼェ 読メネェ の間違いじゃ?
C++ に詳しくない人なのやも知れぬ
808 :
801 :2006/05/28(日) 05:39:36
そうなんれす まったくわからないのれす 横着せずに勉強すればいいんでしょうが・・・ 私の脳味噌では厳しいです
C# が分かって C++ が分からんって謎だな。
C#から始めた俺はC++なんて知らないよ
オレはCから始めたがCOBOL,FORTRAN,アセンブラ,BASIC,JAVA,C#(ついでにPerlとPHP)が分かるぞ ナニから始めた云々なんて関係ないんだよ 言語なんてただの書き方のルールでしかないんだ アルゴリズムさえ分かってれば「言語が違います」なんてのは障害にすらなりゃしないんだよ あと1つ。 分からないなら分かってる人間が教えてあげることも可能だが、 知らないなんてのはただの勉強不足でしかない。甘えんな
C++は読めるけど自分で書けない
814 :
デフォルトの名無しさん :2006/05/28(日) 10:42:41
そこまで青筋立てて起こらなくても。 10以上の言語で読み書きできるが、もう全部C#とrubyでいいよと思ったりするよ。 一人じゃない場合、他の人が使えない問題は明らかに障害かと。 動かなくていいから多言語のソースサンプルとか ViewだけC#で提供してくれる。というものが欲しい。 そういうのって、今いいものないのかな。 昔、BabbelFiskenってツール使ってたけど(VB,Delphi対応してた) C++は知らない。
815 :
801 :2006/05/28(日) 15:06:44
>>811 単純にプログラミング歴長いおっさんってだけでしょ
それにCからはじめれば多言語理解するのも容易だけど
C#はAPIやOS、ハードウェアなど理解しなければならないものを使う機会が少ないからね
そういう基礎的な理解を必要とせずプログラミングできるのが.NETなんだから
ある意味VB6以上に多言語への応用力がないと思うよ
findfirst findnext findclose が GetFiles(); だけで済むんだもんなぁ・・・
>>815 ちょっと深いところ書こうとするとあっという間に P/Invoke の嵐になりがちなんだが
そうすると C++ はともかく、C の知識はそれなりに要求されるんだよな
>>815 ,817
結局
>806> C#に比べてまともなライブラリが揃って無いからソースウゼェ 読メネェ の間違いじゃ?
ってことだな。
プロパティグリッドにあるでしょ
パブリックなフィールド変数をプロパティに設定する意味がよくわからない getもsetも両方設定するならプロパティをわざわざ設定しなくてもいいんじゃないの? って思うんだけど、どちらか片方だけ設定するなら意味はあるんだけど
値チェックとかできるじゃないか 設定時にイベント起こしたり
>>820 すいません、ありました・・・。
でも、これって終了時にその状態を動的に保存したりは出来ないんですね。
コントロールを削除したりして、使わなくなったイベントやメソッドがゴミとして残るけど それら使用されていないメソッドを削除したいんですがいい方法ありますか?
825 :
822 :2006/05/28(日) 21:38:22
>>822 set{
if(value>0) Str=value;
}
みたいな感じですか?
Str が 数値型か。もにょるな。
>>824 Disposeにtrueが渡されたときに
イベントにnullを代入するようにする。
protected override void Dispose(bool disposing) { }
protected override void Dispose(bool disposing) { if (disposing) { this.Click = null; } } むしろthis.Events = nullってできたっけ?
IDEのフォームエディタで手動でコントロールを削除したときの話じゃないのか?
832 :
824 :2006/05/28(日) 22:12:10
>>830 それです
さくさくっといくつかのボタンなどを削除したのはいいんだけど
ボタンのイベントやメソッドがどこにあるのか探すのが大変なのでいい方法はないものかと
ちゃんとソース整理してなかったのがいけないんだけどね
決して参照されないメソッドも実行ファイルに反映されたりするのかな?
それともコメントみたいに実行ファイルの容量には反映されないのかな
不安です。
決して参照されないメソッドでもアセンブリには含まれるよ
>>830 えー、あの文章でよくわかったな。
”メソッドがゴミとして残る”ってどういうことだ?とは思ったが。
その発想はなかったわ、まじで。
836 :
824 :2006/05/28(日) 23:08:05
>>833 うはーそうなんだ
ほったらかしの未使用メソッドが大量にあるよー
困ったな。
アセンブリに含まれてしまうことよりも、 ソースがわけ分からなくなることのほうが困るだろ。
怪しそうなのを右クリ→参照の確認 で、定義しかなければ削除 ってのを繰り返すしかないんじゃないかな
ここだけはVBうらやましす。
プログラマって職だと出世は諦めたほうがいいのかな?
ワケワカラン
一生企業の末端として働くことを強制させられるのがプログラマですよね?
普通に考えナよ。 言われたままプログラム組んでるだけならその程度の金しかもらえない。 組めるプログラムが高度なものならさらにいい報酬がもらえるし、強い立場にも立てる。 新しいシステムでも作れれば一財産作れる。
高度なモノ作ってもソレを上司が理解できない。 たとえ理解されても仕様書と違うと作り直される。 新しいシステムを作ってもソレは会社の資産。
作る機会も根気もないです
そろそろマ板へ行け
スレ違いの話題、超ウザイ
プログラマが社長になったなんて聞いたことがないな やっぱ文系に行っとけばよかった
>>849 ( ⌒ ⌒ )
( )
(、 , ,)
|| |‘
ミミ ヽヽヽヽリリノノノ
ミ ,,、,、,、,、,、,、,、、 彡
l i''" i
| 」 \' '/ |
>>849 ,r-/ <・> < ・> | バカ!
l ノ( 、_, )ヽ | 俺を忘れてるぞ!
ー' ノ、__!!_,.、|
∧ ヽニニソ l _
/ ヽ / \
/ _ `ー--一' \
// ̄ ̄(_) |
|ししl_l ( | |
852 :
デフォルトの名無しさん :2006/05/31(水) 00:54:23
Visual C#.NET 2005 Express使用中です。 DataGridViewコントロールにDataGridViewImageColumn列を設定しています。 Accessのmdbをデータソースにして、OLE オブジェクト型の列にJPEGデータを 格納して、それをバインドさせてJPEG画像データを表示させてます。 JPEG画像データが正しい場合は特に問題ないのですが、列がNULLの場合は System.FormatException例外が発生した旨のダイアログが表示されてしまいます。 ダイアログを出さず、NULLの場合は何も表示しないのが1番の希望ですが、 ErrorImageのような表示でもいいので、何かいい方法はありませんか?
ん〜、試したけど普通に×マークのエラー画像が表示されるだけだな……。 // 直接画像ファイルのバイトデータ突っ込んだ手製の DataTable では、だけど。
微妙にスレ違いかもしれないけど教えてください。 COMのIUnknownって、.netのObjectみたいに基底インターフェイスって考えでいいんですか? 中身が定義済みのインターフェイスだって分かってるなら、 そのインターフェイスにキャストしてOK?
自己解決しまし……したのかな? [InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] と定義してればOKってことですか?
>>853 試していただきありがとうございます。
DataGridViewを作り直して、データソースの選択を含めてやり直したら出なくなりました。。。
作り直す前のと比べてみて、何か分かりましたら報告いたします。
今のところ違いは見つからず・・・。
原因がまだ不明ながら、これで結構時間をロスしてしまっていたので、助かりました!
idexや配列は1から初めてほしいな なんで0からなんだよ 10番目の要素がa[9]っておかしいだろ しっかりしてよM$
>>854 COM利用側からいうとIUnknownにキャスト(?)する必要あるか?
>>857 ちゅーか、いまごろそんなこと言ってる奴がなぜCOMを・・・
C#使いの漏れがたまに気分転換でVB.NETで プログラミングするときは、配列の宣言は1つ少なく指定して 後はC#と同じ要領で使っている(・∀・)
>>854 ホントにIHogeだっていう保証があるならいいんじゃない?
自分が実装したオブジェクトを相手にしてるときとか。
COMのIUnknownは基底インタフェイスであるのと供に、
オブジェクト実体への参照の役割も兼ねているあたり注意。
同じオブジェクト(IUnkown) に対して別のインタフェイスを要求すると、
別のIUnknown派生インタフェイスが帰ることもある。
アグリゲートされて別オブジェクト(で実装されたインタフェイス)だったりすることもある。
>>857 "idex"や"初めてほしいな"に釣られそうだ・・・
C#のパーサー作ろうとしてるんだけどむずかしす・・・ ANTLRを使うつもりだが、Genericsとかじぶんで対応しないと。 同じようなことしてる人いますか?
FileInfoの移動とかコピーって ファイルが存在しない場合もエラーでないんだね ファイルの存在チェックとかしないでやってると、存在しない場合 見た目ではわからないが内部ではエラーが出てて次の関係ないメソッドがちゃんと実行されなかったりする エラーぐらい出してよM$
>>864 C#のネイティブコンパイラ作ってくれ
たのんだぞ
\\yakisoba\shared などのパスが存在するかどうかは Directory.Exists() で調べられますが、 \\yakisoba のようなパスを調べるにはどうすればよいでしょうか?
お前の日本語が理解できない
870 :
868 :2006/06/01(木) 22:30:39
? \\yakisoba というパスが存在するかどうかということです。 Directory.Exists() では調べられなかったので。
872 :
868 :2006/06/01(木) 22:35:33
>>871 Σ
こんな近くに答えがあったとは気づきませんでした。
スレ汚しすみません。
873 :
デフォルトの名無しさん :2006/06/02(金) 16:34:36
ボタンのデザインって四角しかできないんですかね? 楕円の画像貼り付けても選択すると四角い枠が浮かんで格好が悪い あとflatにすると押したときの灰色がでるんだがこれ消せないかな?
エミュレータ上のファイルエリアにアクセスするにはどうしたら出来ますか? やりたいのは、エミュレーター上への(から)ファイルのコピーです。
そのエミュレータがどんなのかは知らんが、普通は共有フォルダを使うんじゃないかね
DataGridView だとできない。 MSDN の「Windows フォームの DataGridView コントロールと DataGrid コントロールの違いについて」参照。
ちなみに、DataSet を DataSource にした時には DataMember に表示するテーブル名を設定する。
>>876 .Net 標準のエミュです。共有が出来ないみたいなのよ・・・やり方悪いのかもしれんけど
うわ、はずい。上のはテーブル内のレコードの移動っぽいですね。 勘違いすみません。
>>880 .NET標準のエミュって何?
つか何のエミュレータ?
そもそもC#とどのようなご関係が?
まずは正しい製品名もしくはファイルのパスを書いてみ
>>884 そこに、やりかた書いてありますね、ありがとう。
サテライトアセンブリ のコンパイルをしていて、ちょっと分からないことがあるので質問させてくださいませ。 用意してある : hogehoge.en.resx VS で resx をコンパイル ( ビルド ) →dll サイズ 32K resgen + al でコンパイルするので→ dll サイズ 20K 生成される dll のサイズが違います。で、サイズが小さい方で exe を実行させると resgen + al コンパイルした方の VS で作成したほうは正常なのですが、サテライトアセンブリは読み込めません。 サテライトアセンブリのコンパイルの方法で、何か違うんでしょうか?
resgen と al につけたコンパイルオプションを書いてみろ。 あと読み込めないってのは具体的にどうなるんだ?
>>888 どもです。環境は VS2005 Std、.NETCF1.0 で作ってます。
C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SDKTools\resgen.exe /compile hogehoge.en.resx
al.exe /t:lib /embed:hogehoge.en.resources /out:hogehoge.en.resources.dll
読み込めないと言うのは、英語環境で表示しても英語リソース ( hogehoge.en.resources.dll ) を読み込まず、
日本語が表示されていて文字が化けてしまうことです。
・resgen リソースファイル [リソース名].[カルチャ名].resources で.resourcesファイルを作る ・リソース名は、検索対象の既定は対象型の完全限定名(例:HongliangSoft.Samples.Localization) ・al /out:[対象のアセンブリ名].resources.dll /c:[カルチャ名] /embed:[.resourcesファイル名] でリソースdllを作る。リソース以外(コードとか)を入れる事はできない メモに書いてあったこの辺
>>890 どもです。メモ通りやってみましたが結果は同じでした。
また調べてやってみます。
結果はご報告しますね。
サテライトアセンブリにカルチャ名付けちゃ駄目だぞ。 × Hoge.en.resources.dll ○ Hoge.resources.dll あとはリソースを読み込む部分がどうなってるかも問題だが……。
>>829 イベントに=演算子は使えないな。
やるんだったら-=でデリゲート削除。
894 :
デフォルトの名無しさん :2006/06/03(土) 02:19:41
ある型のnullオブジェクトを動的に生成する方法で (ある型の抽象メソッドは全てvirtualで仮実装する。 戻り値が必要なものはdefault(T)の値を返す。) 1.System.Reflection.Emitを使用する。 2.CodeDomを使用する。 という方法以外に簡単な方法はないでしょうか?
>>864 何のためにパースしたいのかわからんけど、
すでに.NET2がうごいている環境なら、
Microsoft.CSharp.CSharpCodeProvider.Parse(TextReader codeStream)
を使えば勝手にやってくれるのでは?
別の言語で一からコンパイラを作りたいとかだったら、
がんがってくれ。応援している。
896 :
895 :2006/06/03(土) 02:30:46
追記。 パーサじゃないけど、シリアライズフォーマッタを自作したことはあるよ。 速度重視なアプリでネットワークに流すのには、 BinaryFormatterはアセンブリ名のフルネームとかをひたすらstringで入れようとするので、 そのへんを短く出来るのを作ったことがあった。 ジェネリクス関連のリフレクションとか非常に面倒だったね。 VBで作れる、0以外から開始する配列とかはサポートしなかったな…
897 :
デフォルトの名無しさん :2006/06/03(土) 03:24:17
VBでは出来たのにForm1.Text = "タイトル";ができないのは何故?
this.Text = "タイトル";
>>894 ある型を動的に作成するのか、
ある型が既にあってそのインスタンスを動的に作成するのか、
どっち?
C#で省略可能な引数を指定することはできますか? VBのOptionalみたいなやつ。
902 :
デフォルトの名無しさん :2006/06/03(土) 09:42:40
>>892 どもです。ご指摘通りサテライトアセンブリにカルチャ名を付けてしまっていたので
つけないようにしました。
それでも駄目でしたね。
それとリソースを読み込む部分はこのようにしてあります。
リソース周りはデザイナで作ったのではないので、手動で作りました。
System.Globalization.CultureInfo culture;
System.Resources.ResourceManager resMan;
culture = System.Globalization.CultureInfo.CurrentCulture;
resMan = new System.Resources.ResourceManager("Hoge.satteliteassemblyname", this.GetType().Assembly);
this.Text = resMan.GetString("Dialog_Text", culture);
で、使用しているリソースは resx ( XML です。 )
読み込む部分が何か違いますか?
>>902 > "Hoge.satteliteassemblyname", this.GetType().Assembly
これだと、リソースファイルの名前は
Hoge.satteliteassemblyname.[カルチャ名].resources
でなければならないけどそれは大丈夫?
904 :
デフォルトの名無しさん :2006/06/03(土) 11:30:33
>>903 もうちょっと正確に書きます。
1. hogehoge.en.resx → VS2005 でビルド → hogehoge.resources.dll に変換される
2. hoge.resx → VS2005 でビルド → 本体 DLL に埋め込み。
3. resMan = new System.Resources.ResourceManager("Project1.hogehoge", this.GetType().Assembly);
これで読み込み実行。
4. 日本語環境時、正しく文字列が表示される。( 埋め込んだリソースを読んでいる )
5. 英語環境時、正しく文字列が表示される。( ./en/hogehoge.resources.dll を読んでいる )
ここまでは問題ありません。しかし、
hogehoge.en.resx を
>>889 に書いたように、resgen + al でコンパイルした hogehoge.resources.dll を
読み込ませようとすると、英語環境で正しく文字列が表示されません。
( 文字が化けてしまっているので、./en/hogehoge.resources.dll を読まず埋め込まれている日本語
リソースを読み込んでいるようです。)
で、分かっていることは、hogehoge.resources.dll のサイズです。
1. VS2005 で変換 → 28KB
2. resgen + al で変換 → 16KB
resgen+al で変換した場合と、VS2005 で変換した場合で何か異なるんですかね?
で、.resources の名前は Project1.hogehoge.en.resources にしてるの?
906 :
デフォルトの名無しさん :2006/06/03(土) 12:02:46
>>905 Project1.hogehoge.resources
Project1.hogehoge.en.resources
./en/Project1.hogehoge.resources
./en/Project1.hogehoge.en.resources
の4種類を試してみましたが、resgen+al 変換では読み込まれませんでした。
ん〜……。 ・Windows Application プロジェクトを作成(プロジェクト名 WindowsApplication1) ・Form1 の Localizable を true に、Language プロパティを日本語に ・Text プロパティを フォーム1 に ・一旦ビルド(デバッグビルド) ・プロジェクトのフォルダ(WindowsApplication1.csproj のあるフォルダ)を開く ・.NET 2.0 SDK のコマンドプロンプトを開いてカレントディレクトリをプロジェクトのフォルダに移動する ・コマンドプロンプトで以下のコマンドを実行 resgen Form1.ja.resx WindowsApplication1.Form1.ja.resources al /out:bin/Debug/ja/WindowsApplication1.resources.dll /c:ja /embed:WindowsApplication1.Form1.ja.resources ・bin/Debug の WindowsApplication1.exe を(日本語環境で)起動するとフォームのタイトルが フォーム1 になる ・bin/Debug/ja/WindowsApplication1.resources.dll を削除してから exe を起動するとタイトルは Form1 のまま ということなんだが……。
908 :
894 :2006/06/03(土) 13:46:46
>ある型を動的に作成するのか、 >ある型が既にあってそのインスタンスを動的に作成するのか、 >どっち? 型はすでにあって、 object GetNullObject(Type baseClassType, Type[] interfaceTypes); ってなってるのが理想かな
909 :
デフォルトの名無しさん :2006/06/03(土) 14:17:45
>>907 わざわざありがとうございます。同じようにして実行してみました。
違いはこちらはデバイスアプリケーション .NETCF1.0 というところです。
907さんのようにしてみると、907さんが掛かれたように再現しますが。
resgen+al をした DLL だけはやっぱりだめです。
違いは DLL のサイズ。
VSで生成した DLL のプロパティをみるとバージョン番号などが入っていますが、
resgen+al にはバージョン番号などは入っていませんでした。
もちろんファイルサイズも違っています。
910 :
デフォルトの名無しさん :2006/06/03(土) 14:20:09
ちなみに resgen は、 c:\Program files\Visual Studio 8\SmartDevices\SDK\SDKTools\regen.exe c:\Windows\Microsoft.NET\Framework\v1.1〜\al.exe c:\Windows\Microsoft.NET\Framework\v2.0〜\al.exe などを使いました。
バージョン情報とかは al のオプションで与えるもんだから。 > 907さんのようにしてみると、907さんが掛かれたように再現しますが。 > resgen+al をした DLL だけはやっぱりだめです。 結局、907 で書いたのは問題なかったの? これも resgen + al した DLL なんだが。
912 :
デフォルトの名無しさん :2006/06/03(土) 14:50:15
>>911 どうもです。
で、結局のところ 907 で書いた方法ですが、resgen+al すると駄目でした。
VSビルドの DLL なら OK でしたが。
どうしてこういうことになってしまうのか不明ですが、VS2005 のビルドと
resgen+al の変換の過程が違うようです。
( VS2003 の時は .NETCF 用に cfresgen というものがあったようです。)
バージョン情報の件、al のオプションで確認しました。
ん〜、後の問題を思いつかね。 /template オプションなんかどうだろ……。
>>895 Parse実装されてないとおもったんだけど。
915 :
デフォルトの名無しさん :2006/06/03(土) 20:43:30
>>913 あ、あ〜〜。できました〜〜!!!
913 さんネ申!俺のネ申!!
al に、/template:bin\Release\Hoge.dll
と指定したら出来ました!
サテライトアセンブリのサイズも VS が変換するのと同じサイズになりました。
ありがとうございました m(__)m
>>908 実装が空のvirtualメソッドだけのnullオブジェクトクラスを継承させる手はダメか?
(クラス継承)
nullobj<-abstract<-concrete
か
abstractA(or interface)
nullobj
abstractB
concreteA
concreteB
・・・
理想とはほど遠いかもしれんが・・・。
917 :
894 :2006/06/03(土) 23:57:46
それをどうやって実装するのが楽かなぁと思って質問した次第です。 指定したinterfaceのvirtualメンバを動的に実装する。 IL書くのが一番楽そうでした。(ソースコードアプローチだと明示的実装とか.NetのVersionとかで大変そう) ILに手を出すと誰も保守できなそうなのがいやなんですけど。
918 :
デフォルトの名無しさん :2006/06/04(日) 00:06:41
ある変数が変化したら発生するイベントってありますか?
920 :
・∀・)っ-○◎● ◆toBASh.... :2006/06/04(日) 00:13:22
何がやりたいのかは知らないが変数の書き換えをメソッドにしてそれをオーバーライドするとか、 OnTimerで変数値をチェックするとかやればいいと思うよ
921 :
デフォルトの名無しさん :2006/06/04(日) 00:21:07
おにいちゃんおーばーらいどってなあに?
>>918 INotifyPropertyChanged.PropertyChanged
923 :
デフォルトの名無しさん :2006/06/04(日) 00:28:52
>>921 同じ名前だけど引数の違う関数のことだよぉ
ちげぇ
どうでもいいけどComponentModelでググルと変なのが4番目に出てくるの何とかならないんだろうか。 死んだっちゅうのはいいすぎだろ。
Componentってなんのためにあるの?
>>925 俺が検索したら4番目はMSDNだけど
1 www.urbanpotato.net/Default.aspx/document/1757
2 weblogs.asp.net/ahoffman/archive/2004/11/25/270189.aspx
3 www.dotnet247.com/247reference/ System/ComponentModel/System.ComponentModel.aspx
4 msdn2.microsoft.com/en-us/system.componentmodel.aspx
菊池ならしょうがない
65 :デフォルトの名無しさん :sage :2006/05/24(水) 00:29:22 poderosaってマクロ機能で、アプリケーションからJScript.NETを動かしてて しかもpoderosa自身のオブジェクトを公開してるけど、どうやってるの? ソース見てもわからんかった。 poderosa見てみる
InternetExplorerをオートメーションで動かしたいんですけど、どこか解説してるとこ ありませんかね? VBAとかだとあるようですが、自分読めませんし、できれば.NETでうごかしたいんで そこらへんでお勧め教えてください。 本でもいいです。英語でもがんばってみます。
ClickOnceで起動されたProcessを直接的に取得する方法って無いよね…
>>929 コンパイルしたらアセンブリ読み込んでロード
けど、組み込み目的で CodeDom 使うのって、SandBox 無いと危険なような希ガス
934 :
デフォルトの名無しさん :2006/06/04(日) 15:45:55
pictureboxの上にマウスを乗せたら、pictureboxの画像が変わるようにしたいんですが、 デザイナで設定する方法しかしらないので、ちょっと戸惑っています。 動的(?)に画像を参照するようにしないといけないっぽいんですが、 exeがあるディレクトリにimageディレクトリのようなものを作ってそこから読み込むようにしないといけないんでしょうか?
知らんがな どこから画像ファイルを読み込むかなんて自分で考えろと
936 :
デフォルトの名無しさん :2006/06/04(日) 15:54:59
経験が少ないので、よくあるやり方みたいなのを教えていただけたら嬉しいです。 imagelistっていうのがありますが、それに使いたい画像を全部設定すると、最初から画像を読み込んでくれるのかな??
プロジェクトにリソース追加してその中に好きな画像つっこめ imagelistでもいいけど、今度はどこからimagelistに画像をもってくるんだよって話
938 :
デフォルトの名無しさん :2006/06/04(日) 16:05:08
>>937 ありがとうございます!うまくできそうです。
VC#2005Expressのヘルプで System.Drawing名前空間を引いてみると 「 System.Drawing名前空間内のクラスをWindowsサービス またはASP.NETサービスで使用することはサポートされて いません。使用した場合、サービスのパフォーマンス低下 や実行時の例外発生など、予期しない問題が発生する場合 があります。 」 とありました WindowsサービスってWindowsに起動時から常駐するような デーモンのようなタイプのものを言っているの? それとも通常のWindowsApplicationのことなの?
単に、System.Drawing名前空間内のクラスのオブジェクトを シリアライズしてネット上を移動させることは推奨されないってことでそ?(・∀・)
winアプリでDrawing使えなかったら泣くねwwwwwwwwwwwwwwwwwwwww
943 :
939 :2006/06/05(月) 16:01:22
.NETではバリバリGDI+使ってると聞いたが 具体的にはどういう場面で使っているの?
描画
946 :
デフォルトの名無しさん :2006/06/06(火) 18:41:11
MenuクラスのHandleプロパティでメニューハンドルが取得できますが、 Strip関係、例えばContexMenuStripからHMENUを取得する方法ってないんでしょうか。
あれは HMENU 使ってない。
//リストの重複削除 public static ArrayList OverlapToSingle(ArrayList list) { list.Sort(); ArrayList newList = new ArrayList(); object tmpObj = null; foreach(object obj in list) { if(obj.Equals(tmpObj)==false) { newList.Add(obj); tmpObj = obj; } } return newList; } これをジェネリック対応にするにはどうしたらいいの? 書き方がわからねぇ・・・orz
無理してジェネリックにしなくても、ArrayListをIListにすればOK
950 :
949 :2006/06/06(火) 21:45:01
と思ったが、SortはIListにはなかった
List<T> にすれば OK なんだな
public static List<T> OverlapToSingle<T>( List<T> list ) { List<T> newList = new List<T>; foreach( T t in list) { if( !newList.Contains( t ) ) newList.Add( t ); } return newList; }
>>952 O(N^2) だお
クローンしてからソートしてリストぶち込んだ方がいくね
出力結果がソート済みなのが難点になりうるな
955 :
948 :2006/06/06(火) 22:38:31
public static List<T> OverlapToSingle<T>( List<T> list ) { List<T> tmpList = new List<T>(list); tmpList.Sort(); List<T> newList = new List<T>(); T tmpT = default(T); foreach (T t in tmpList) { if (t.Equals(tmpT) == false) { newList.Add(t); tmpT = t; } } return newList; } sortを組み込むとこんな感じになるのか。 ソート済みになってしまうことはとりあえず問題にならないので大丈夫ですね。 ジェネリックを使う気力が沸いてきた。THX!
>>955 入力の list が List<int> で中身が 0,1,2 だとしたら
出力は 1,2 になる予感
T が参照型なら参照型で、null が入っていたときに例外の予感
958 :
948 :2006/06/07(水) 12:55:41
確かにそうだな'`,、('∀`) '`,、
959 :
デフォルトの名無しさん :2006/06/08(木) 16:47:43
C#とJavaなどの他言語との連携方法がわかりません。 Javaで出力したテキストファイルをC#でよみこませたいのですが・・・・ よろしくおねがいします。
いや、テキストファイルなら何で出力しようがテキストファイルだろ。 せいぜいエンコーディングに気を配る程度だ。
961 :
デフォルトの名無しさん :2006/06/08(木) 16:55:34
>>960 私書き方が悪かったかもしれません。
一度にそれらの処理をやりたいのですが、バッチ処理しか無いのでしょうか?
JavaとC#のプログラムが常に起動していて、処理に必要な機能をそれぞれの言語で
分担して行うという複雑なものなんですが。
バッチ処理で対応しきれるのかどうか不安です。
>>961 .net java間だとまともに使えるのはソケットくらいかな。Web Serviceでもいいが互換性がどうだろう。
あとはJ#(笑)を使う。
どっちかでファイル監視するか
メッセージでやれるんじゃない?
Java Language Conversion AssistantでJavaをC#に変換する
DDEは?
>>961 とりあえず、バッチ処理であるか否かと通信方法は分けて考えたほうがよろしいんではないかと
>>961 ファイル経由でのテキストの受け渡しなんて簡単なこともわからないのに、
そんなに「複雑なもの」がよく設計できたなぁ・・・・
データの受け渡しのとこも設計したんだろうから、ちゃんとそれに従えば?
ちゃんと設計出来てたら こんな質問しないだろ。
メモリマップドファイルとかはどうだろう Java で使えるかは知らないが
JNIってなくなったの?APIつかえりゃいけるでしょ
972 :
デフォルトの名無しさん :2006/06/09(金) 00:53:14
スプリットコンテナーのパネルの上にグループボックスはっつけて そのうえテキストボックスなどのコントロールがある というリサイズ可能なフォームでの質問です したいことは ユーザがフォームを小さくしたとき、グループボックス上のコントロールが 隠れてしまう大きさにされたらパネルにスクロールバーを表示する ということなんですが、グループボックスのDockプロパティをfillにすると パネルのAutoScrollがTrueでもスクロールバーが出てこないのですが コントロールの配置方法等が間違っているのでしょうか? お願いします
973 :
デフォルトの名無しさん :2006/06/09(金) 10:49:13
HashTableの初期化を、現在 HashTable hash = new HashTable(); hash.Add("Key1", 1); hash.Add("Key1", 1); ・ ・ のように書いていますが、 Perlのように HashTable hash = { "Key1" -> 1, "Key2" -> 2, }; のように、スマートに書けないでしょうか?
hash["Key1"]=1 とかってかけないんだっけ?
コレクションの構築初期化子は C#3.0 からだねー
っていうか、static で作成したいんです。
少なくとも今はstaticなコンストラクタでやるしかないかな。
すんません。 今クラスのシェイプアップをしてるんですけれども、 インスタンスにしたときの占有メモリサイズを計る方法って ありますか?
そのクラスのインスタンス何万個作るつもりだ…… パフォーマンスカウンタ使えば?
それは意外に難しい。
stringの文字列中の特定の文字列を置き換える動作は string.Replace と Regex.Replace だったらstring.Replaceの方が速くておすすめですか? それともstring.Replaceは内部でRegexしてたりしますか?
どういう発想でそう思うんだよ。
わたしはおすすめです。
>>973 どうしてもというのならば。
private class HashtablePrivate : Hashtable {
public HashtablePrivate(object[][] values) {
foreach(object[] value in values)this.Add(value[0], value[1]);
}
}
private static Hashtable values = new HashtablePrivate(new object[][] {
new object[]{ "1", "value1" },
...
});
あまりお勧めはしない。
BeginInvoke/EndInvokeメソッドを持つ最も抽象的なクラスか インターフェースは何? Delegate型がもっていないからわけわかんね。 object AsyncResult.AsyncDelegateからEndInvokeを呼びたいんだけど 固有の型でキャストしたくない。リフレクション使うのがベスト?
ISynchronizedInvoke?
デリゲートをそいつでキャストすることはできないっぽいです。 >ISynchronizedInvoke
コンパイラが自動的につくるんじゃなかったっけ? BeginInvoke/EndInvoke
これうんこな仕様だよね。 ちがうデリゲート型、ジェネリックの中で実行したいのにこのせいでやりにくいし。 もうあぼかど。
デリゲートの実行は DynamicInvoke 使えばいいんだからどうでも良いが、型制約に使えないのが痛すぎる。
共通のシグネチャには出来ないんだから まあ仕方ないんじゃないの? DynamicInvokeの非同期版があるに越したことはないが。 むしろ普通にリフレクションで実行するときの 糞仕様をなんとかしてほしい。
> むしろ普通にリフレクションで実行するときの > 糞仕様をなんとかしてほしい。 どんな仕様をお望みだね
何も贅沢は言わんよ。 勝手に例外をラップしたりとか、 要らんことをしなければそれでいい。
ああ、例外ラップはうざいねー デバッグやりづれぇ んで結局、EndInvokeするにはリフレクションしかないってことで いいでしょか?
996 :
デフォルトの名無しさん :2006/06/10(土) 17:36:03
byteの配列をstringに変換する方法を教えてください
Encoding.GetString だったか
998 :
996 :2006/06/10(土) 17:51:32
ありがとうございます。さっそく探します。
フレームワークがあること以外での C++とC#の違いって何ですか?
時間切れですにゃ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。