1 :
デフォルトの名無しさん :
2006/04/15(土) 13:32:57
1000 名前:デフォルトの名無しさん[sage] 投稿日:2006/04/15(土) 13:43:06
次スレ以降、
>>713 は書き込み禁止
>>1 乙
>>5 ワロタ
DAT落ち、アンカー対策で一応
713 デフォルトの名無しさん sage 2006/04/09(日) 16:44:07
なぜフォーム上のコントロールのイベントがすべてフォームクラスに記述されるんでしょうか?
それぞれのイベントはそれぞれのコントロールで処理したほうがいいように思うんですが
コントロールが増えてくるとそれをすべてフォームクラスで中継して
データを参照したり受け渡ししたり変換したり、表示するように命令したりなどしなければならないのがすごく煩わしいです
frm1から frm2.Show(); で表示したfrm2からfrm1へイベントや変数などを送るにはどうすればいいでしょうか? frm2は閉じないでずっと開いた状態です。
frm1のポインタをfrm2にわたす。 以上。
frm2 にイベントを用意する。
11 :
8 :2006/04/15(土) 20:30:37
>>9 そんあことしてだいじょうぶなのかな?
なんか怖い><
リモートデスクトップやターミナルサービスで接続された元のPCのホスト名やIPアドレスを 取得するにはどうしたらいいのでしょうか? 接続されるサーバをAとして、ユーザはマシンBやマシンC・・・などから ターミナルサービス、リモートデスクトップ経由でサーバAに接続し、 サーバAにインストールされたアプリケーションを使用します。 そのアプリケーションで、接続元のホスト名やIPアドレスを表示したいのです。
13 :
8 :2006/04/15(土) 20:51:22
14 :
12 :2006/04/15(土) 20:54:17
>>13 情報ありがとうございます。
WMIというものが何なのか勉強不足でわかりません。
ちょっとネットで調べたところ、API?なのでしょうか?
出来れば、どの関数を使えばいいのか教えて頂けませんか?
※WMI リモート 接続元 ホスト名 などのキーワードを組み合わせてググってみたのですが
見当たりませんでした。
前スレでButtonをControls.AddしてControls.Removeしたとき Disposeされてない気がするとか言っていたものです。 結局、ButtonはDisposeされることが確認できたのですが、 WebBrowserコントロールはされないようです。 ヘルプにはリソースへの負荷の大きいから使用を終えたら、 必ずDisposeメソッドを呼び出してくださいと書いてあります。 でも実際は、WebBrowserコントロールのDisposeメソッドが、 コントロールを生成したスレッドと同じスレッドでしか 呼び出すことができないことが原因のようですね。 ファイナライザはコントロール生成したスレッドと同じスレッドでは呼ばれないので・・・
>>11 ポインタというか参照ですよ。Form2.OwnerFormがfrm1のはずだから、
Form1ありきならForm1にキャストすればfrm1のメンバー見放題。
Form1以外からも使うForm2ならば、逆にForm1でprivate Form2 frm2を
作って、frm2がイベントを起こせば、frm1からfrm2のメンバー見放題。
>>16 全体に意味不明なのだが。
> WebBrowserコントロールはされないようです。
どうやって確認したんだ?
19 :
8 :2006/04/16(日) 01:54:08
>>17 そんあことしてあっちこっちのformで巨大なメモリ確保されたり
コード重複いっぱいしたりしないの?
頭いいのねどっとねっとって
前スレ
>>983 >WM_NOTIFY は親フォームに送られるって点は OK ?
フォームで送信を見張ってたが一向に送られてくる気配がない。
試しにテスト用のプロジェクトを作って実験したら成功。そこでやっとわかった。
リストビューがパネルに乗ってたのが原因だったんだ。
直接の親コントロールで受けてやらなきゃだめだったのね。
>>962 は
>>983 のアドレスの中の人なのかな。
おー、自分のことだ、とか思って変な感じ。でもすごく参考になった。感謝。
>>8 できれば
>>10 のやり方のほうがいい
form1以外からでも使えるようになる
22 :
8 :2006/04/16(日) 10:55:05
>>21 デリゲートっていうのを使うのかにゃ?
調べてみたらと〜ってもむずかしそうにゃん><
24 :
デフォルトの名無しさん :2006/04/16(日) 11:11:40
イベントとデリゲートは密接な関係にある。 イベント発生元からイベントハンドラに対して情報を伝えたい場合、 またはイベントハンドラからイベント発生元に対して情報を伝えたい場合などは、 独自のイベントハンドラをデリゲートとして定義してやらなければならないな。 具体的には、 ・情報のやりとりを行うために、独自のEventArgsをクラスとして定義する ・object型の引数senderと、独自のEventArgs型の引数eの2つを引数とするEventHandlerデリゲートを定義する。 ・独自のEventHandler型のイベントを定義する ・適切なタイミングでイベントを発生させる。 簡単に言うとこんな感じだが、ちゃんと勉強することを勧める。
考え方は難しくないけど、構文がややこしいよね
26 :
8 :2006/04/16(日) 11:19:21
>>24 デリゲート。もりもーふぃずむ><
むずかしいけどがんばってみるにゃん!
ありがとにゃん
モリモーフィズムじゃなくてポリモーフィズムだw つーかポリモーフィズムは全く関係ない話だぞ。 最初は難しく思えるが、理解すればそんなに難しい話ではないとわかる。 頑張れ
28 :
16 :2006/04/16(日) 12:01:46
>>18 private class MyBrowser : WebBrowser {
protected override void Dispose(bool disposing) {
// Disposeされればここにくるはず
Debug.WriteLine("disposed." + disposing);
base.Dispose(disposing);
}
}
MyBrowser myBrowser = null;
// 適当なボタンのクリックイベント
private void button_Click(object sender, EventArgs e) {
if (myBrowser == null) {
myBrowser = new MyBrowser();
Controls.Add(myBrowser);
} else {
Controls.Remove(myBrowser);
myBrowser = null;
GC.Collect(); //<- ここでGCしてもMyBrowserのDispose()が呼ばれない
}
}
WebBrowserではなくButtonコントロールだとDisposeは呼ばれます。
アプリの終了まで内部的な参照が保持されるってだけだよ。 これは COM との関係があるのでいかんともしがたい。 ファイナライザが呼び出されない訳じゃないし。 そして Dispose() を呼べと言うのはコンポーネントの利用者に対して言ってるんであって システムに向けて言ってるんじゃない。
30 :
デフォルトの名無しさん :2006/04/16(日) 13:30:36
Javaをちょっとやっただけなのに、C# Asp で開発したシステムを本番機に乗せろと言う命令を受けました。 正直開発にも関わっていませんし、何をどうしたら良いのかさっぱりわかりません。 本番機には.NETは入っていません。 リビルドしたプロジェクト全部(.cs、.aspx)を本番機にコピーして動かしてみたんですが、 マシンを再起動しても、IISの再起動をしても、ASPサービスの再起動をしても、Global.aspxが動きません。 プロジェクトの配置の仕方が間違っているのでしょうか? (結合テストマシン(.NETインストール済)と全く同じ構成) 教えてください。
.NET がないと ASP.NET は動かない。 そもそも C# では ASP を開発できない。ASP.NET のみ。
>本番機には.NETは入っていません。 .NET Frameworkが入っていないのか?それじゃ動かんわ。
>>30 Javaで作ったアプリやらサーブレットを動かすにはWebサーバとかJDK(JRE)が必要だったはず。
.NETで作ったアプリを動かすにも.NETFrameworkが必要。(WebサーバはIISが入ってるだろ?)
まずは、本番機に.NETFrameworkをインストールしないと何も始まらない。
(フレームワークのバージョンは確認しておけよ)
.NETって何?っていうNEがいるぐらいだもんなぁ・・・
すいません。 「.NETが入っていない」のはMicrosoft Visual Studio .NETのことで、.NET Frameworkは入っています。 静的HTML → Global.aspx → ログインページ → 業務ページ に遷移したいのです。ログインページはきちんと動いていて、DBの接続等も正常です。 ただ、Global.aspxが動いていないと、次の画面遷移情報を取得できていないのでこけてしまいます。 ググって見ましたが、情報が多すぎるのとどれがWebの情報なのか見分けもつかなくて泣きそうです。
まずは適当に ASP.NET の本一冊買って、そこに書いてるとおりにやってみるんだ
この流れ、ネタとしか思えないんだけど...。
あー、.NETとIISの入れた順番が悪いのかもしれん。 どっちかを先に入れなければいけなかった気がする。
何にも知らないんで、そう思うかも知らないですけど。ネタじゃないです。 問題は、Global.asaxは、いつ動くかどうやったら動くか。 .csは本番機に必要なのかどうか、dllだけでいけるのかどうか。 の2点だなぁと思いました。 明日動かなさいといけないんです。
>38 入れた順番はわからないんです。 どちらが先がよかったんでしょうか?
IIS->.NET .NET を先に入れちゃったんなら、reg_iis.exe か何かを使う必要あり。
ありがとうございます。やってみます。
>>39 Global.asaxは定義しているイベントによって呼ばれるタイミングは違う。
動かすだけなら*.csは不要。dllとaspxは必要だけど。
まぁスレ違いだが。
ところで、デリゲートってイベントハンドラとかマルチスレッドとか以外 使ったことないんだけど、みんなそんなもん?
>>45 自力でsortプログラム作るときとか・・・?(´・ω・)
正規表現置換の MatchEvaluator とか。 2.0 になってソートとかに匿名メソッド使ったり。
FindAll とか RemoveAll は便利だお FindAndRemoveAll ってのがあればもっと便利だお
そーいや匿名メソッドのHelloWorldを作ったことがあるな。 Personクラスを作って、その中に public void Greeting(OutputDelegate output_method) { output_method(this.message); } って感じのメソッドを用意した。 OutputDelegateは public delegate OutpuDelegate(string message); んで、エントリーポイントは static void Main() { Person person = new Person(); person.Greeting(delegate(string message){Console.Writeline(message);}); }
HttpRequest#GetResponse だけで10秒強かかるんですけど、なんでこんなに遅いんですか?
当方、.NET Framework 2.0 WinXP SP2 火壁は OFF の状態です。
HttpWebRequest request = (HttpWebRequest) WebRequest.Create("
http://pc8.2ch.net/tech/dat/1145075577.dat ");
request.Method = "HEAD";
request.Timeout = TIMEOUT;
request.UserAgent = UserAgent;
using (HttpWebResponse response = (HttpWebResponse) request.GetResponse()) { // ここ
// ほげほげ
}
>>45 呼び出しをコマンドとして遅延させて呼び出したりとかに使ってる。
>>50 環境依存の何かだろう。
私んとこじゃ問題ないし。
真っ当なレスポンスは返ってきてるの?
53 :
50 :2006/04/16(日) 22:51:24
まっとうなレスポンスは帰ってきます。タイムアウトで弾かれなければ。 というか…… .NET Framework 1.1 でためしたら、一瞬で帰ってくるようになりました orz おそらく 2.0 のどっかが悪いと推測……なんなんだろこれ (;´Д`)
1.1 と 2.0 で送っているパケットの中身を比べて報告頼むぜ
55 :
50 :2006/04/16(日) 23:00:45
パケットじゃないとおもう。どこのサイトに接続しても似たようなもんだから。 たぶんクライアント側がおかしいんだとおもうけど……詳細不明。しらべんのめんどくさくてごめん(;´Д`)
考えられるのはデフォルトプロクシとか?
俺もその現象に悩まされてる。 HttpWebRequest使ってるソフトを1.1->2.0にしたら 固まるようになった。
C#を覚えるのに最適な本は何でしょうか? 1冊だけ教えてください。
趣味で作っている2.0のプログラムだけれども何の問題もないなあ HttpWebRequest req = WebRequest.Create("ひみつ") as HttpWebRequest; CookieContainer cc = new CookieContainer(); cc.Add(new Cookie("ひみつ1-1", "ひみつ1-2", "/", "ひみつ1-3")); cc.Add(new Cookie("ひみつ2-1", "ひみつ2-2", "/", "ひみつ2-3")); req.CookieContainer = cc; WebResponse res = req.GetResponse(); using(TextReader reader = new StreamReader(res.GetResponseStream(), Encoding.GetEncoding("Shift_JIS"))) { //whileでループさせてReadLineで一行ずつ読む }
>>58 300の技
初めてプログラミングだったらこれ
オブジェクト指向など知らなくても、とりあえずこれを使いまわせば
それなりものが作れてよかった。
中級者なら、本に頼らなくても、いろんなサイトにオブジェクト指向や
デザインパターンの情報があるのでそれで食っていけたりする
中級者にお勧めはAdvanced Windowsなどかな
.NET1.1なのか2.0のなのか、書籍のタイトル見ただけじゃ分からないのが多くて怖い
Advanced WindowsってC#関連あるの?
>>58 プログラミングまったくの初めてか、多少は経験ありかで、選択肢全然違ってくるし。
経験ありなら、こんなとこで聞いてるより、本屋で立ち読みして、自分のレベルと
好みに合ったやつを探したほうがいい。近所にまっとうな本屋がないような地域に
住んでるなら別だけど。
64 :
58 :2006/04/17(月) 11:00:38
PG経験者(VB1年)
ブランク4年
近くの本屋あまりC#の本なくて
不安に思ったので聞いてみたす
次の職場で使うかも
>>60 300の技lか、明日本屋行ってみてみるよ
シリーズ物、独習C#ってあるんだね、今調べた
これも候補かな
65 :
60 :2006/04/17(月) 11:12:39
>>64 独習C#おれも始めた頃に買ったけど結局全然使わなかったなぁ
ネットのいろんなサイトのほうがわかりやすかった
@ITって知ってるよね?
最初はそことヘルプの入門編見るだけで十分だと思うけど
がんばってくだはい
66 :
デフォルトの名無しさん :2006/04/17(月) 12:04:17
>>64 VB使えるなら、ネットでC#の概念的な事を掴んだら、
「Visual C#.NET逆引き大全 500の極意」がお勧め。
C#は10冊以上買ったけどこれが一番実用的で多用している。
検索するより早い。これでわからないときは諦めてググってる。
ちなみに別途解説書を買って一度熟読した方がいい。
ただし解説書は好き好きだと思う。
最近C#を始めたのですが、教えてください。 空のフォーム(Form2)を追加すると、自動的にForm2のインスタンスを格納する変数も、どっかに宣言されるのですか? 調べてみた範囲では、そういう宣言はみつかりませんでした。 それと、Form1はスタートアップ時に自動にインスタンスが生成されてフォームが表示されるわけですが、そのForm1の 変数はどこに記述されているのでしょうか。Program.csのApplication.Run(new Form1());をForm2にすると、変数 宣言してないのに、ちゃんとForm2がスタートアップ時に表示されたりして、わけわかめです。 どうも、そのあたりの変数も持ち方が謎なので、教えてください。
>>67 書かれてるようにProgram.csのApplication.Run(new Form1());がForm1のインスタンスを生成して保持している(Applicationのなか)ところです。
Form2は追加しても暮らすが宣言されるだけでインスタンスはまた別のところに書く必要あり。
>>68 おお、ありがとうございます
ApplocationRunの中で何やってるんだと定義ファイルを表示させようと、いろいろみたけど、結局できなかった( ´Д`)
Expressだからかもしれないけど、usingするライブラリのソースとかが存在するわけじゃないのでつね。
なんか明示的にインスタンス破棄しなくてもいいみたいだし、破棄せずに非表示のままフォームを持ち続けたり
するのに違和感が( ´Д`)
すべてスタートアップ時の親フォームから枝葉的にインスタンスが生成されるはずだから、フォームやインスタンスを
グローバルな変数なんかで持つ必要ないし、そんなインスタンスをいれる変数の宣言なんかもいらんってことなのかなぁぁ。
もうちょい勉強してみます。ありがとうございました。
Application.Run(new Form1())って書くけど ApplocationのRunって Run(Form f){ f.show(); f.dispose(); } って風にForm.Disposeよんでんのかな? それとも「どうせプロセス終了するしどうでもいいや」ってことかな。
>>70 > それとも「どうせプロセス終了するしどうでもいいや」ってことかな。
まさにこのとおり。
>>65 >>66 トン
@ITはたまに利用してる
最近だとERPやSAPを調べた(時代遅れだ・・・)
おおまかに掴んだら逆引き大全買ってみまつ^ ^
>>70 つーより考え方が逆だ。
そのRunは「渡されたFormが破棄されたらメッセージループを終了する」
ような実装。
>>70 ShowDialog()の場合は呼び出し側でDisposeが必要だが、
Show()した場合はフォーム自身がDisposeするので不要。
Form.Closeの説明を見ればわかるけどモーダルとモーダレスで動作が違う。
showしたら別スレッドになるからdisposeもそのスレッドでやれってことか。
ならないよ
Application Architecture for .NETの話題ってここでよろしい?
79 :
8 :2006/04/18(火) 00:47:14
デリゲート調べたけどどうもやりたかったことと違うみたいデス
値を別クラスから受け取りたいとかじゃなくて
form1のメソッドを実行させたかっただけなんで
>>17 さんのやり方でいけましたー。
時間かかったけど、デリゲートも勉強できておりこーになれたお^^
ありがとーです。
デリゲートでもできるし
できるなぁ
82 :
8 :2006/04/18(火) 01:13:08
ええーそうなの? delegate void Show(); class Form1:Form { public void ShowHallow() { mbox("Hallow"); }; }; class Form2:Form { public static void Main() { Form1 frm1 = new Form1(); Show show = frm1.ShowHallow; // インスタンスメソッドを代入。 show(); } こんな感じだと、新しくフォームのインスタンス作るからほんとの実体のform1には反映されないんじゃないの? というか、デリゲートの記述ってすごくややこしい。 デリゲート使わないでこうしたほうがわかりやすいお^^; Form1 frm1 = new Form1(); frm1.ShowHallow();
デリゲートっつーかイベント。 public delegate void TextUpdatedEventHandler(object sender, TextUpdatedEventArgs e); public class TextUpdatedEventArgs : EventArgs { public TextUpdatedEventArgs(string text) { this.text = text; } private string text; public string Text { get { return this.text; } } } public class Form1 : Form { // 略 Form2 form2; private void showButton_Click(object sender, EventArgs e) { if (form2 == null || form2.IsDisposed) { form2 = new Form2(); form2.TextUpdated += new TextUpdatedEventHandler(this.UpdateText); } form2.Show(); } private void UpdateText(object sender, TextUpdatedEventArgs e) { this.textBox1.Text = e.Text; } } public class Form2 : Form { // 略 public event TextUpdatedEventHandler TextUpdated; private void updateButton_Click(object sender, EventArgs e) { if (this.TextUpdated != null) this.TextUpdated(this, new TextUpdatedEventArgs(this.textBox1.Text)); } } これで Form2 が Form1 を知っている必要が無くなる、
84 :
8 :2006/04/18(火) 01:46:44
>>83 な、な、な、なるほど!(あんまわかってない^^;)
自作のイベントハンドラをデリゲートととして宣言して
Form2のイベントに追加してるわけですね!!(シッタカ)
こんなコードスイスイって書けるってすごいお^^;
>>82 を書くのに30分ぐらい掛かった><
やりたかったのはそういうことだったんですぅ。
別フォームのイベントとリンクしたかったんです。
参考にさせて頂きます!ありがとう!
85 :
デフォルトの名無しさん :2006/04/18(火) 08:25:32
DefineDynamicModule で第一引数に AssemblyModule と同じ名前を、 第二引数に同じ名前.dll を。 Save で DefineDynamicModule の第二引数と同じ文字列を。
なるほど。早速試してみます。 ありがとうございました。
改めて自分の投稿を見て AssemblyModule って何なんだと一人つっこみ。
89 :
85 :2006/04/18(火) 21:30:03
>>88 私も何だろうと思い MSDN を見てみたのですが、載っていなかったので
ソース中の識別子か仮引数の名前だと思っていました…。
実際には、
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("TempModule", "Temp.dll");
assemblyBuilder.Save("Temp.dll");
これでうまくいきました。
現在メインフォームにユーザコントロールがあります。 ユーザコントロールにあるListView1に大量のListViewItem追加の処理を BeginInvoke()のようにスレッドでやってますが処理中にメインフォームが固まり操作できなくなります。 処理中にメインフォームを操作したいです。誰かヒントをください。 以下ユーザコントロールのソースです。 メインフォームのボタンでDoDelegate()を呼びます。 public void DoDelegate() { Thread t = new Thread( new ThreadStart(DoDelegater)); t.IsBackground = true; t.Start(); } private void DoDelegater() { CountDelegater del = new CountDelegater(DoCountUp); this.Parent.BeginInvoke(del, null); } private void DoCountUp() { for(int i=0; i<20; i++) { Thread.Sleep(200); ListViewItem item = new ListViewItem(i.ToString()); this.listView1.Items.Add(item); } }
>>90 Application.DoEvent
ListView.BeginUpdate 〜 EndUpdate
このあたり
ちがったな。 Control.BeginInvoke は別スレッドを作らない。 非同期実行はデリゲートの BeginInvoke をつかえ〜
ん〜。ごめん。ボロボロだわ俺。・゚・(ノД`)・゚・。
とりあえず
>>91
っていうか、非常に微妙なことやってるコードなんだな……。Thread の意味がない希ガス
>>90 いくつか纏めて AddRange していくように汁
つか AddRange or BeginUpdate してやればコストなんて大したもんじゃないんだが
ListViewItem の Add する為だけに別スレッドから Invoke やるのはほぼ意味無いぜ
>>91-95 ありがとうございます。無事解決です。
少しもっさり感がありますが、Application.DoEvents()をループ処理の中にいれたら動きました。
あってますよね?
動作ですが実際にはListViewItem作成時に他にクラス作ったりと重い処理が入ります。
最初はデリゲートのBeginInvokeを使っていたんですが、コントロールいじる場合は
コントロールのスレッドを使えと何処かに書いてあったので・・・
MSDN駆け巡っても解決できなかったんで情けないですorz
あと気になったのですがApplication.DoEvents()は一般的なやり方なのでしょうか?
>>96 > Application.DoEvents()
やっつけコードではご用達。
Sleepは必要ないし、デリゲートも必要ない。 this.listView1.BeginUpdate(); for (...) { ListViewItem item = ...; this.listView1.Items.Add(item); Application.DoEvents(); } this.listViwe1.EndUpdate(); こんな感じ? Application.DoEvents()はその前後で状態が変わることがあるから注意
>>96 Thread.Sleep(200);
を
for(int j = 0; j < 200; j++) {
Thread.Sleep(1);
Application.DoEvent();
}
にすれば暫定解決
違うなぁ……。
やるならこう。
private void button1_Click(object sender, EventArgs e) {
new Thread(new ThreadStart(AddItems)).Start();
}
private void AddItems() {
AddItemCallback callback = new AddItemCallback(AddItem);
for (int i = 0; i < 20; i++) {
Thread.Sleep(200);
ListViewItem item = new ListViewItem(i.ToString());
this.Invoke(callback, new object[]{item});
}
}
private delegate void AddItemCallback(ListViewItem item);
private void AddItem(ListViewItem item) {
this.listView1.Items.Add(item);
}
>>90 のコードじゃ、for 内の丸ごと Invoke させてるわけで、つまりそれ全部メインスレッドで動いちゃってる。
正しくは Invoke させるのは Items.Add だけ。
最近デリゲートって流行ってのか?
串だっけ?
96です。
>>97-101 レスありがとうございます。
>>100 さんの方法で実行してみましたが軽快な動作です。
必要なところだけスレッドにすれば良いということですね。勉強になりました。
new Thread(new ThreadStart(hoge));として開始した関数hoge()の中で 無限ループに入っていて、そのループの終了条件がグローバルな System.Booleanになっているソースコードをよく見かけるのですが、 これはSystem.Booleanがスレッドセーフだから出来ることなのですよね?
そんなソースみたことないけど 読んでセットってな動作をしないからスレッドセーフでなくても問題なし
はあ?
>>105 それ、バグでそ。まず症状が出ないと思うが。
Monitor、Interlockedあたり使わないとスレッドセーフにはならん
スレッドセーフの意味を明確にしようぜ。 Monitor、Interlockedはアトミックを保障するためのもの。 boolの読み出し単体処理はアトミックだから上記は不要。 ただしvolatileになってないのなら(もしくはMemoryBarrier等してないのなら) 最新の値を読み取れるとは限らない。 よって問題はある。
ひとつのスレッドからしか設定せず他のスレッドからは読み取りしかしないならロックする必要ないと思うのだが。 while(stop==false){ 作業 } じゃないのか?
あ、Monitor使ってればvolatileになるからそれでもいいといえばいいな。 Interlockedは意味なしってかどう使うんだよ。
別スレッドから書き込んだ値を即座に読み出せるとは限らない。 レジスタなどにキャッシュされて永遠に読み出されない可能性もある。 最適化によってただの定数になる可能性もあるかもしれない。
113 :
105 :2006/04/19(水) 00:38:24
>>105 根本的に、オブジェクト指向的に間違っている。
オブジェクト指向的にはどうすればいいのかね? あ、グローバルが気に入らんてことか。
Threadの替わりにBackgroundWorker使おうぜ
>レジスタなどにキャッシュされて永遠に読み出されない可能性もある。 >最適化によってただの定数になる可能性もあるかもしれない。 ほんまかいな
>>109 ああ、そうやすまん、アトミック保証や。
volatileつけれってことやな。
>>113 >この型は、マルチスレッド操作に対して安全です
これは同一オブジェクトに対して同時に操作しても大丈夫、の意。
先生!変数に代入したのにレジスタにキャッシュされて代入が反映されません!
何が言いたい?
レジスタにキャッシュって妥当な言葉なん?
"レジスタにキャッシュ" の検索結果のうち 日本語のページ 約 35 件中 1 - 25 件目 妥当と言うべきか判断に迷う数字だな まあ C# とは関係ないわな
おっぱいにダイブ の検索結果のうち 日本語のページ 約 33 件 これと同程度らしい。
124 :
デフォルトの名無しさん :2006/04/20(木) 17:54:55
125 :
おじさん :2006/04/20(木) 18:03:56
変数は定数と比較して、どこが便利ですか?簡単に説明してもらえるとありがたいです^^
VB6->C#って・・・
>>125 変数を利用した、副作用ともなうプログラムが組める
>>125 1や2など意味が無い数字に名前を付けれる
複数ある場合、あとで変更するときに便利
省エネ
131 :
デフォルトの名無しさん :2006/04/20(木) 22:12:16
>>125 例えば、1から10000まで足し算するプログラムを書いてみると分かりますよ。
>レジスタにキャッシュって妥当な言葉なん? べつにいいだろ言いたいことは分かるだろうがよウワーン
>>131 const
n = 10000;
sum = n * (n + 1) / 2;
コンパイルエラーで動きません。
すまん。スレタイみてなかった
137 :
デフォルトの名無しさん :2006/04/21(金) 00:30:07
ウィンドウサイズの変更ってどうやるんですか? (VS.NETを使わずに)
mshtmlへの参照を追加しようとすると固まるんだけど 俺だけ?
>>137 意味分からん VS.NET をどう使ってどう使わないという話なんだ
>>138 お前だけ
って言われれば満足?
140 :
デフォルトの名無しさん :2006/04/21(金) 00:50:37
あるメソッドをオーバライドすると、ある他のメソッドをオーバライドしなければならない という警告が出るようにするにはどのようにしたらよいのでしょうか? EqualsをオーバライドするとGetHashCodeもオーバライドしないといけないのような
>>139 悪かった。
Visual C# 2005 Express で、
COM参照(Microsoft HTML Object Library)を選択してOKを押すと、
マウスポインタがWaitのままCPU仕様率100%で完了しないのですが
こんな症状の理由の分かるかたいらっしゃいませんか?
>
>>141 俺も同じ症状、Beta2では出来た気がするんだが
143 :
デフォルトの名無しさん :2006/04/21(金) 01:42:23
>>141 おれんとこも同じ。
VS Standard入れてある環境だと、MSHTMLはPrimary InterOp Assembly(PIA)が入っていて
「参照の追加」で.NetのタブからMicrosoft.mshtmlがすんなり選べるんだけど、Expressの入っ
ている環境だと、なぜかmshtmlのPIAが入っておらず、COMのタブから選ぶしかない。
COM参照だとTlbimpがmshtmlのラッパを作成するので、その間にむちゃくちゃ時間
かかる(mshtmlは巨大)
数分ほうっておくと、ラッパのアセンブリが作成されて、参照可能になっているはず。
mshtmlのPIAは.net SDKに入っているんではないかなあ?
144 :
デフォルトの名無しさん :2006/04/21(金) 01:43:42
>>137 ウィンドウサイズの変更って 普通マウスで右下隅を
ドラッグしてぐりぐりっと変更するもんで内科医?
145 :
141 :2006/04/21(金) 02:19:10
>>143 そうなんですか。明日もう一度試してみます。
できたdllも巨大なんですかね?
すると配布にはむかないかな?
7.64MB 必要とする機能がごく限定されてるなら自前で COM インターフェイス宣言するのも良いかもね
147 :
デフォルトの名無しさん :2006/04/21(金) 02:39:33
>>145 ラッパのくせに8MB近くになるよ。(PIAもほぼ一緒)
MS OFFICE用のPIAでもせいぜい数百キロbyte.
mshtmlはダントツに巨大っす。
まあDOMのオブジェクト、メソッド、インタフェース、イベント、その他もろもろ
すべてについて、変換用のシグネチャ書き出すんだから、仕方ないとおもうけど。
まあ、きょうび8Mb程度のファイルの配布を躊躇することも
ないとおもうけどねえ。。。
>140 文字とおり EqualsをオーバライドするとGetHashCodeもオーバライドしたほうがいいよ ってことなんだけど。必要なしと確信できるならほっとけばOK。
>>148 自前のインタフェース中の2つのメソッドを基底クラスで実装してあって、
実装クラス側にその二つのメソッドは片方オーバライドしたら両方オーバライドしたほうがよいよ
というようなことがしたいんですけどどうすればよいのかと。
無いんじゃないかなぁ わざわざ CS0659 から CS0661 までの 3 つの警告を割り当ててるくらいだし
151 :
148 :2006/04/21(金) 08:30:47
質問の意図をとりちがえました。失礼。属性とかでできないのかな。
それとも<Warning>かな
オブジェクトの同期インデックスをどのスレッドが取得しているか調べる方法はありますか?
動機インデックスってなんね?
VS2005 Standardを使用しています。 C#にて複数のプロジェクトをソリューションに追加し、コンパイルした場合、 1つのプロジェクトだけをコンパイルした場合でも、関連する(プロジェクト参照している)プロジェクトも 全部コンパイルされてしまいます。 ※例えば、プロジェクトの1つがメインのEXEで残りはすべてDLL(複数)といった具合 プログラムの修正もしていない、または明示的にコンパイルも掛けていないのに、 勝手にコンパイルが掛かり、アセンブリの日付が変わってしまう事が嫌なのですが、 勝手にコンパイルが掛からないようにする事は可能ですか?
>>155 ツール>オプション>プロジェクトおよびソリューション>ビルド/実行
>実行時に、スタートアップ プロジェクトおよび依存関係のみをビルドする
にチェックを入れる
ごめん156は勘違い。 関連するプロジェクトのリビルドは抑制できないんじゃないかと。
dll化するしかないね あとちょっと面倒だけど、参照させることでいける
159 :
155 :2006/04/22(土) 17:35:43
なるほど。 やはり制御は出来ないですか。 一応、現状はそれぞれ別々のソリューションにして、個々にコンパイルし、 参照設定でDLLを直接指定しています。 一応、デバッグ情報も生成させているので、デバッグ時に困るという事は無いのですが、 関連モジュールも一緒に修正したりとかするときに、別のソリューションを開いて・・・・ となるので作業が面倒でした。
複数のTabPageで、同じコントロールを共有したいのですが、良い方法は ありませんか?具体的には、同じ絵のPictureBoxを、どのTabPageにも表 示したいのです。タブブラウザを作る場合に、WebBrouserコントロールを 共有するというのも同じ問題になると思います。 やってみた方法としては、 tabControl1_SelectingやtabControl1_SelectedやtabControl1_SelectedIndexChanged 内で、targetControl.Parent = tabControl1.SelectedTab; とすると、一応 共有化されるのですが、タブが切り替わる際にtargetControlが一瞬見えなく なります。それぞれのタブに、コントロールを別々に張り付けると、切り替わ りの問題は発生しませんので、タイミング的に背景色で塗りつぶされてから Parentが変更されるのだと思います(Selectingの時点で切り替えるのでは遅い と言うこと)。 TabPage.Controls.Add だと、どれかひとつにしか配置できません。 何か良い方法は無いでしょうか? VisualStudio2005+WindowXP SP2 を使っています。
インターフェースとか使えるようになったら、ちょっと大人になった気分がするんですが 私だけですか?
>>160 別々にコントロール貼り付けたら問題ないんだったら
それでいいじゃん
>>160 共有したいものをタブページの中に置かずに
タブコントロールの真下に置けばいいんじゃね
それとタブブラウザではタブの数だけ
ウェブブラウザのインスタンスが存在すると思うぞ
>>161 .NET ではインタフェースはあんまり使わない
164 :
160 :2006/04/22(土) 18:00:01
>>163 エロ画像だから画面いっぱいに見たいんだよ!!
>>164 そんな不純な動機なら知ってても教えてあげないよ!!
ジャン♪
167 :
デフォルトの名無しさん :2006/04/22(土) 20:46:32
>>159 メニュー「ツール」→ユーザー設定→「コマンド」タブ
そこの「ビルド」にお探しのものがある気がする。
>.NET ではインタフェースはあんまり使わない なにと比較してだろ?
イベントが .NET なら delegate を使う辺りじゃね Java ならインターフェイス使わんといかんからな
javaはよく知らないがイベントにインターフェースを使うってどういうこと? ちょいと検索したらライブラリにEventListenerっていうインターフェースがあるようだが そいつを利用するって話?
172 :
デフォルトの名無しさん :2006/04/22(土) 23:48:23
インナークラスの間違えじゃねw
>>171 delegate オブジェクトの代わりにイベントリスナインターフェイスを実装するオブジェクトを渡す。
// インターフェイスを実装するオブジェクトは大抵は(無名の)インナークラスで定義する。
RichTextBoxのスクロールを制御するにはどうすればいいでしょうか? 何十行とデータがあって、1画面に収まらない時、スクロールを1番下にしたいんです。
Java のメンバクラスって扱いがめんどくさいよな ネストトップレベルクラスのようなシンプルさがない
>>174 ScrollToCaret
SelectionStart
177 :
174 :2006/04/23(日) 01:41:12
>>176 今確認しました。
ありがとうございました。
>Java のメンバクラスって扱いがめんどくさいよな >ネストトップレベルクラスのようなシンプルさがない ???
プログラミングしてて悩むのがクラスやメソッドの名前をどうするかなんだよね 翻訳ソフトでやると、ダサい英語や意味がわかりにくいものになったりするし みんなどうしてるの? デザインパターンならぬ、名前付けパターンみたいなのないかな?
慣れだよ慣れ
VB.NET2005のMyの機能があると思いますが、C#(というか.NETFramework)との 対応表みたいなのってどこかにないですか?
Myって馬鹿を甘やかすための機能じゃ?
185 :
デフォルトの名無しさん :2006/04/23(日) 11:43:21
♯## お前らは これらの区別つけられますか
187 :
デフォルトの名無しさん :2006/04/23(日) 11:49:31
いい物をやろう private void radioButton3_CheckedChanged(object sender, System.EventArgs e) { if(this.radioButton3.Checked) this.radioButton1.Checked = true; } private void radioButton1_CheckedChanged(object sender, System.EventArgs e) { if(this.radioButton1.Checked) this.radioButton2.Checked = true; } private void radioButton2_CheckedChanged(object sender, System.EventArgs e) { if(this.radioButton2.Checked) this.radioButton3.Checked = true; }
188 :
デフォルトの名無しさん :2006/04/23(日) 11:52:37
わかりましぇん。
スタックオーバーフローの予感
Checked == true の時に Checked = true してもイベントは発生しないぜ
192 :
デフォルトの名無しさん :2006/04/23(日) 12:13:44
private void checkBox1_CheckedChanged(object sender, System.EventArgs e) { if(this.checkBox1.Checked) this.checkBox1.Checked = false; if(!this.checkBox1.Checked) this.checkBox1.Checked = true; }
private void test() { test(); }
private void timer_Tick(object sender, System.EventArgs e) { timer.Invail=1; MessageBox.Show("早く閉じて終了しないと、画面がうまっちゃうぞw"); this.Close(); }
private bool Unko { get { return this.Unko; } set { this.Unko = value; } }
ひー!たづけて><
プロパティの再帰呼び出しは警告を出して欲しかったな // 珍しく VB の方だけ警告する
インデクサです
ar<>sage<>2006/03/28(火) 23:34:18 ID:+HWvH7Zl0<> <a href="..test/read.cgi/tech/1145075577/200" target="_blank">
>>200 </a> <br>
>>195 みたいのは機能として欲しいかなと思ってしまう
匿名メソッドならぬ匿名変数として
いちいちプロパティの実体変数を宣言するの面倒くさい
スニペット使えということか
プロパティの暗黙的実装は C# 3.0 では見送られたはず
Visual Studio2005+C#でアプリ作ってて、メニュー操作をキーボードから Alt+E(編集)→C(コピー)なんてやる時、IMEがオンになってると、最後に 押したCがIMEのほうに渡って、コピー動作をやってくれないんだけど、 これってこういうもんなの?
そういうもんじゃね? フォーカスそのものを奪ったりはしてないようだから、元コントロールのままみたいだね。 回避したいなら、MenuActivated と MenuDeactivate でごにょごにょするとか。
普通にできるけど?
207 :
204 :2006/04/23(日) 23:29:49
>>206 ちょっと説明が中途半端で誤解を招く書き方だったけど、IDEの操作でなく、
C#で作ったアプリの動作のほうの問題なんだけど、ほんとにできてる?
こっちでやると、IMEのウインドウが開いて、押したキーがそこに表示されてしまう。
確かに本当だったらIMEオンでも問題ないと思うんだけど...
ToolStrip〜〜 はIMEオンだとダメだね Alt+E C ではなく Alt+E Alt+C ってやれば反応するけど ToolStripControlHost でも内側のコントロールにフォーカスが 移りにくいのも何とかして欲しいなあ
IMEオンのとき メモ帳とか古くからあるメニューを使ってるやつだと Alt押→Alt離→F→Nで新規作成が実行できるけど IEとかCollBar型?のメニューだと Altを押しっぱなしじゃないとfとか押しても変換に入ってしまう。 これは仕様なのかバグなのか・・・・ アクセスキーに漢字も使えるとか言うことだろうか??
IMEオンでも普通にできるけど もしかしたらMS-IMEじゃなくてJapanistだからかもしれない。
>>209 > アクセスキーに漢字も使えるとか言うことだろうか??
その発想はなかったので試してみたらできたw キモスw
くっそ、HttpUtilityなんてクラスがあったのか 必死でhtml勉強してregexやら使いながら手動でエンコードしてたぜw
picturebox のAllowDropってデザイナ時には隠されてるけど 使っちゃまずいんですか? いちおうドロップ動作に問題はないみたいですが
別に問題はないと思うが ただ MS としては D&D の対象として不自然と考えているんだろう
不自然どころかドキュメントで「使うな」と言ってるな
>独自に作成したコードから直接使用するためのものではありません。 とありますが、DragDropイベントもDragOverイベントも みんなあるんですよね〜
問題起きたら自己責任っていうくらいのもんだろ 別に使っても問題ないと思われ
本気で使って欲しくない/使っても責任取らないってのはドキュメントに載せないから大丈夫だよ
219 :
デフォルトの名無しさん :2006/04/24(月) 23:00:03
以下のような操作: Whitespace ::= ' '+ | '\t'+ | '\n'+ と定義されるとき、与えられた文字列を「Whitespace とそれ以外」に分離する。 例) "a b c" -> {"a", " ", "b", " ", "c"} "a b c" -> {"a", " ", "b", " ", "c"} "a\n\nb\t\tc" -> {"a", "\n\n", "b", "\t\t", "c"} "a\n\tb\t\nc" -> {"a", "\n", "\t", "b", "\t", "\n", "c"} を、System.String#Split("●", System.StringSplitOptions.None); -> 要素と要素の間に新しい要素 ("●") を挿入 -> 空の要素に "●" を代入 -> 内容が "●" の要素をまとめる を繰り返す、という方法で実現することを考えたのですが、自分があまり配列操作が得意でなく、 さらに領域操作がオーバーヘッドを生じさせてしまうのではという懸念も考えられるので、他の方法が 無いものかと悩んでいます。 何か他に効率の良い方法は無いものでしょうか?
正規表現で手抜きしちゃえ
List<string> result = new List<string>(); foreach (Match match in Regex.Matches(target, " +|\t+|\n+|[^ \t\n]+")) { result.Add(match.Value); }
222 :
219 :2006/04/24(月) 23:35:07
>>220 >>221 わざわざ具体的なコードまで書いて頂き、本当にありがとうございます。
正規表現にあまり慣れ親しんでいない者としては、目から鱗が落ちるような
パターンで、(大げさかもしれませんが) 感動しています。
ありがとうございました。
それで、肝心のオーバーヘッドは解決されているのか?
224 :
219 :2006/04/25(火) 00:29:56
>>223 4,000 文字程度の文字列を引数に
>>221 を走らせて、出力を配列に落とし、
その内容を標準出力に出力させてみましたが、速度は十分速く、全く問題ありませんでした。
で、配列とどっちが速かったのかね?
なんか妙に絡んでる奴がいるな
っていうか、半角空白開いてるんなら replaceのほうが早いんじゃない?
ちょっと質問なのですが、 { Aho aho = new Aho(); this.Click += aho.OnClick; } とした場合、 this.Click -= aho.OnClick; を実行しなければ aho はスコープを抜けて利用不可能になっても永久に破棄されないんでしょうか?
thisさんがコレクトされる時にはahoさんもコレクトされると思われ
thisさんがエレクトされる時にはahoさんもエレクチオンされると思われ
破棄されます。
VisualStudio2003で作ったプロジェクトを2005にコンバートして実行しました。 キーコードを取得するところで"Enter"で取得していたのが取得できず"Return"で取得しないといけないようでした。 キーボードのEnterを押してみるとたしかに"Return"が返ってくるようなので書き換えればいいのですが、 これは2005から変わったのですか?それとも2003が間違っていたのでしょうか?
Keys.Enter == Keys.Return は true だぞ? 文字列に変換してから比較したりしてないだろうな?
>>233 文字列に変換して比較してました・・・。
ごめんなさい・・・。
C#2005で統計処理をしようとしたら関数が全然見あたらないんですが、 ひょっとして存在しないんでしょうか? エクセル同様の物があると期待していたのですが。
どこからそんな発想がわいてくるんだ?
>>236 自作のライブラリでも探せばよかろう。
C#1.1の時代からいろんな物が作られているから。
Tools for Officeなど使ってExcelのものを使えばいいんじゃないかと 試しもせずに言ってみる。
240 :
236 :2006/04/25(火) 14:41:56
海外も探してみましたが有償のものしか見あたりません。 諦めて必要な機能だけ自作します・・・orz >239 Tools for Officeはもってないです・・・
241 :
デフォルトの名無しさん :2006/04/25(火) 15:54:22
一個ずつ removeItem してけばいいんじゃね?
removeItem関数の前準備をどのようにするかで困っています。
前準備って何か必要か? item でインデックスから取得して removeItem するだけじゃん。 総数は count で取得できるし。
int cnt=playlist.count; for(int i=0;i < cnt;i++) { Media = playlist.get_Item(i); playlist.removeItem(Media); } で16個中8個まで削除する事ができましたが、それ以降は エラーが出て削除できませんでした。 別の遣り方でWMPを利用します。
……。 removeItem で 0 番目のを消す。 残りは繰り上げられて 0 から 元の playlist.count - 1 までになる。 removeItem で 1 番目のを消す。 繰り上げられた 0 はどこ行った?
>246 0番目削除でうまく全部削除できました。
248 :
228 :2006/04/25(火) 19:22:15
>>229-231 レスどうもです。
>>231 ということは、aho がスコープアウトすると自動的に -= 相当のことをしてくれるという理解でいいのでしょうか?
それとも this.Click が invoke されると実行時エラーが発生するとかでしょうか。
>>247 その場合はどうか知らないですが先頭削除はコストが高い可能性があるので
一般的には
for (int i = cnt-1; i >= 0; --i) {
Media = playlist.get_Item(i);
playlist.removeItem(Media);
}
の方がいい気がします
>>248 バックで責めるのか?こやつめ!はっはっはっ
>>248 > ということは、aho がスコープアウトすると自動的に -= 相当のことをしてくれるという理解でいいのでしょうか?
良くない。
> それとも this.Click が invoke されると実行時エラーが発生するとかでしょうか。
しない。
this.Click に aho.OnClick が追加されたら、(明示的に解除しないのなら)
this.Click が参照不可にならない限り aho.OnClick は this.Click から参照される。
だから this が GC されない限り aho のインスタンスは残る。
251 :
228 :2006/04/25(火) 19:55:03
>>250 なるほど、どうもありがとうございました。
イベント(?)の”+=”と”-=”演算子ってどうなってんの? a.Cloick += new Handler(OnClick) a.Cloick -= new Handler(OnClick) HandlerのEqualsが 同じインスタンスの同じメソッドならtrue返すようになってまんのか?
delegate の演算子オーバーロード
>>252 >同じインスタンスの同じメソッドならtrue返すように
なってないと思う。
くっつけてから外したいならメンバ変数なりに保持しておくことになるんじゃ。
デリゲート勉強すればわかるのにね
256 :
デフォルトの名無しさん :2006/04/25(火) 22:19:40
くっつけてから外したいときにはメンバ変数に保持する必要はない 普通に-= new Handler(XXX)で問題ない。 ちなみに同じハンドラを+-すると二度実行される(メンバで保持するしないにかかわらず) リストビューでフォーカスが外れたときの色ってなんでしょう? 選択色はSystemColors.Hightlightなのはわかるのですが SystemColors.Controlでいいのかな
>>256 リストビューのBackColorじゃないのか
普通はたぶんWindow
ListView.HideSelection=false LisViewItem.Selected=true でフォーカスを外した時の色のことじゃね 標準の配色だと灰色っぽい色だが
>>256 SystemColors.Controlです。コンパネかSetSysColorsで色をいじるとわかる。
ImageList に単品で.Images.Add したらPNG画像のアルファがきちんと表示されるのに 画像をつなげて .Images.AddStrip するとだめなのはバグですかね?
つなげるってどうやってつなげてんだ?
>>262 GIMPで一つの画像ファイルにまとめたものを
リソースに追加するということです。
C#初めて1日目の者です。 tabcontrol内に、コントロールを追加したいのですが、 MSDNで調べたところ、以下のような例が見つかりました。 //タブコントロール内にコントロール配置 // Assuming that tabControl1 exists and has at least one tab page // Add a button to the first tab page tabPage1.Controls.Add(new Button()); 上の例はよくわかりますが、 for (int i = 0; i < (numericUpDown1.Value - tabcnt); i++) { string title = "TabPage " + (tabControl1.TabCount + 1).ToString(); TabPage myTabPage = new TabPage(title); tabControl1.TabPages.Add(myTabPage); } で、増やしたtabpageにコントロールを配置するにはどうしたらよいでしょか? コントロールを追加したいtabpageはその時々によって変化するため、MSDNの例の通りにはできません。 これで伝わりますでしょうか? ご教授お願いいたします。
tabControl1.TabPages とかから目的の TabPage を手に入れればいい インデックスで探すなり SelectedTab 使うなり。 TabPages を foreach で TabPage 列挙してそれぞれの Text を調べても良いし。
>>266 非常に申し訳ないのですが、よく理解できません。
ソースで示していただけるとありがたいのですが。
本当にごめんなさい。
メンバぐらい調べろよ・・・
>>266 以下のコードで解決しました。
this.tabControl1.TabPages[tabControl1.TabCount-1].Controls.Add(new Button());
ありがとうございました。
TabPageにコントロールを配置してから TabControlにそのTabPageを追加しないか?ふつう
271 :
デフォルトの名無しさん :2006/04/27(木) 21:20:38
匿名メソッド構文を使用して生成されたデリゲートを内包するクラスを バイナリフォーマットで書き出すことはできないのでしょうか? シリアライズは可能で、きちんとファイルも生成されるのですが、デシリアライズを行おうとすると System.Runtime.Serialization.SerializationException はハンドルされませんでした。 Message="メンバ '<Initialize>b__0' を取得できません。" という例外が投げられるので、ファイルを覗いて "<Initialize>b__0" という文字列を検索してみたところ、 その後に続くシグネチャがデリゲートのそれと同一だったので匿名メソッドが原因ではないかと疑っています。
ごく簡単なコードでは問題なかったが。BinaryFormatter だよね。 再現コード書ける?
273 :
271 :2006/04/27(木) 22:52:22
>>272 検証コードを書いてみたところうまく動いたので、エラーの出るプログラム内の
クラスの readonly を外してみたり、デリゲートの引数を全て参照渡しにしてみたり
したところ、うまく動いてしまいました。
わざわざお付き合い頂いたのに自己解決してしまった上、更にスレまで汚してしまいました。
実に申し訳ありませんでした。
申し訳ないと思っているのなら再現できるコードをうpしてよ
もうこのスレ見てないだろう
ツールボックスのコモンコントロールのアイコン表示がすべてNumericUpDownのアイコンになってしまった そのほかにも、フォームデザイン表示するとフレームがガクガク揺れるし Oneクリックしただけなのにdoubleクリックになったり ほんと糞だなこれ
そうだね
Events[2] += new EventHandler(...); みたいにしたいのですが、 インデックスつきのイベントは作れないんでしょうか? デリゲートを返すしかない?
どんなイベントでそんなのが要求されたんだ?
280 :
278 :2006/04/28(金) 18:24:47
>>279 そんなことは話す必要はない。
おれが聞いてるのは作れるかどうかだ。
281 :
278 :2006/04/28(金) 18:29:34
//
>>280 は別人です
KeyPress[Keys.A] += new EventHandler(AorBPress);
KeyPress[Keys.B] += new EventHandler(AorBkeyPress);
void AorBPress()
{
Console.Write("AかBが押されました");
}
みたいにできると便利かと思ったのですが
それはどうにもスジが違うなぁ KeyPress は KeyPress で、どのキーが押されたかはイベント引数でってのが .NET の方向性だろう ま、どのみちイベントじゃ引数付きはつくれないけど
284 :
278 :2006/04/28(金) 18:51:46
public Dictionary<Keys, KeyEventHandler> KeyPress{get;set;} とかやってデリゲートを直接返してしまうしか無さそうですね。 外部から呼び出せてしまうのが気持ち悪いですが。
デリゲートはデリケートだからさぁ、やさしくね☆ミ
別に正式にイベントである必要がないなら、 AddHandlerとかのメソッドにすりゃいいじゃん。 正式にイベントにしたいんならそりゃ諦めるしかないが…
C#でOracleを使用しています。 普通なら「for update nowait」で、レコードロック掛けてから更新すると思いますが、 この度、レコードロック掛けずに更新しろとのお達しがありました。 SqlPlusでは、レコードロック掛けられている間、他のセッションで更新しようとすると、ロック解除まで待ち続けますが、C#で使用するOracleのライブラリでは待たずに返って来させるようなメソッドが用意されていますか? (どこで聞いていいものかわからずこちらで聞いてしまいました。すれ違いなら誘導していただけませんでしょうか?)
1段落目と2段落目の関連が理解できないよう… 普通なら「for update nowait」で…てどういうこと? レコードロック掛けずに更新しろ…てどういうこと?
「レコードロック掛けずに更新しろ」っていうのは要するに 楽観的同時実行制御しろってことか? だったらUPDATE実行する直前に、他のセッションで そのレコードが変更されていないかチェックして、 変更されていなかったら普通に更新すれば委員ジャマイカ?
>レコードロック掛けずに更新しろ どういう要件でそういう場合があるのか知りたいので 理由を教えてほしい。
どういう状況かがかかれてないから意味が分からんな。
読み込んでから更新までが長い状態で、ロックをかけるなという話なら、
>>289 の言うように楽観的同時実効制御の話かと思うが、
直前に更新がなかったか確認するという方法であれば、
確認する際にはやっぱりレコードーロックは必要になるぞ?
WHEREの条件ではじく制御方法なら不要だが。
で、
>C#で使用するOracleのライブラリでは待たずに返って来させるようなメソッドが用意されていますか?
がどういう意図で書かれてるのか分からない。
292 :
デフォルトの名無しさん :2006/04/30(日) 12:49:13
厳密に言うとロックを掛けずにレコードを更新することはありえない。 更新の瞬間には必ずレコードをロックしなければならない。
だれもそんなことは聞いてない。 と思うのだよ。
>>291 >確認する際にはやっぱりレコードーロックは必要になるぞ?
その必要すらないほど「楽観的」なのでは?w
非同期アクセスされることがないとか
ASP.NETでWebサービスや.NET リモーティングをホストしているとき、 そこそこ長時間かかるかもしれない非同期の処理を投入 (オンラインバッチとかそういう感じ)する場合、 どういう風に実装するのがいいんだろ? 裏でプロセスをキックするのが一番簡単なんだが、 サーバリソース的に無駄が多いと思われる(投入頻度によるが)。 しかし、ASP.NETの処理内でスレッドを起動したりス、レッドプールを 長時間(かもしれない)占有するのは、通常の処理への悪影響がありそうで怖い。 実際のところどうするべきかな…
多分いわゆるロングトランザクションの場合とか意識せずに、 盲目的にロックはかけるなといわれてる気がする。
その辺シビアにやりたいなら全部ストアドプロシージャで書いて、C#から呼び出すだけにすべきだな。 その前にADO.NET(ODPでもええけど)の標準的な手法というのも一度理解しておいたほうがいい。
全部ストアドでやるとどういうメリットがあるわけ?
>多分いわゆるロングトランザクションの場合とか意識せずに、 >盲目的にロックはかけるなといわれてる気がする。 あるいはそういわれてると誤解してるか?
>>299 ・SQLインジェクション対策(セキュリティ対策)
・プログラムのコンパイル不要でシステムの修正が可能。
特に同じようなSQLが大量に使われてる場合、1つのストアドをサーバで直せば、全部直る。
・既にSQLがコンパイル済みなので、処理が早い。
プログラムからSQLを発行すると、DB鯖では字句解析からコンパイル・・・といった手段を取る。
>>299 fot updateとか nowait 指定とか使える。質問者の脳内にあるやり方がそのまま通用するということ。
質問者がこれまでなに使ってるかによるけどね。
ビジネスロジックまでストアドで書くのはつらいな。 オラクルならなおさら・・・
いや、 >その辺シビアにやりたいなら全部ストアドプロシージャで書いて このその辺シビアにできるというメリットに関して聞きたかったんだ…
>fot updateとか nowait 指定とか使える。 普通にSQLでも使えると思うんだが…
特定の一部の処理をストアドにするってのはよくあると思うが、 どっちかっていうと低レベルの処理を行う小さな部品みたいな使い方で、 まともなロジックはあまり書きたくないな。 PL/SQLのプログラムなんざ見てたら頭痛がしてくる。 まあ、.NET拡張を使うという手も…
>>296 優先度下げたスレッドにやらせれば?
スレッドプールは割とあっさりあふれる可能性があるので長時間の処理には使いたくないね
>>303 Oracleなら.NETでビジネスロジック書いて、ストアドで呼び出せば良いじゃないか。
309 :
デフォルトの名無しさん :2006/04/30(日) 13:13:53
C#で組み込み言語として、C#自身を使う方法はありますでしょうか。 あったと思うのですが、解説されたwebページを前に見たのですが、忘れてしまいました。 具体的には、スクリプトのように使いたいのですが・・・。
310 :
303 :2006/04/30(日) 13:14:36
>>308 だよな。
>>298 が「・・・全部ストアドプロシージャで書いて・・・」とか言ったからさぁw
>>307 やっぱそういう感じかね。
>スレッドプールは割とあっさりあふれる可能性があるので長時間の処理には使いたくないね
そう、これが気になるところなんだが、
いろいろ見てるとスレッドプールを使わないというのも
まずいように書かれてるので気になってるんだよね。
※スレッドのリソースが枯渇して云々など
スレッドプールのスレッド数をうまく調整するか、
普通に低優先度のスレッドを起動して、同時投入数を制限するか、
あるいはキューに投入して順次処理させるか。
うーん、悩むところだ。
>この度、レコードロック掛けずに更新しろとのお達しがありました。 このお達しが楽観的排他を使えということなのか、 NOWAITにしろということなのかよく確かめるべきだと思う。
お達ししてる側も分かってなかったりして。
>>311 スレッドプールを使わないとリソースが、ってのは WWW サーバみたいな超多量のリクエストを捌く時のシナリオだよ。
まあ、うーんそうだな、やっぱりその辺のシビア度によって違うわな… 今回のはそこまでシビアではないと思われるから、いいような気はしてきた。 同時実行数の制限をかければ十分かな…
スレッドプール使うぐらいなら自分で独自のスレッドマネージメント作ったほうがよさげなんだが。
同時実行数を制御してキューに投入とかやろうとしたら、 結局自分で管理せざるを得なくなるから、 >独自のスレッドマネージメント作ったほうがよさげなんだが。 結局こうなる気がしてきた…
319 :
デフォルトの名無しさん :2006/04/30(日) 13:53:45
320 :
287 :2006/04/30(日) 16:03:10
だ か ら ど う し た
>>320 本物かどうかよくわからんが、
お前が知ってるとか知らないとかそんなことはどうでもよくて
#そもそもお前に言ったんじゃない部分もあるような気がするが
お前がどういう風に言われたのか、どういう意味で言われたのか、
それをどう受け取っているのか(どういう意味と理解しているのか)
それともお前が言われた意味を誤解してるのか、
言った側がそもそも分かってないのか、
さっぱり分からんからそれを教えてくれといってる。
323 :
287 :2006/04/30(日) 16:15:53
324 :
287 :2006/04/30(日) 16:18:06
だが断る
なんでやねんw
他の人のプログラミングコードを見て参考にしたいのですが そういうコードを載せてあるサイトがあれば教えて下さい
329 :
326 :2006/04/30(日) 16:37:24
330 :
326 :2006/04/30(日) 16:39:07
だが断る
なんでやねんw
他の人のプログラミングコードを見て参考にしたいのですが そういうコードを載せてあるサイトがあれば教えて下さい
codeproject とか
sourceforge とか
他の人のプログラミングコードを見て参考にしたいのですが そういうコードを載せてあるサイトがあれば教えて下さい
圧縮書庫を解凍することなく閲覧する処理を行いたいのですが、どうやってやるのでしょうか? UNZIP32.DLLなどのライブラリを使えば良いのかと思いましたが、その方法がわかりません。 よろしくお願いします。
DllImport の解説ならそこらじゅうにあるし、 どんな関数を使えばいいのかは DLL 次第だろ。 zip なら #ziplib とかもあるけど。他のがあるかどうかは知らない。
zipなら2.0で対応されてなかったっけ?
ストリームとしては対応してるけどファイルとしては未対応。 やるなら自前でヘッダ読み書きする必要があるな。
ファイルもストリームじゃないの?
341 :
336 :2006/04/30(日) 20:48:14
単なる解凍ならJ#ライブラリやSharpZipLibを使えばできるようなのですが、 「解凍せずに書庫内を閲覧」というのをどうやるのかがわかりません。
ファイルとして出力しないだけで、メモリ上には展開しなきゃいけないんじゃないか?
そんなもんライブラリによるでしょ
zipファイルの中にリストだけ別に保存してあったような
345 :
336 :2006/04/30(日) 21:18:08
シェル拡張はエクスプローラに機能を追加するもんだ
>287です。 今日、もう一度どういう意味か聞いてきたのですが、お達し出したほうはシステムがどういう具合に作られてるのか全くわかってなかったようです。 ロックかけるselectで時間を費やすのが嫌だった見たいです。 で、言うとおりにやってみたんですが、裏で表ロックかけて更新するPGがあり、にっちもさっちも行かなくなりました。 途中から関わってるから全体が見えなくて大変困っています。 皆さんありがとうございました。
>>347 そいつらヘタレ過ぎるな。
まあ、がんばれ
等幅フォントの横幅を調べる方法を知っている方いませんか? 縦*(2/3)って書いてあるサイトもあったんですが、日本語フォント系にしか通用しないみたいで。
実際はBold加減によっても幅が変わるわけで。
等幅に限らずフォントの横幅を調べる関数はあったはずです。
>>349 ひっぱりだすのめんどくさいんだが、C#によるプログラミングウィンドウズのText周りの章にその辺の事欠いてあったはず。
353 :
349 :2006/05/01(月) 12:06:56
>>350-352 とりあえずMeasureCharacterRangesで適当な一文字('A'とか)を計って
それを横幅として使うことにしました。等幅なので問題はないと思います。
あまい
PCごとに固有の値を取得するにはどうすればよいですか? 値はどんなものでも構いませんが、intやstring形式に直せると助かります。
「PCごとに固有」の定義が曖昧なので何とも。 PCを構成する個別のデバイスに固有の値ということなら、 例えばMBのシリアルナンバーとかNICのMACアドレスなんかはそうだけど、 簡単に交換できてしまうのでは「PCごとに固有」の保証にはならない気がする。
357 :
355 :2006/05/01(月) 13:52:36
解放されてないCOMオブジェクトが何か調べる汎用的な方法ってありますか? どこかで暗黙的に呼ばれてるらしくて、ReleaseComObjectしたくてもできません。 COMを扱うアプリで、マネージドコントロールにAllowDrop=true;にして ファイルのドロップ等を行うと終了してもプロセスが残ってしまいます。 SPY++で残ってるプロセス見ると".NET-BroadcastEventWindow..."というwindowが 悪さしてるみたいなんですが……
少なくとも .NET の範囲では存在しないね 質問からじゃ COM がどこで使われてるのかよく分からんけど
i unknown うまいこと言ったな俺。
>>356 なるほど、ありがとうございます。
厳密でなくても良いので、それでいこうと思います。
355==361!=357?
この板ではよくあること
364 :
デフォルトの名無しさん :2006/05/01(月) 17:52:02
C#って末尾再帰の最適化できますか? うわさによると最近のC/C++コンパイラはできるらしいですが。
IL コードレベルの話ではないな。 JIT コンパイラが頑張れば不可能ではないだろうがどう実装されてるのか知らんし。
366 :
デフォルトの名無しさん :2006/05/01(月) 19:06:04
>>365 ないんですかねぇ。
ILにはtail命令っていうのがあるらしいですが、
CLRの環境からダイレクトに使えるようには
見えないんですよね・・・
>>366 CorDbgで見たかぎりはJITでもやってないな。
確かにILにtailはあるがそのうち関数型の言語をサポートするときのための布石じゃないかな。
368 :
デフォルトの名無しさん :2006/05/01(月) 22:06:18
>>367 C#3.0でラムダ式が入るみたいですから、そのときに期待ですかね。
NET系のプログラムは最近始めたばかりです C#のソースを見ていますと時々ofdというものが出てくるのですが どういう振舞いをするコマンドですか? C++にも等価なものはありますか
ofd なんて見たこと無いんだが
OpenFileDialog?
なんかの変数名と勘違いしてるんだろう。
OmankoFuckDo!!
ofd オレも使ってたw あと、 RegistryKey rk とか
インテリセンスが強化されるほど、変数名が長くなっていく俺ガイル
namespaceをどこまでusing宣言すべきか悩む、の巻
使う名前空間全て
WebBrowserコントロールにURLを設定して、ページが読み込ませると ページが読み込み終わった時に、WebBrowserコントロールにGUIのフォーカスが移ってしまうんですが、 この時に、フォーカス移動させないようにするやり方ってありますか?
>>379 読み込んだ後にフォーカスを移したいコントロールを指定すればいいんじゃね?
なんでHttpWebRequestは圧縮に対応してないんだよう。
そこで GZipStream/DeflateStream ですよ
いやいや、内部で使ってくれないのが痛いんだよね。
何でかって言うと、.NET Remoting のHttpChannelで使いたいからなのよね。
GZipとDeflateを使うように設定できるプロパティがあった気がする
というか HttpWebRequest がいつのまにかどっかにいってるよな
HttpWebRequest.AutomaticDecompression これ。
うぉーあったのはうれしいんだけど、 リモーティングのチャネル使用時に設定する方法が分からん。 ていうか普通のやり方じゃできなさそうな希ガスorz
質問です。 スカラー数を表す Type の集合A を A = { typeof(int), typeof(double), typeof(float), typeof(long), ... } とします。 Type dstType ( srcType ∈ A ) object srcObj ( srcObj.GetType() ∈ A ) があるのですが、dstType の型をもち、 srcObj の値をもつ新規オブジェクト dstObj を作成したいと思っています。 イメージとしてはキャストを手動でやるような感じです。 dstObj = Activator.CreateInstance(dstType, srcObj) とすればできるかと思ったのですが、コンストラクタがないとエラーがでてできませんでした。 これを実現するにはどうすればよいでしょうか。
391 :
390 :2006/05/02(火) 08:14:00
× Type dstType ( srcType ∈ A ) ○ Type dstType ( dstType ∈ A ) でした。
自己解決しました。 delegate object ConvertDelegate(object obj); Dictionary<Type, ConvertDelegate> dict = new Dictionary<Type,ConvertDelegate>(); dict[typeof(int)] = new ConvertDelegate(delegate(object obj) { return Convert.ToInt32(obj); }); dict[typeof(double)] = new ConvertDelegate(delegate(object obj) { return Convert.ToDouble(obj); }); dict[typeof(float)] = new ConvertDelegate(delegate(object obj) { return Convert.ToSingle(obj); }); dict[typeof(long)] = new ConvertDelegate(delegate(object obj) { return Convert.ToInt64(obj); }); : dstObj = dict[dstType](srcObj); のようにできました。
>>379 いったんEnable=false;にして戻せ
なんとなくタブブラウザっぽいの作りたくなったんですが、 WebbrowserクラスでJavaScriptとかActiveXのオン/オフってどうやるんでしょうか?
UMLをグラフィカルに作成できるフリーソフトってありますか?
やっぱだめだ、リンク死んでるし、javaだし。 他にないかなぁ
ああ、そうだ、DRAW系のソフト使えばいいんだな こんな糞高いソフトより使い勝手いいしな
Visio とか Jude とか Rational なんたらとか。探せばいくらでもあるぞ。 おれは WhiteHorse で十分だkが。
はいはい、ここはお前の日記帳ですね
whiteHorseって探してもないんだけど何? なんかマイクロソフトの製品のコードネームみたいなんだけど そういった製品ないし、 standerd以上についてくるクラスデザイナのこと?
FreeMindにしたよバカヤロウ!
>>402 そゆこと。コードネームで WhiteHorse と呼ばれていた。
>>404 いいなースタンダード以上は!!便利そうだなー
なんてったって、ソースと連携できるんだろ?
ちしょうめ!
おれもFreeMindは重宝している 視覚的に見てて楽しい
今までそういうの使ったことなかったけど freemindいいねー。html化することもできるし ちょっと使ってみるか
409 :
デフォルトの名無しさん :2006/05/04(木) 00:10:05
それを調べられんでは先は絶望的な気がせんでもない。 DISPID_AMBIENT_DLCONTROL で調べてみろ。
411 :
394 :2006/05/04(木) 00:22:51
412 :
394 :2006/05/04(木) 00:30:45
しらん(´・ω・`)がな
FreemindはUMLの勉強にはならないんじゃないかな JUDEは無料で使い勝手がいいぞ。UML2には対応まだみたいだけど
フローやUMLを記述したら、自動でコードを生成してくれるようなツールありますか? クラスデザイナだとできるんでしょうか?それならスタンダードの購入も考えたいんですけど もしそんなソフトがあるならほんとアプリ作成もスイスイ便利ですよねー
UMLツールってJavaで動くのばっかじゃんよ・・・
>>415 Javaで動いて何が悪い?
VisioはJavaで動かないと思うけど。
ContextMenuStripで右クリックメニュー出す時の、左側のイメージ表示領域って、 メニューの1階層めはShowImageMerginをFalseにしたら消せるけど、2階層目は 消すことってできない?
じゃあ、.net以外で動かないツールじゃないとダメなんだな?
>>417 ざっと調べたけどないっぽいね。
// これはフィードバックに上げても良さそうだな。
// ToolStripMenuItem が ShowSubMenuImageMargin / ShowSubMenuCheckMargin を持つイメージかな?
「知ってる」ってどこのエロゲが元ネタですか?
426 :
417 :2006/05/04(木) 20:07:43
>>422 サンクス、バグってことね。なんかこんな感じの小さいバグって色々あるような。
それと、これはバグじゃないけど、メニューのチェックマーク(レ点)用のマージン
って広すぎて、チェックがついてない状態だと間が抜けた感じがするのは自分
だけ?
427 :
ゲイツ :2006/05/04(木) 20:16:47
>>426 >バグってことね
じゃねーよ。
by design だってんだろ
フォームをアクティブにせずに表示するにはどのような方法があるでしょうか? Form#Show だと表示するときにフォームにフォーカスがうつってしまい... 具体的には Messenger のポップアップみたいなことがしたいのですが。
>>428 2.0でどうなったか知らんが少なくとも1.1ではない。
VBPower何とかのShowNoActivate参照。具体的にはVisible = trueの
前にShowWindow。俺はよくSetVisibleCoreあたりでやる。
432 :
428 :2006/05/04(木) 20:55:32
ShowWindow でばっちり解決しました。 ありがとうございましたー
NetworkStream ns=tcpclient.GetStream(); //中略 do { ns.Read(data,0,data.Length) }while(ns.DataAvailable) のようにTcpClientを使って、受信するプログラムを作っているのですが 受信するサイズが大きくなると、受信が終わらないうちにDataAvaiableがfalseになって 受信が終わってしまいます。 よい解決策はありませんか?
どう、って言われても感想はない
ファイルごとに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を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。