C♯相談室 Part23

1名無しさん♯

(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。


過去スレは>>2-5あたり。


関連リンク
http://onigiri.s3.xrea.com:8080/csharp/index.php?%5B%5B%A5%EA%A5%F3%A5%AF%5D%5D
2名無しさん♯:2005/04/08(金) 22:51:49 BE:63481853-
3名無しさん♯:2005/04/08(金) 22:52:49 BE:126963656-
4デフォルトの名無しさん:2005/04/08(金) 22:55:35
4
5デフォルトの名無しさん:2005/04/09(土) 14:54:30
C#で作ったコントロールをWebブラウザの中に表示したいのですが(デブロイメントの別ウインドウ表示だとちょっと使い勝手が悪いので)、
どのあたりにノウハウがあるか情報収集先を教えていただけませんでしょうか?
Webサイトをいろいろ見た感じですと、ActiveXを使うとブラウザ内の表示できて、C#で作ったコントロールはActiveXにできそうな雰囲気がしています。
あと、ActiveXの初歩の初歩を勉強できるサイトとかあったら紹介してもらえると助かります。
6デフォルトの名無しさん:2005/04/09(土) 15:24:07
7デフォルトの名無しさん:2005/04/09(土) 15:26:57
ActiveX にしてもいいけど、ノータッチデプロイメントでもブラウザ内での表示は可能なはず。
<object classid="Filename.dll#Namespace.ClassName"></object>
みたいな。
8デフォルトの名無しさん:2005/04/09(土) 15:37:15
>>7
なんと!!
有難うございます、これぞ求めていたもの。
9デフォルトの名無しさん:2005/04/09(土) 23:53:58
実行ファイルでXPスタイル適応する、というのは調べたら分かったのですが、
ライブラリの場合はどうしたらいいんですか?
実際にはexplorerにのっける自作toolbarのdllを考えています。
109:2005/04/10(日) 00:02:58
manifestを参照したらいけました。スレ汚しスマソ
11デフォルトの名無しさん:2005/04/10(日) 02:02:21
COMコンポーネントをVC#で使おうとしています。
int hoge(string,int,out int);
というメソッドの第三番目の引数には何を渡せばイイのでしょうか?
(int []を渡すとNGでした)
VC++用ドキュメントではint *を渡すように書いてあります.
12デフォルトの名無しさん:2005/04/10(日) 02:31:06
int a;
hoge("hoge", 0, out a);
1311:2005/04/10(日) 11:00:51
VC++用のドキュメントでは
第二番目の引数はバッファのサイズ
第三番目の引数はバッファへのポインタ
でメソッドhogeがバッファへ書き込むとあります。
1411:2005/04/10(日) 11:54:44
interop アセンブリを使用して簡単に出来ました.
スレ汚しスンマソン
15デフォルトの名無しさん:2005/04/10(日) 12:32:32
axwebbrowser(COM)コントロールでBeforeNavigate2イベントでe.headers調べても
Content-Type: application/x-www-form-urlencodedくらいしか見当たらないのですが
そのサイトに関連したcookie情報しらべるにはどうすればいいでしょうか

http://dobon.net/vb/dotnet/internet/usecookie.html
ここ参考にしましたが、サーバーからかえってくるset-cookie情報しか取得できていません
16デフォルトの名無しさん:2005/04/10(日) 12:46:11
>>15
AxWebBrowserとリンク先とが今一繋がらないが、
あるホストに関するクッキーが手に入ればいいの?
ブラウジングとは関係なく?
17デフォルトの名無しさん:2005/04/10(日) 15:40:56
普段は駐留していてマシンをシャットダウンしようとすると、
シャットダウンを一旦止めてある処理を行い、
処理が終わったらマシンをシャットダウンするアプリを作ろうとしているのですが、
良い方法がわかりません。
なにが知りませんか?
18デフォルトの名無しさん:2005/04/10(日) 15:46:07
>>17
Microsoft.Win32.SystemEventsクラスのイベントを使う
19デフォルトの名無しさん:2005/04/10(日) 15:55:51
System.Windows.Forms以下のライブラリを使用したいのですが、
どうやって移植できるでしょうか?

FedoraCore3,Mono1.0.6(rpmVer.)です。
20デフォルトの名無しさん:2005/04/10(日) 15:59:13
>>15
document.cookie
21デフォルトの名無しさん:2005/04/10(日) 23:11:06
1000 名前:デフォルトの名無しさん :2005/04/10(日) 22:40:54
1000ならチンコうp
22デフォルトの名無しさん:2005/04/10(日) 23:15:23
はぁ?
23デフォルトの名無しさん:2005/04/11(月) 00:14:51
明らかにスレちがいなんですけど、いつもC#プログラマとしてこのスレでお世話になっているので質問させてください。
現在、C#をメインに稚拙ながらソフトウェアを作っております。
ただ、一部のソフトウェアを共有言語ではなくWin32アセンブリとして作成したいので、もう1つの言語を習得しようと思っています。
つまり、セットアッププログラムなどの.netFrameworkに依存しないソフトウェアを作るためです。
やはりもっとも有力なのはC,C++なのですが、Delphi(Pascal)やrubyも検討しています。
C#やJavaは仮想マシンに依存しますし、VBはちょっと抵抗があります。
CやC++でしたらWindowsでそのまま動くソフトウェアを作れることはわかっているのですが、
DelphiやRubyなどはCなどと同様に仮想マシンなどに依存しないソフトウェアの開発はできるのでしょうか?
また、Java&C#プログラマが乗り換えるとしたらC++、Delphi、Rubyのどれが良いでしょうか?

長文大変失礼します。
24最凶VB厨房:2005/04/11(月) 01:14:19
前略
そんなあなたにVBをお勧(後略
25デフォルトの名無しさん:2005/04/11(月) 01:38:09
>>23
ランタイムやインタプリなしで動かすなら、DelphiかC/C++しかないんじゃね?
26デフォルトの名無しさん:2005/04/11(月) 01:43:00
けど、C/C++にしたって完全にプラットホームに依存しなくて、商用に耐えうる
アプリケーションを書くにはそうとう難しいぞ
2723:2005/04/11(月) 01:46:35
やっぱ商用アプリはDelphiですかねぇ?
早速、StandardをDLしてきまして使っています。
最初はHelloWorldすら苦労しました・・・
あれですねC#を見慣れた目には見づらいソースですw

だけど手持ちの旧型マシンに移して実行してもふつうに動いているのは感激モノです。
う~ん、ずいぶん違う言語ですしねぇ・・・
C#ライクの言語はないものか(泣
28デフォルトの名無しさん:2005/04/11(月) 02:10:51
C#ができるならオブジェクト指向言語はどれも簡単にできるでしょ?
漏れはC++屋だけど、JAVA、C#、Delphiくらい余裕ですよ
29デフォルトの名無しさん:2005/04/11(月) 02:17:31
C#からC++は混乱するような気がしないでもない。
逆は楽かもしらんが。
30デフォルトの名無しさん:2005/04/11(月) 02:24:11
>>29
おりもそう思う
Javaについてはデッドコピー疑惑になりそうなので混乱内と思う
31デフォルトの名無しさん:2005/04/11(月) 02:24:56
慣れないうちはメモリ管理で混乱するだろうな。
32デフォルトの名無しさん:2005/04/11(月) 02:29:14
メモリー管理というかプログラムスタイルがね・・・
C++って結構独自進化してるじゃん
3323:2005/04/11(月) 07:58:02
確かにC++は強力ですけどずいぶんと面倒ですよね、
仕方がないことなのですが、結構抵抗があります。

Pascalってずいぶん変わった言語だけどCよりも古いですし(少しだけ)期待しています。
Linuxへの移植も簡単ですしね。

いずれにしろ、C#単体では少し使いづらいのでDelphiかC++あたりをさわってみようと思います。
34デフォルトの名無しさん:2005/04/11(月) 08:37:01
>>33が本当にプログラマだとは俺には思えんのだが
35デフォルトの名無しさん:2005/04/11(月) 11:14:46
セットアッププログラムってインストーラーのことかな?
なら、C#のみでOKだけど。
36デフォルトの名無しさん:2005/04/11(月) 17:55:34
値を確認しようと↓とやったんだけど、
Console.WriteLine( xmlReader.LocalName );
Console.WriteLine( xmlReader.Value );
やるたびに先にnodeが先にすすんじゃうんだけど、そういうもんなん?
下の場合だとnodeを進ませずに
Console.WriteLine( xmlReader.LocalName );
Console.WriteLine( xmlReader.Value );
が全部同じ値になるようにするにはどうしたらいい???

XmlTextReader xmlReader = new XmlTextReader( xmlFileName);

while( xmlReader.Read() )
{
if( xmlReader.NodeType == XmlNodeType.Element )
{
if( xmlReader.HasAttributes )
{
Console.WriteLine( xmlReader.LocalName ); ←これやるたびに進む
Console.WriteLine( xmlReader.Value ); ←
Console.WriteLine( xmlReader.LocalName ); ←これやるたびに進む
Console.WriteLine( xmlReader.Value ); ←
Console.WriteLine( xmlReader.LocalName ); ←これやるたびに進む
Console.WriteLine( xmlReader.Value ); ←

}
}
}
37デフォルトの名無しさん:2005/04/11(月) 18:13:06
>>36
いや進まないな。
3つずつ同じのが返ってきた。
//XmlNodeType.ElementのValueは必ず空文字だから意味ないんじゃ?
3836:2005/04/11(月) 18:36:28
補足っす、

Console.WriteLine( xmlReader.LocalName ); ←これやるたびに進む
Console.WriteLine( xmlReader.Value ); ←
Console.WriteLine( xmlReader.LocalName ); ←これやるたびに進む
Console.WriteLine( xmlReader.Value ); ←
Console.WriteLine( xmlReader.LocalName ); ←これやるたびに進む
Console.WriteLine( xmlReader.Value ); ←
int nnn = 0; ←ここにブレイク張って

マウスのカーソルをxmlReader.LocalNameにあてると、
出力されてるものよりも一個すすんだのがもどってきまつ。。。
さらに、ウォッチウィンドウにxmlReader.LocalNameをいれるだけで進みます。。。

これC#のバグなきがしてきた。。。

>>37
MoveToFirstAttribute()やるとちゃんとValueに値がいるからだいじょび!
39デフォルトの名無しさん:2005/04/11(月) 18:49:18
>>38
> MoveToFirstAttribute()やるとちゃんとValueに値がいるからだいじょび!

って、実は

> Console.WriteLine( xmlReader.LocalName ); ←これやるたびに進む
> Console.WriteLine( xmlReader.Value ); ←

の間に入れてるとか言うオチじゃないだろな?
40デフォルトの名無しさん:2005/04/11(月) 19:00:53
まさか、、MoveToFirstAttribute()ぬいてもすすんじゃうし、
ウォッチウィンドウにいれるだけですすむからなやんでるのですばい;;
41デフォルトの名無しさん:2005/04/11(月) 19:21:07
読んでるファイル見せて-
42デフォルトの名無しさん:2005/04/11(月) 19:58:06
進むってのも微妙だ。
実際にどんな結果が出るのかも書いてくれないか。
43デフォルトの名無しさん:2005/04/11(月) 21:00:20
C#のバグと言ってしまうあたり駄目臭がプンプン。
44デフォルトの名無しさん:2005/04/11(月) 22:08:12
ウォッチのどれかで進めちゃってるんじゃないのん?
45デフォルトの名無しさん:2005/04/11(月) 23:53:56
WindowsXPってデフォで.NETアプリ動くのかしらん?
46デフォルトの名無しさん:2005/04/11(月) 23:58:12
デフォで動くのはServer2003から
47デフォルトの名無しさん:2005/04/12(火) 00:04:41
w160*h120サイズのImageListに様々なアスペクト比の画像を
アスペクト比を保ったまま読み込みたいんですが、なにか簡便な
方法はありませんか?
そのまま読み込むと4:3以外の画像は変にストレッチされてしまい
うまい方法が思いつかないんですが。。
48デフォルトの名無しさん:2005/04/12(火) 00:09:50
d = new ThreadMethodDelegate(send_data);
d.BeginInvoke(str,null,null);
というしょりをループさしているのですが、
send_dataは時間がかかるため、
10個以上のスレッドが同時に送信を開始してしまいます。
d.BeginInvokeする前にsend_dataがいくつ走っているかを調べるには
どうしたらいいですか?
send_dataのはじめに counterをインクリメントして、最期にデクリメントするしかないでしょうか?
49デフォルトの名無しさん:2005/04/12(火) 00:12:15
C#を始めて一番驚いたことは.NET環境が意外と普及していないってこと。
50デフォルトの名無しさん:2005/04/12(火) 00:13:03
俺は意外と普及してると思ったが
51デフォルトの名無しさん:2005/04/12(火) 00:33:03
同じく。
結構C#とかVB.NETの案件増えてる
C#使う必要ないだろ!っていうのも多々あるが。
52デフォルトの名無しさん:2005/04/12(火) 00:35:52
( ´,_ゝ`)プッ
53デフォルトの名無しさん:2005/04/12(火) 01:17:12
C#で作成されたアプリを使ってもらう際に何をインストールすればいいのかしん?
.NET Frameworkなんてそっけない回答はやめてねん
54デフォルトの名無しさん:2005/04/12(火) 01:18:22
他に何を入れろと。
5523:2005/04/12(火) 01:18:49
同上
56デフォルトの名無しさん:2005/04/12(火) 01:24:04
何とかして困りごとを作りたいみたいだが
インストールっつーてもWindowsUpdateなんだから説明も簡単だし、困ったことなんてないよ
57デフォルトの名無しさん:2005/04/12(火) 05:39:11
>>47
ImageListを使わない。

>>48
まあそう。
5836:2005/04/12(火) 12:05:31
うーん、やっぱり理解不能なのでおせーてくだされ~!
もしかしてそういうもんなのかもしれんしー

while( xmlReader.Read() ) ←ここにブレイクをはってF10で進んでみて
{
 if( xmlReader.NodeType == XmlNodeType.Element )
 {
  Console.WriteLine( xmlReader.LocalName );
  //Console.WriteLine( xmlReader.Value );
  Console.WriteLine( xmlReader.LocalName );
  //Console.WriteLine( xmlReader.Value );
  Console.WriteLine( xmlReader.LocalName );
  //Console.WriteLine( xmlReader.Value );
 }
}
xmlReader.Close();

で上記のとこでブレイクはってF10でステップオーバーで進んでいくと
値がおかしい~ブレイクはらないと正しい値がでます。

出力は
noteList
note
OpeExpr
ってでる~


5936:2005/04/12(火) 12:06:04
んで、よませたxmlはこれ

<sir version="2.0">
<Comp name="mydata" id="1" file="mydata.sc" line="0">
<noteList>
<note key="accesskey">
<OpeExpr id="9" ope="LIST">
<exprPtrList>
<Datastring id="10" string="Main"/>
<Dataint id="11" int="0"/>
<OpeExpr id="171" ope="LIST">
<exprPtrList>
<Datastring id="12" string="CGI"/>
<Dataint id="13" int="4"/>
</exprPtrList>
</OpeExpr>
</exprPtrList>
</OpeExpr>
</note>
</noteList>
</Comp>
</sir>
60デフォルトの名無しさん:2005/04/12(火) 12:29:14
>>44に一票入れてみるか。
61デフォルトの名無しさん:2005/04/12(火) 13:01:11
もしかしてウォッチに、ReadString()とかってはいってないか?w
62デフォルトの名無しさん:2005/04/12(火) 17:51:47
C#を勉強中疑問に思ったんですが、
MSDNだとArrayListの要素全てを書き出すときに、
IEnumratorオブジェクトを下のように使っているんですが、

System.Collections.IEnumerator myEnumerator = myList.GetEnumerator();
    while ( myEnumerator.MoveNext() )
Console.Write( "\t{0}", myEnumerator.Current );

for文つかってこんな感じで書くのは作法的によろしくないのですか?

for(int i= 0;i<myArray.Count;i++)
    Console.Write("\t{0}",myArray[i]);
63デフォルトの名無しさん:2005/04/12(火) 17:57:06
エレガントじゃない。
GetEnumeratorを自分で呼ぶのも。
foreachを使うのが基本。
でもforeachじゃ対応できないループも多いけどね。
6462:2005/04/12(火) 18:15:26
ではこんな風に書くのが一番いいんですね?
ありがとうございました。
foreach(Object o in numArray)
Console.Write("\t{0}",o.ToString());
65デフォルトの名無しさん:2005/04/12(火) 18:40:16
string pathで与えられたpathがフォルダなのかファイルなのか
スマートに判別するにはどうしたらいいですか?

DirectoryInfoにしてExists調べるとするとファイルのときに例外が発生してしまうので…

最終的にはフォルダならその中の全ファイルをリストアップする予定です。
66デフォルトの名無しさん:2005/04/12(火) 18:52:22
Directory.Exists/File.Existsメソッドとか。
67デフォルトの名無しさん:2005/04/12(火) 18:55:11
Existsで例外投げられるか?
6864:2005/04/12(火) 19:35:19
>>66さん
その方法でいけそうです。
DirectoryInfoにしなくても調べる方法があったんですね。
ありがとうございます。

>>67さん
DirectoryInfo di = new DirectoryInfo(str);
でstrがファイルの時例外投げられます。
69デフォルトの名無しさん:2005/04/12(火) 19:42:18
70デフォルトの名無しさん:2005/04/12(火) 19:56:15
s-jisのTextファイルを1行ずつ読み込みたいのですが、
File.OpenTextはutf-8でしか使えないようで困っています。
File.OpenReadつかってバイナリ形式として読むしかないのでしょうか?
71デフォルトの名無しさん:2005/04/12(火) 19:57:01
s-jisのTextファイルを1行ずつ読み込みたいのですが、
File.OpenTextはutf-8でしか使えないようで困っています。
File.OpenReadつかってバイナリ形式として読むしかないのでしょうか?
72デフォルトの名無しさん:2005/04/12(火) 20:00:55
素直にStreamReaderのコンストラクタ使え。
73デフォルトの名無しさん:2005/04/12(火) 20:05:18
StreamReaderのコンストラクタつかうんですね。
ちょっとMSDNよんできます。
ありがとうございました。
74デフォルトの名無しさん:2005/04/12(火) 23:02:27
抽象イベントを発生させるメソッドを書いたところ、
コンパイルエラーが出てしまいます。

原因のわかる方、ご教授ください。
ちなみに、C#Builder使ってます。System.dllのバージョンは1.0.5000.0

コードはこんな感じです。

protected override void raise_Lost(object sender, System.EventArgs e)
{
if(this.Lost != null) ←この行と
{ this.Lost(sender, e);} ←この行
}

public abstract event System.EventHandler Lost;

エラーメッセージはこんな感じ。

error CS0079: イベント 'DXComponents.DXFont.Lost' は += または -= の左側にのみ表示されます。

試しに書いてみた下のコードは、コンパイル通りました。
protected void OnTest(object sender , System.EventArgs e)
{
if(this.Test != null)
{ this.Test(sender, e);}
}

public event System.EventHandler Test;
75デフォルトの名無しさん:2005/04/12(火) 23:17:24
>>74
Buttonの派生クラスを書くときにさ、自分でthis.Click(this, EventArgs.Empty);とか呼んだりしないよね?
基底クラスのPerformClickメソッドとかあるよね?
76デフォルトの名無しさん:2005/04/12(火) 23:27:48
>>74
上の例と下の例が微妙に違ってて参考にならん。
あと、何行目でコンパイルエラーになってるのか示してくれ。
77デフォルトの名無しさん:2005/04/12(火) 23:44:19
contextmenu内に子メニューを2階層ほどつくりました。(親→子→子)
しかしどのmenuitem をクリックしても一回目では
一番上の親メニューが消えません。二回目のクリックでやっと全部消えます。
一回で消えるようにするにはどうしたらよいでしょうか?
78デフォルトの名無しさん:2005/04/12(火) 23:47:34
>>77
状況が掴めない。
どういうコードを書いたのかと併せてもう一度。
7977:2005/04/13(水) 00:05:14
単純化すると
フォームの中にbuttonが有りまして
button.ContextMenu = contextmenu1;
contextmenu1.MenuItems.AddRange(new MenuItem[] { menuitem1, menuitem2} );

(親)
menuitem1.Index = 0;
menuitem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {menuitem3, menuitem4});
menuitem2.Index = 1;
menuitem2.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {menuitem5, menuitem6});

(子)
menuitem3.Index = 0;
menuitem3.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {menuitem7, menuitem8});
menuitem4.Index = 1;
menuitem4.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {menuitem9, menuitem10});

menuitem5~6も同じように子(12~14)を作る

(孫)
menuitem7.Index = 0;
menuitem7.Text = "うんちゃら";
menuitem7.Click += new EventHandler(this.menuitem_Click);

んでmenuitem8~menuitem14も同じ

何か変なことしてるでしょうか? それぞれの最下層のメニューアイテムはきちんと動作してます。
フォーカスをよそに移しても駄目でした。よろしくお願いします。
80デフォルトの名無しさん:2005/04/13(水) 00:16:05
ドラッグされたファイルが画像がファイルかどうか判別する方法教えてください。

拡張子を見て =="jpeg"だとjpgとかJpeg jPegとかはじかれるし、
bmpとかgifも含めて対応しようとすると面倒臭すぎるので…

Bitmap bmp = new Bitmap(ドラッグされたファイル)
にして読めたら画像とかしかないんでしょうか?
8174:2005/04/13(水) 00:16:28
C#言語の仕様をよく読んだら書いてありました。

「イベントをフィールドのように使用するには、イベントがabstractまたはexternではないこと」(C#言語の仕様 10.7.1 より)
なんてこった…

それでもめげずに、10.7.2を呼んで書いてみたコードがこれ。

protected System.EventHandler GetTestEventHandler()
{return this.Test;}
protected void OnTest(object sender , System.EventArgs e)
{
 System.EventHandler handler = this.GetTestEventHandler();
 if(handler != null)
 { handler(sender, e);}
}
public event System.EventHandler Test;

コンパイルは見事通りました。

が、ここまでして抽象イベントにこだわるべきか、大いに疑問です。
82デフォルトの名無しさん:2005/04/13(水) 00:17:25
>>71
こんな感じでどぞ
System.IO.StreamReader sr = System.IO.File.OpenText( "ファイル名.txt" ) ;

System.IO.StreamReader sr = new System.IO.StreamReader( "ファイル名.txt" , System.Text.Encoding.GetEncoding( "Shift-JIS" ) ) ;
83デフォルトの名無しさん:2005/04/13(水) 00:25:46
>>80
あとはヘッダを頑張って解析するとか。

>>81
だからさ、基底クラスにイベントを実行するprotectedメソッドを作って、
派生クラスからはそれを呼ぶの。

>>82
.NETだと通るようだけど、Shift_JISはハイフンじゃなくてアンダースコアね。一応。
84デフォルトの名無しさん:2005/04/13(水) 00:28:18
>>81
へぇー、参考になります、ケッタイな仕様ですね。
85デフォルトの名無しさん:2005/04/13(水) 00:30:26
>>46
そのおかげで2003だけサービスパックが別なんだよね。
ちょっと微妙だと思った。
86デフォルトの名無しさん:2005/04/13(水) 00:50:37
>>83
すみません。>>81のコード、抽象イベントになってない。
抽象イベントにしたら、やっぱり通りませんでした。

>基底クラスで~
もちろん、そうしてます。
その、「基底クラスのprotectedメソッド内で、イベントを実行する」
というのが、出来ないわけです。

public abstract class TestClass{
 protected void OnTest(object sender , System.EventArgs e){
  if(this.Test != null)   ←この行と
  { this.Test(sender, e);} ←この行がエラー。
 }
 public abstract event System.EventHandler Test;
}
public class ChildClass : TestClass{
 public void CallTestEvent(){
  System.EventArgs e = new System.EventArgs();
  this.OnTest(this, e);
 }
 private System.EventHandler m_Test;
 public override event System.EventHandler Test{
  add{ this.m_Test += value;}
  remove{ this.m_Test -= value;}
 }
}


87デフォルトの名無しさん:2005/04/13(水) 00:53:54
>>86
今手元にコンパイラがないので実験できないのだけれど、もし
add remove 等を add ; remove ; とかやって中身を定義しないで置いたらどうなるのかちょっと興味。
88デフォルトの名無しさん:2005/04/13(水) 01:15:36
ううん、イベントをabstractにする必然性がイマイチ。
virtualで事足りるような気がしてならない。

>>87
add または remove アクセサは本体を必要です。
89デフォルトの名無しさん:2005/04/13(水) 01:20:24
interface にしたら避けられるかなと思ったけど、これもアウトだね。
9077:2005/04/13(水) 01:35:50
>>79
すんません、原因がわかりました。
button.ContextMenu = contextmenu1;
としておきながら
button.MouseUp += new MouseEventHandler(button_MouseUp);
→んでbutton_MouseUpでbutton.ContextMenu.Show
なんてやってましたorz
91デフォルトの名無しさん:2005/04/13(水) 01:47:02
C# 言語の仕様 10.7 イベント
読み込んで見ました、 event に対してのアクセサは += -= のみで() 演算子?
は、何も指定しないときのみ限定でコンパイラがコードを自働生成くれる例外なんだ
普段使っている常識的使い方が例外の方だったのか。
見事に知っているつもりだったです、うーむ深い、今日はeventのいい勉強になりますた。 >>74 のその他色々の人
92デフォルトの名無しさん:2005/04/13(水) 02:20:08
ttp://www.codeproject.com/csharp/csRemoteEvents1.asp?print=true
abstract eventのサンプルとしてはこんなのかなぁ。
抽象クラスからは+=, -=だけできるようにして実装は完全に派生クラス任せ。
抽象クラスはノータッチですか。インターフェイスと区別が付かないよこれじゃ。

>>91
なんか解釈が違うな。
eventはデリゲートフィールドの(一種の)プロパティだよ。
add/removeを使わないevent宣言は、privateなデリゲートのフィールドとpublicなadd_/remove_メソッドの宣言とほぼ等価。
宣言したクラス内では当然デリゲートインスタンスに対して自由に操作できる。実行だけじゃなくて代入(+=じゃない=)とかも。
宣言したクラスの外では公開されているadd_/remove_しかできない。
93デフォルトの名無しさん:2005/04/13(水) 07:41:37
「イベント」にできる操作はデリゲートの追加と削除だけ。
「イベントハンドラを保持しているデリゲート」に対しては何でもできる。

eventで直接イベント(+フィールド)定義すると、
定義したクラス内からは「イベントハンドラを保持するデリゲート」として見え、
その他のクラスからは「イベント」としてしか見えない。

自分でフィールド(デリゲートメンバ)を定義して、add、removeを書いた場合は、
それぞれ別のメンバとして定義しているんだから、それぞれの意味でアクセスできる。

・m_Testになら何でもできる(protectedにはする必要があるが)。
・Testはイベント名なので「イベント」としてしか見えない。
あたりまえの話。

でも普通は、親のOnTestを呼ぶとかのつくりにするだろ。
94デフォルトの名無しさん:2005/04/13(水) 09:52:02
まあほとんどの場合抽象イベントなんて不要と思うが。
9574:2005/04/13(水) 10:28:44
>>92
サンプル、助かりました。
確かに、抽象イベントを呼び出すメソッドがないですね。

>>93
詳しい解説、ありがとうございます。
こんな感じなら出来るってことでしょうか。

親クラス{
 protected abstract void OnTest(object sender, System.EventArgs e);
 protected abstract event System.Eventhandler Test;
}
子クラス{
 private event System.EventHandler m_Test;
 protected override void OnTest(object sender, System.EventArgs e)
 {m_Testに対してNullチェック+呼び出し}
 protected override event System.EventHandler Test
 {m_Testへのアクセサを定義}
}
>>93で紹介してもらったサンプルもそうですが、
インターフェースと同じような感じになってしまった…

>>94
そのとおりかもしれません。
もう一度、抽象イベントにする必要があるかどうか、よく検討してみます。

一応、GDNJapanの掲示板(アドバンスド.NET)にも質問
してみました。
興味がある方は、覗いてみてください。
96デフォルトの名無しさん:2005/04/13(水) 17:22:13
CLRについての質問なんですが、
デバッガ実装のためのデバッガプロトコル仕様は公開されていますか?
Javaで言うとJava Debug Wire Protocolに相当するような仕様です。
97デフォルトの名無しさん:2005/04/14(木) 06:46:20
>>96
まず、Java Debug Wire Protocolというのを説明してくれ、質問はそれからだ。
98デフォルトの名無しさん:2005/04/14(木) 10:16:27
>>80
正規表現を使ってみた。

using System.Text.RegularExpressions;

bool isImageFile(string extension)
{
  string pattern = @"^\.(jpe?g|bmp|gif)$";
  //IgnoreCase オプションは大文字・小文字を区別しない
  Regex reg = new Regex(pattern, RegexOptions.IgnoreCase);
  Match m = reg.Match(extension);
  if (m.Success) return true;
  else       return false;
}
99デフォルトの名無しさん:2005/04/14(木) 10:36:49
ファイル名でもパスでも拡張子でも
何でも食べてくれるようにすると更によい。
100デフォルトの名無しさん:2005/04/14(木) 12:05:37
>>98
98ではないが…

static readonly Regex regex = new Regex(@"\.(jpg|jpeg|bmp|gif|png)$",
 RegexOptions.IgnoreCase | RegexOptions.Compiled);
bool IsImageFile(string path) {
 return regex.IsMatch(path);
}

拡張子部分は適当にしてくれ
101デフォルトの名無しさん:2005/04/14(木) 14:20:52
>>96
.NET SDKのTool Developers Guide\docsフォルダにDebugRef.docという中途半端なドキュが入ってる。
10296:2005/04/14(木) 21:08:58
>>101
こんな身近な所に求めていた資料があったとは気づきませんでした。
ども、ありがとうございます。
103デフォルトの名無しさん:2005/04/14(木) 22:00:22
ArrayListに自作クラスFooを格納しているのですが
ArrayListをシリアライズ/デシリアライズするには
どうすればいいのかしら?
104デフォルトの名無しさん:2005/04/14(木) 22:03:22
XmlSerializer?
new XmlSerializer(typeof(ArrayList), new Type[]{typeof(Foo)});
105デフォルトの名無しさん:2005/04/14(木) 22:26:30
2002を使っているんでXmlSerializerが使えません
106デフォルトの名無しさん:2005/04/14(木) 22:28:53
使えるってばよ。
宇宙仮面に騙されたか?
107デフォルトの名無しさん:2005/04/14(木) 22:52:49
>>103
[Serializable]
public class Fool : System.Runtime.Serialization.ISerializable
{
publicDateTimehoge1 ;
publicdoublehoge2 ;

Fool( System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context )
{
hoge1 = (DateTime)info.GetValue( "hoge1" , typeof( DateTime ) ) ;
hoge2 = (double)info.GetValue( "hoge2" , typeof( double ) ) ;
}
void System.Runtime.Serialization.ISerializable.GetObjectData( System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context )
{
info.AddValue( "hoge1" , hoge1 , typeof( DateTime ) ) ;
info.AddValue( "hoge2" , hoge2 , typeof( double ) ) ;
}
}


これに対して
IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter() ;
もしくは
IFormatter formatter = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter() ;
System.IO.FileStream stream = new System.IO.FileStream( "ファイル名とか" , System.IO.FileMode.Create )
ArrayListlist = 適当に Fool をいれる
formatter.Serialize( stream , list ) ;
とします。

デシリアイズは formatter.Deserialize があります。
108デフォルトの名無しさん:2005/04/14(木) 22:54:36
しまった、タブがペッチャンコ
タブの位置は推定してくらはい
109デフォルトの名無しさん:2005/04/14(木) 23:03:01
DataSetがよくわからないんだが、どこかお勧めを推薦してくれ
110デフォルトの名無しさん:2005/04/14(木) 23:08:21
>>107
Serializable属性付けとけばISerialize実装しなくてもOKな場合も多いけどねー。

>>109
よくわからないと言うほど機能ないし。
111デフォルトの名無しさん:2005/04/14(木) 23:14:13
今作ってるのではSerializable属性無くてもシリアル化できた。
112デフォルトの名無しさん:2005/04/15(金) 01:40:47
VC#で作ったアプリってやたらメモリ食いませんか?

先日、測定器からのデータを解析等の処理をするものを
書いたのですが,10MB程度食っちゃって、
Excelよりメモリ使うんだねプゲラ
なんて言われちゃいました。

アルゴリズムの実装の仕方が下手だからですかね?
113デフォルトの名無しさん:2005/04/15(金) 01:52:48
.NETの起動に食われる。
起動後は関係なくなるので、タスクマネージャのメモリ使用量はあんまり意味をなさなくなる。

ということを今まで何度書いただろう。
114デフォルトの名無しさん:2005/04/15(金) 01:55:47
どこかにC#に関するFAQがまとめて書いてるサイトでもありゃいいんだがな。
115デフォルトの名無しさん:2005/04/15(金) 02:14:27
.NETの起動?
どこかで聞きかじったんですかhw
116デフォルトの名無しさん:2005/04/15(金) 02:40:26
>>112
How much memory does my .NET application use? Explaining the Task Manager figure versus Private Bytes in performance monitor.
http://www.itwriting.com/dotnetmem.php
117デフォルトの名無しさん:2005/04/15(金) 06:35:07
XmlSerializerでシリアライズするときに
インタフェースの明示的な実装を使っているとできないようなのですがそういうものなのでしょうか?

コード例
public class StringArray : IList{
    ArrayList _innerArray = new ArrayList();
    [XmlArray("Items")][XmlArrayItem("Item",typeof(string))]
    public ArrayList InnerArray{
        get{return _innerArray;}
        set{_innerArray = value;}
    }
    #region IListのスタブ形成 < :IListでTabキーを押してスタブ生成
    //スタブを一部削ってインタフェースの明示的な実装を使ってみる
    int IList.Add(object value){
    return Add((string) value);
    }
    public int Add(string value){
    return _innerArray.Add(value);
    }
    
    //実行時にIListにはAdd(System.Object)が実装されていなければならない
    //とのランタイムエラーがでる。
    public void Serialize(string filename){
    ... XmlSerializerでシリアライズ
    }
}
明示的な実装を使わないと普通にシリアライズできるのですが・・
118デフォルトの名無しさん:2005/04/15(金) 12:15:45
>>112
多分煽りかとは思うが、メモリーの消費量が大きいのは、生成した大半のオブジェクトを参照にしてしまうタイプのOOPでは仕方がない、
Javaなどでもメモリー消費量の激しさは、C#と同様だ。
嫌ならC++でも使ってろって事。
119デフォルトの名無しさん:2005/04/15(金) 12:26:29
最小化すればよろしい
120デフォルトの名無しさん:2005/04/15(金) 14:58:38
OleDbConnectionで、Accessのmdbにアクセスするソフトをつくっているのだけど、
これって、AccessがインストールされてないPCでも動くの?
121デフォルトの名無しさん:2005/04/15(金) 15:05:19
>>120
はい、MDACさえあれば。
122デフォルトの名無しさん:2005/04/15(金) 17:27:58
>>121
最近のMDACにはJetが含まれていないんじゃあないでしょうか
ttp://support.microsoft.com/default.aspx?kbid=271908
123デフォルトの名無しさん:2005/04/15(金) 18:29:26
http://www.hotfix.jp/archives/alert/2004/ms04-014.html
jetの脆弱性の影響を受けるソフトウエアにOSが書かれてるってことは、
Jetは最初からOSに含まれてるのかな?
124デフォルトの名無しさん:2005/04/15(金) 21:12:20
HttpWebRequest/HttpWebResponseを使ってインターネット上のリソースを取得しようとしています。
HttpWebResponse.GetResponseStreamで得たStreamに対してReadを使うとブロックしますが,これにタイムアウトを設けることは出来ないでしょうか?
125デフォルトの名無しさん:2005/04/15(金) 21:21:11
BeginReadして、返値のIAsyncResultで.WaitHandle.WaitOne
シグナルを受け取れなかったら強制的にClose
126124:2005/04/15(金) 21:26:46
>>125
う゛,こんなメソッドが。気付きませんでした。
早速試してみます。ありがとうございました。
127デフォルトの名無しさん:2005/04/15(金) 21:33:37
念のためにヘルプを読み返したら、IAsyncResultの待機用オブジェクトのプロパティ名はAsyncWaitHandleだった。
128124:2005/04/15(金) 21:54:50
>>127
そのようですね。
レス頂いた後BeginReadについて調べ,IAsyncResult.AsyncWaitHandle.WaitOnceを使って
書き直したところ期待したとおりの結果を得ることが出来ました。
とても助かりました。
参考までに下に訂正後のサンプルを示します。
(System.Net.WebExceptionを投げるのは良くないのかもしれませんが)

IAsyncResult ar = res_stream.BeginRead(recv, 0, recv.Length, null, res);
if (!ar.AsyncWaitHandle.WaitOne(15000, false)) // 15sec
  throw new System.Net.WebException("読み取りがタイムアウトしました");
int rbytes = res_stream.EndRead(ar);
ただしここでrecvはByte[],resはHttpWebResponse,res_streamはStream
129デフォルトの名無しさん:2005/04/15(金) 22:00:44
C#で常駐アプリを作る方法はWin32APIのShell_NotifyIconを使うしかない?
VS.NETで簡単に作れないかなぁ~
130デフォルトの名無しさん:2005/04/15(金) 22:01:42
NotifyIconクラス
131デフォルトの名無しさん:2005/04/15(金) 22:12:13
>>129みたいのはMSDNで検索しないんだろうか。
132デフォルトの名無しさん:2005/04/15(金) 22:53:59
Cで書かれたライブラリ(DLL)をC#で呼び出しています。
[DllImport("xxx.dll")] static extern IntPtr externMethod(string[] args);
VisualStudio2003でデバッグ実行をすると普通に実行できるのですが、
できたexeを実行するとNullReferenceExceptionが上がってしまいます。
なにが問題なのか心当たりのある方はいないでしょうか?
133デフォルトの名無しさん:2005/04/15(金) 22:55:10
path?
134デフォルトの名無しさん:2005/04/15(金) 23:09:49
実行ファイルの隣にそのCのDLLを置いてあるため
pathの問題ではないと思います。
デバッグ実行すると実行できて、デバッグなしで実行だとエラーが起こるのが不可解でして。。うーん
135デフォルトの名無しさん:2005/04/15(金) 23:22:59
>>134
そういうのは大抵メモリアクセス違反してる。
136デフォルトの名無しさん:2005/04/15(金) 23:53:00
string[] args が原因のような希ガス
137デフォルトの名無しさん:2005/04/16(土) 00:05:18
MainFormクラスにすべて処理をすべて書いて
MainFormクラスが1800行ってなんすか?

これだからVB系のポトペタ環境はIYAなんだよね
138デフォルトの名無しさん:2005/04/16(土) 00:22:11
「すべて処理をすべて書」かなきゃ良いだけの話だろ。
これだから馬鹿は嫌なんだよね。
139デフォルトの名無しさん:2005/04/16(土) 00:26:43
うん?
道具を使いこなせないやつが道具が悪いと逆ギレてるって話?
140デフォルトの名無しさん:2005/04/16(土) 00:27:31
しらねーよ
おまいみたい腐れ部下なんだからhw
141デフォルトの名無しさん:2005/04/16(土) 01:36:37
10000件データをDataGridに格納し表示する場合(WindowApp)
データをもっとも早くメモリ上に構築でき、表示できる方法は以下のどれでしょうか?
1:DataTableにDataRowをAddする
2:DataTableにLoadDataRowする
3:DataTableなんてそもそも作らないで、DataSetにCSV形式のファイルを食わす
4:DataTableなんてそもそも作らないでXmlDataを食わす
これのうちもっとも最速な呼び出しはどれなのでしょうか?それとも上記以外で
で最速の方法があるのでしょうか?
142デフォルトの名無しさん:2005/04/16(土) 01:47:17
DataGridより高速に格納し表示する新たにコントールを書く
143デフォルトの名無しさん:2005/04/16(土) 13:22:41
コントールってなんですか?
144デフォルトの名無しさん:2005/04/16(土) 13:55:24
音の響きからして東欧的なものだな。間違いない。
145デフォルトの名無しさん:2005/04/16(土) 15:31:59
>>143
集合論の創始者だぞ。知らんのか?
146デフォルトの名無しさん:2005/04/16(土) 15:38:21
147デフォルトの名無しさん:2005/04/16(土) 15:41:54
おまえらADO.NET詳しくないならそう言ってやれよ
148デフォルトの名無しさん:2005/04/16(土) 16:01:19
各方式を比較したがいまいち満足いかないので他にありますかという
質問なら助言しても良いなと思った
149デフォルトの名無しさん:2005/04/16(土) 19:19:19
>>145
カントール(Georg Cantor)だと突っ込んで欲しいのか?
150IKeJI:2005/04/17(日) 12:17:28
クラスA,B,Cを次のように定義して、

public class A
{
[XmlArrayItem(typeof(C))]
public B [] Ba = new B[10];
}

public interface B
{
int a();
}
   
public class C:B
{
public int a()
{
return 0;
}
}

次のコードを実行すると、

XmlSerializer sl = new XmlSerializer(typeof(A));

次のようなエラーが出るのですが、

'System.InvalidOperationException' のハンドルされていない例外が system.xml.dll で発生しました。
追加情報 : 型 'A' を反映中にエラーが発生しました。

回避方法はありませんか?
VS2003
151デフォルトの名無しさん:2005/04/17(日) 12:53:58
> XmlArrayItemAttribute クラス
> メモ インターフェイスまたはインターフェイスの配列を返す
>    フィールドまたはプロパティのシリアル化は、サポートされていません。

抽象クラスにする、XmlSerializerは諦めてSoapFormatterとか使う、自前でシリアライズ処理をガリガリ書く……。
152デフォルトの名無しさん:2005/04/17(日) 15:07:00
axWebBrowserについて質問があります。

sleipnirなどのブラウザには検索ハイライト機能がついていて、
指定したキーワードの背景を黄色などにして目立つようにしていますが、
つまりはブラウザのHTMLを書き換えているということですよね?

それをaxWebBrowserでやるにはどうしたらよいのでしょうか?
axWebBrowserの何をreplaceしてやればよいのですか?
153VCVSVC#:2005/04/17(日) 15:11:18
マジ質問です。
趣味でC#を始めまして、言語レベルは概ね習得できたのですが
アプリケーションの書き方について質問。

FormにペタペタとPictureBoxやらTextBoxやらLabelやらを貼ってるんだけど
こうするとFormクラスがデカクなっちゃいますよね

VC++のときみたくDoc/View構造の良いサンプル無いですかね?
154デフォルトの名無しさん:2005/04/17(日) 15:19:58
でかくても気にするな、IDEが勝手にやることだし・・・
155デフォルトの名無しさん:2005/04/17(日) 15:25:20
たしかにDDXに相当する仕組みがないんだよなあ
delegateとか使えばイイというのはわかるんだが
156VCVSVC#:2005/04/17(日) 15:29:27
でかいって表現がよろしくなかったです。

Formクラスのコードの量です。

VC++の時はControllerとViewを CVeiwの派生クラスに書いて
ModelはCDocumentクラスの派生クラスに書いて分離できて
スマートだったんですけど、VC#は自前でMVCを実装するのなら
面倒だなと思っています。

簡単な決め打ち的なMVCなら書けるんですけど・・・
157デフォルトの名無しさん:2005/04/17(日) 15:34:04
俺は最近はMVCやめて、ユーザーコントロールに対してペタペタ貼り付けて機能をまとめて、それをFormに貼り付ける方法をとってる。
この方が分離がいいので。
158デフォルトの名無しさん:2005/04/17(日) 15:35:55
あと、これでやると最後に貼り付けたコントロールが突然消えてなくなる謎のバグも被害が小さくてすむのでいいです。
159デフォルトの名無しさん:2005/04/17(日) 16:16:15
<<157はアスペクト指向を知らないようだが
経験で解ってるんだろうな。
160IKeJI:2005/04/17(日) 17:25:36
>>151
thx 抽象クラスにしてみるわ。
161デフォルトの名無しさん:2005/04/17(日) 17:59:57
>>152
書き換えたHTMLを表示すればいいんじゃね?
それかDOMつかってしこしこすればいいんじゃね?
162デフォルトの名無しさん:2005/04/17(日) 18:02:05
Doc/Viewアーキテクチャってそんなに流行ってたの?
163デフォルトの名無しさん:2005/04/17(日) 19:01:44
>>162
C#からから始めた新参者丸出しプゲラ
164デフォルトの名無しさん:2005/04/17(日) 19:39:52
162じゃないけど、教えてください。
DocumentViewアーキテクチャを使って~というのはヒットするのですが
DocumentViewアーキテクチャ自身についての解説は見当たらないです。
C#・Javaから始めた新参者なんでお願いします。
165デフォルトの名無しさん:2005/04/17(日) 19:39:59
C#には、MD5クラスとかありますけど
ファイルデータのMD5ハッシュ取得は
自前でやるべきなのでしょうか?

それとも、うまい既存使い方があるのでしょうか?
166デフォルトの名無しさん:2005/04/17(日) 19:41:44
MSDNを100000億回読め
167デフォルトの名無しさん:2005/04/17(日) 19:49:39
Docment/View というよりMVCについて調べたほうがよいかと
168デフォルトの名無しさん:2005/04/17(日) 20:50:38
すいません。
LAN内部のすべてのマシンのIPアドレスを取得したいのですが、どうやってやればいいのかいまいち検討がつきません。
すべてのIPアドレスにpingを送って帰ってきたものを今稼動しているマシン、としようとしたのですが、
とても現実的ではないと思いまして・・・。

よろしくお願いします。
169デフォルトの名無しさん:2005/04/17(日) 22:10:00
>>165
using System;
using System.IO;
using System.Security.Cryptography;

class MainApp {
    public static void Main(string[] args) {
        if (args.Length != 1) {
            Console.WriteLine("引数は1個");
            return;
        }
        MD5 md5 = new MD5CryptoServiceProvider();
        byte[] result = md5.ComputeHash(new FileStream(args[0], FileMode.Open));
        foreach (byte i in result) {
            Console.Write("{0,2:X2}", i);
        }
        Console.WriteLine();
    }
}
170デフォルトの名無しさん:2005/04/17(日) 23:34:12
>>161
ということは、いちどローカルに書き出して置換し
それを表示するということですか?

DOMはよくわからない……
171デフォルトの名無しさん:2005/04/18(月) 05:59:28
>>169
これを参考に、TransformBlock、TransformFinalBlockで
進捗ゲージ表示もできそうですね

ありがとうございました
172デフォルトの名無しさん:2005/04/18(月) 14:13:49
>>169
> Console.Write("{0,2:X2}", i);

こういう書式のサンプル集みたいのってありますかね?
MSDN見てもいまいちわからなかった。
173デフォルトの名無しさん:2005/04/18(月) 14:20:30
>>172
緑のバイク
それでわからなかったら自分でMSDNの記述を片端から試していけ。
174デフォルトの名無しさん:2005/04/18(月) 15:30:56
void ListViewSelectedIndexChanged(object sender, System.EventArgs e)
{
  textBox.Text = listView.SelectedItems[0].Text;
}

ListViewにある項目が選択されたらその項目のTextを表示するんだが、
1回目はきちんと表示されても、2回目からはエラーが出る。
ただ、tryの中に入れてcatchには何も書かなければエラーは出ずちゃんと動くんだが。
これでいいんだろうか。
175デフォルトの名無しさん:2005/04/18(月) 15:34:36
例外の内容は無視かよ。
176デフォルトの名無しさん:2005/04/18(月) 15:37:06
>>174
catchしてメッセージをMessageBoxにでも投げて確認しとけ
177デフォルトの名無しさん:2005/04/18(月) 15:40:52
tryするだけワラタ
178デフォルトの名無しさん:2005/04/18(月) 15:43:09
「もしもし、エラーですよ」
「ええ、お構いなく」
179デフォルトの名無しさん:2005/04/18(月) 17:52:06
Specified argument was out of the range of valid values. Parameter name: index
範囲外って言われても私が指定ミスしてるんじゃないんだから。
あーあ、やっぱりわからないからcatchで無視しとこ。
180デフォルトの名無しさん:2005/04/18(月) 17:58:06
ふふっ。これでできちゃいました。私ってやっぱり天才

if(listSafeView.SelectedItems.Count == 1){
  textSafeInput.Text = listSafeView.SelectedItems[0].Text;
}
181169:2005/04/18(月) 18:47:05
>>172
MSDNライブラリ(ローカルのやつ)で探しました。普段C#を全く
触らないもんで。
182デフォルトの名無しさん:2005/04/18(月) 21:18:59
>範囲外って言われても私が指定ミスしてるんじゃないんだから

183デフォルトの名無しさん:2005/04/18(月) 23:11:28
こうして負の遺産は増えていく
184デフォルトの名無しさん:2005/04/19(火) 01:32:12
.NETアプリを作る場合C#よりC++を使うことのメリットってあるんですか?
すなおにC#を使ったほうが楽そうですけど・・・
なぜにC++プロジェクトのWindowsフォームアプリケーションなんてあるんだ? > 2003
185デフォルトの名無しさん:2005/04/19(火) 01:49:09
Win32 API のスレに書くべきかもしれないけど、C# だからここに書かせてね
--------------
using System;
using System.Text;
using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
 class Class1
 {
  [DllImport("kernel32.dll", SetLastError = true)]
  static extern bool GetVolumePathNameW(
   string lpszFileName,
   out StringBuilder lpszVolumePathName,
   uint cchBufferLength);
  
  // GetErrorMessage formats and returns an error message corresponding to the input errorCode.
  public unsafe static string GetErrorMessage(int errorCode)
  {
   // 略。
   // FormatMessage() Win32 API を呼び出すだけ。
  }
  
続く
186デフォルトの名無しさん:2005/04/19(火) 01:52:33
>>184
・C#言語を覚える必要が無い
・STLが使える
187185:2005/04/19(火) 01:55:58
  /// <summary>アプリケーションのメイン エントリ ポイントです。</summary>
  [STAThread]
  static void Main()
  {
   string path = @"C:\ddrive\Tools";
   
   StringBuilder volumePathName;
   bool GetVolumePathName_success = GetVolumePathNameW(path, out volumePathName, 1024);
   
   Console.Write(path + " → ");
   Console.WriteLine(
    GetVolumePathName_success ? volumePathName.ToString() :
                  ("Failed : " + GetErrorMessage(Marshal.GetLastWin32Error()))
   );
  }
 }
}
--------------
というコードで、ボリュームがマウントされているパスを取得しようとしました。
期待している答えは "c:\ddrive" なのですが、GetVolumePathNameW が、"|:" としか返してこなくて困ってます。
volumePathName の渡し方を StringBuilder じゃなくて string にしたり、out にしたり ref にしたりしたけど変わりません。

どこらへんがおかしいか、教えてください。

環境 : WinXP Pro sp2 + IE6 sp2 + VisualStudio2003 professional
C:\ddrive に D: をマウントしています。
188185:2005/04/19(火) 03:00:42
自己解決しました。

まず、StringBuilder の渡し方は out でも ref でもなく、そのまま渡せばよかったです。

これをクリアしても、まだ望む答えが出てこなかったのだけど、これはCharSet をちゃんと指定してあげると解決しますた。


  [DllImport("kernel32.dll", SetLastError = true, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
  private static extern bool GetVolumePathNameW(
   string lpszFileName,
   StringBuilder lpszVolumePathName,
   uint cchBufferLength);

というわけで、GetVolumePathName の記述は↑のようになりますた。
189デフォルトの名無しさん:2005/04/19(火) 13:05:28
.net frameworkコンポーネントにWebブラウザが無いなんてJavaSwing以下だな。。。
190デフォルトの名無しさん:2005/04/19(火) 13:12:20
そうですね
191デフォルトの名無しさん:2005/04/19(火) 15:28:52
C#とはあまり関係ないんですけれど、ノータッチデブロイメントが置ける良い無料サーバー知っている人いませんか?
WebMatrixHosting( http://europe.webmatrixhosting.net/japan/ )は色々できて便利なのですが、どうもトラブルが多くて……
192デフォルトの名無しさん:2005/04/19(火) 19:08:32
なければ自作。これ基本。
193デフォルトの名無しさん:2005/04/19(火) 20:27:05
ノータッチデブロイメントならどこでも置けるような…
194デフォルトの名無しさん:2005/04/19(火) 20:31:42
>>193
チルドが含まれるurlのところはだめみたいです。apache系のところは全滅ですよ。
ttp://hogehoge.orz/~xxxx/ndp.exe とか
195デフォルトの名無しさん:2005/04/19(火) 20:35:17
宇宙仮面さんのところはできてるから・・・
infoseekはOK?
196デフォルトの名無しさん:2005/04/19(火) 21:01:42
719 名前:710[sage] 投稿日:05/01/15(土) 17:49:46
ノータッチデプロイメントのexeをチルド付のurlに配置するとIE6.0(NT2000, XP SP2)
から起動しません。エラーも出ずに無反応です。これは一般的な現象なのでしょうか。
 ttp://hogehoge/~xxxx/ntd.exe
ちなみに ttp://hogehoge/%7exxxx/ntd.exeだとieexecがエラーを出します
Firefoxからだと素直にダウンロードできます。
何かご存知のかたいらっしゃいましたら情報ください。.NETは1.1です。

721 名前:デフォルトの名無しさん[sage] 投稿日:05/01/15(土) 19:46:32
>>719
~はgoogleの検索ワードに使えないんで調べにくい事甚だしいが、
ttp://www.janis.or.jp/users/segabito/dotNetManual.html
によると仕様のようだな。
//.NET2.0ベータでも変わらずだな……。

722 名前:710[sage] 投稿日:05/01/15(土) 20:33:17
>>721
情報ありがとう。仕様という名の放置バグみたいですね、悲しい。
面白いことに ieexec ttp://hogehoge/~xxxx/ntd.exe とコマンドラインから
いれると起動しました。IE側の問題みたいです。

723 名前:デフォルトの名無しさん[sage] 投稿日:05/01/15(土) 20:44:10
ティルダはURIに使える文字だったっけ?

726 名前:デフォルトの名無しさん[sage] 投稿日:05/01/15(土) 22:33:22
>>723-724
should not のようです
ttp://www.cs.tut.fi/~jkorpela/tilde.html
197名無しさん@編集中:2005/04/19(火) 22:10:38
C♯の本で良本ないですか。大きい本屋がない田舎なもので
ネット通販で買いたいけど、実物見ないで買うので不安です。
数冊教えてくれると助かります。
198デフォルトの名無しさん:2005/04/19(火) 22:23:31
あるFormを外のクラスからストライプ表示させるように操作することってできますか?
static void Blind(Form form);みたいにして実装はしたいのですが
パワーポイントのブラインド効果のように
199デフォルトの名無しさん:2005/04/19(火) 22:28:49
>>194-196
動かない原因は、チルダだったのかこりゃ参ったね……
何とか避ける方法は無いもんですかね。

>>197
すでにある程度言語をやっているなら、マイクロソフト公式解説書が一番いいです
アマゾン辺りで評判いいのを適当にチョイスしてみたらよいかと。

もしプログラムからして初心者であればこれ、
http://www.amazon.co.jp/exec/obidos/ASIN/4797319747/qid=1113917011/sr=1-11/ref=sr_1_2_11/250-4487350-7254617
もはやプログラムの本とは思えないほどの内容になってます。
gccとかからの移行組みの人ならIDEの使い方をしらない場合もいいかもしれない、IDEを知るためのクイックスタートになります。
上記系の本とセットで読めば早いです。
200デフォルトの名無しさん:2005/04/19(火) 22:33:24
>>198
ストライプ表示やらパワーポイントのブラインド効果やら言われても良くわからん。
Googleで「パワーポイント ブラインド効果」の検索結果0件だし。
201デフォルトの名無しさん:2005/04/20(水) 00:30:23
>>198
スプラッシュウインドウ?ってだけではなさそうだけど、
オーナードローでできるんじゃないの?
202デフォルトの名無しさん:2005/04/20(水) 01:16:35
レスありがとうございます。
PowerPoint のアニメーションで開始にカテゴライズされているブラインドアニメーション
って、わかりませんよね。
オーナードローじゃなくて外からユーティリティ関数で定義できたらいいなーと思ってみました。
例えば、Formがラスタするとか、風化してさらさらーと消えるとか。
やっぱり、できるのはフェードイン・アウトくらいなのかな
203デフォルトの名無しさん:2005/04/20(水) 01:23:19
DirectX使うとか
ウィンドウのスナップショットとって後は好きにいじれば
204デフォルトの名無しさん:2005/04/20(水) 01:31:06
Regionプロパティを変化させてけばできないか?
205デフォルトの名無しさん:2005/04/20(水) 23:45:33
WebServiceでサーバ側にファイルを書き込みたいのですが
File.CreateFile("text.txt");が成功しません。どのようにしたらよいでしょうか?
206デフォルトの名無しさん:2005/04/20(水) 23:53:36
それだけじゃコメントしようもない。
207デフォルトの名無しさん:2005/04/20(水) 23:55:21
それだけじゃコメントできないような人には聞いていません
黙っててください
208デフォルトの名無しさん:2005/04/21(木) 00:06:44
うほ・・ あおりはやめてください・・
例えばこんな感じで
[WebMethod]
public void Upload(string title, byte[] bytes){
File.CreateFile(title).Write(bytes, 0, bytes.Length);
}
サーバー側にファイル作るのどうするのかな。と
209デフォルトの名無しさん:2005/04/21(木) 01:25:02
CreateFile?

成功しません、ってことは何らかの例外なりエラーメッセージがあると思うんだが、それさえもないのだろうか。
210デフォルトの名無しさん:2005/04/21(木) 01:25:36
>>206
207じゃないが、いままでもずっと見てきていて、いい加減腹がたってくるんだよ、答えなくていいから死ね
お前だろ延々とそんな回答にもヒントにもならないクソレス解し続ける蛸は
211デフォルトの名無しさん:2005/04/21(木) 01:40:50
basp使え。
212デフォルトの名無しさん:2005/04/21(木) 02:48:31
yada
213デフォルトの名無しさん:2005/04/21(木) 03:01:40
MLで
http://www.geocities.jp/ysigle/Peline/Peline.html
こんなん公表してる馬鹿がいました。

恥ずかしくないんですかねw
214 ◆kbky6C6xjY :2005/04/21(木) 03:24:04
>>205
ACL(アクセス制御リスト)じゃないっすか?
ファイル作成するフォルダのプロパティ→セキュリティで
ASPNET(IIS 5)とかNETWORKSERVICE(IIS 6)やら、
あるいはweb.config使って偽装(Impersonate)してれば
そのアカウントに書き込み権限つける、とか。
215デフォルトの名無しさん:2005/04/21(木) 07:58:38
>>213
保有H画像は50万枚・・・・漢だなw
216デフォルトの名無しさん:2005/04/21(木) 08:45:31
>>213
実に男らしい。
でもサイトの配色が微妙なので減点
217デフォルトの名無しさん:2005/04/21(木) 12:04:02
C# で C++ の std::multimap に相当するクラスは無いですか?

フリーソフトの undup みたいなもん作ってるのですが
テーブルにファイルを登録するときに、そのファイルのファイルサイズと同じサイズのファイルの集合を得て、
その中から同じファイルを探すと言うことをしたいです。

今は、Hashtable[filesize] でArrayList を得てるけど、スマートじゃないなーと思うのです。
218デフォルトの名無しさん:2005/04/21(木) 12:23:18
>>217
基本的にはそんなもの。
NameObjectCollectionBaseの派生クラスを自分で書く手もあるけれど、
けっこうなコード量が必要で、キーにはstringしか使えない難点もある。
219デフォルトの名無しさん:2005/04/21(木) 13:07:56
コンテナ関係はもっと整備されないと厳しいね、それもジェネリックス実装後でないとライブラリが歪んでしまう。
220デフォルトの名無しさん:2005/04/21(木) 20:11:18
.NET2.0にはNameValueCollectionのGenerics版が無いんだよねー。
221デフォルトの名無しさん:2005/04/21(木) 20:39:54
>>217
DataSetに突っ込こんだら?
222デフォルトの名無しさん:2005/04/21(木) 20:57:31
OpenFileDialog.FileNameで取得したパスをTextBoxに入れて、
その値を書き出そうとしたのですが、出力されないのです・・・

こんな感じでテストしたんですが・・・
StreamWriter sw = File.CreateText(text);
sw.Write("{0}", textBox.Text);
sw.Close();

エンコーディングの問題?
特殊文字?
セキュリティ?
TextBoxにパスをDialogから読み込んだ後だと、
その後に設定したテキストも出力できず。
どなたか原因のわかる方いらっしゃりませんか?
223デフォルトの名無しさん:2005/04/21(木) 21:02:21
例外は投げられてないんだね?
サイズ0のファイルは作られてる?
あとOpenFileDialogは普通既存ファイルを指定するのに使うわけだけど、CreateTextしちゃっていいの?
224デフォルトの名無しさん:2005/04/21(木) 21:19:35
>>223
説明の仕方がまずかったのかもしれません。すみません。
Dialogで取得したパスをtextファイルへ書き込もうとすると、
IOException、ObjectDisposedException、NotSupportedExceptionとも、
Messageもはかず・・・サイズ0のファイルも作られていないようでして・・・
225デフォルトの名無しさん:2005/04/21(木) 21:36:41
いや本当に説明の仕方がまずいよ。
結局例外は投げられてるの?
226デフォルトの名無しさん:2005/04/21(木) 21:39:53
>>225
例外は投げられていないようなんですが・・・
227デフォルトの名無しさん:2005/04/21(木) 21:41:41
ところで、

>OpenFileDialog.FileNameで取得したパスをTextBoxに入れて、 
>その値を書き出そうとしたのですが、出力されないのです・・・ 

>こんな感じでテストしたんですが・・・ 
>StreamWriter sw = File.CreateText(text); 
                         ↑

FileName = ファイルパスを TextBox に入れた後、いつ "text" に入れているの?
228227:2005/04/21(木) 21:44:15
あ~……

とりあえず、OpenFileDialog で選択したファイルパスを、別なファイルに書き出すという動作で OK?
ってことは、なんとなく OpenFileDialog で選択したファイルのあるフォルダに、書き出し先のファイルがあるような気がする。
229デフォルトの名無しさん:2005/04/21(木) 21:48:27
>>228
あーーーー
ありました。。。。。かなり凹みました。

なるほど、カレントディレクトリが・・・・はぁ~
すみません。ご迷惑をおかけしました。
230205:2005/04/21(木) 22:47:08
ACLですか、まだよくわからないですが調べてきます。ありがとうございました。
プログラミングASP.NET
― ASP.NETによるWebアプリケーション実践開発講座 ―
http://www.atmarkit.co.jp/fdotnet/aspnet/aspnet17/aspnet17_03.html
231 ◆kbky6C6xjY :2005/04/21(木) 23:52:25
>>230
 どういたしまして。
詳しいのがあった。「ファイル リソースの使用」の項ね:

「ASP.NET でのプロセス ID とリクエスト ID」
http://www.microsoft.com/japan/msdn/netframework/upgrade/aspnet_account_readme.asp
232デフォルトの名無しさん:2005/04/22(金) 09:52:39
>>229
外野からすまんが、謝るよりまず先にお礼言えよ
233デフォルトの名無しさん:2005/04/22(金) 12:11:17
>>232
ただ、ただ、情けなくて・・・

>>228
改めて、ありがとうございました。
234デフォルトの名無しさん:2005/04/22(金) 13:24:57
特定のファイルを実行したり終了させたりしたいんですが
実行は
System.Diagnostics.Process.Start
で出来たんですが
System.Diagnostics.Process.Startで実行したファイルを
終了させるにはどの関数使えていいのでしょうか?
235デフォルトの名無しさん:2005/04/22(金) 14:05:23
Processインスタンスをnew。
StartInfoのFileNameに実行したいファイルを代入。
Startメソッドで起動。
CloseMainWindowメソッド/Killメソッドで終了。
236デフォルトの名無しさん:2005/04/22(金) 15:01:01
ちょっと子ノードの数とかを知りたいので
XmlTextReaderで読んだときに
string strXml = xmlReader.ReadOuterXml();
で取得し、
byte[] bySource = Encoding.Unicode.GetBytes( strXml );
MemoryStream ms = new MemoryStream()
ms.Write( bySource, 0, bySource.Length );
XPathDocument myXPathDoc = new XPathDocument( ms);
ってやってるんだけど、
XPathDocument myXPathDoc = new XPathDocument( ms);で
Exceptionはいてしまう。。。なんでー;;

最初からXPathDocument つかってよみこみたいんだけど
150MBぐらいのXmlだと落ちちゃう(速度おそい)のでXmlTextReaderつかってんだけど、
だれかおしえてくでー;;

てか、XmlTextReaderで読んでる時に
子要素の数の取得できればそれでいいんだけど。。。
237デフォルトの名無しさん:2005/04/22(金) 15:29:46
色々突っ込みたいところはあるが、
取りあえずXPathDocumentのコンストラクタをよく調べてみると良いよ。
238217:2005/04/22(金) 18:22:55
>>221
DataSet だと、確かに希望したことはできるのですが、
一つのファイルをつっこむたびに毎回 SELECT で表を走査するので遅くなってしまいました。
239デフォルトの名無しさん:2005/04/23(土) 00:08:47
アンマネージコードをマネージコード化する方法が詳しく載っているサイトってどこかありますでしょうか
Cで書かれたライブラリを使っていて、マネージコードにしたいんですけど
アンマネージコードに対してマネージラッパーの正当性を確認する方法とか

マネージコードについて いまいち勉強不足なのですが
C#.Netにて Win32APIを[DllImport]使ってGUIコンポーネントを作成 > できたクラスはとりあえずマネージコード
C#.Netにて CライブラリをWrapしてメソッド作ったらunsafeな公開メソッドになっちゃった> unsafeだよってメタ情報が書いてあるマネージコード
C#.Netでプログラムを作ったらとりあえずマネージコードになる?
240デフォルトの名無しさん:2005/04/23(土) 00:17:42
C#でアンマネージコードは書けないのでは
241デフォルトの名無しさん:2005/04/23(土) 00:19:40
マネージラッパの正当性の確認ってのは難しいような。
表現手段がかなり幅広いから。
サイトか。
やっぱり基本はMSDNだね。解説にプラットフォーム呼び出しのチュートリアル、リファレンスにアンマネージコードとの相互運用。
@ITの.NET TIPSとか。

後半部分はその通り。
ちなみにDllImportは必ず完全に非unsafeなコンテキストで書けるよ。
IntPtrはすれすれだけどw一応unsafeではない。
CopyMemoryはunsafeで書くけどな。
242デフォルトの名無しさん:2005/04/23(土) 17:58:01
MagicDockingでShowContentとHideContentで表示非表示を切り替えていると
bottomに表示するように設定すると
ステータスバーの下に表示されてしまいいます。

ステータスバーの上にはできないのですか
243デフォルトの名無しさん:2005/04/23(土) 23:41:46
作った人に聞けよ
244239:2005/04/24(日) 11:05:16
>>241 遅レスですが、ありがとうございました。
ドッキングウィンドウについてメモ
494 :デフォルトの名無しさん :04/11/02 23:03:59
>>491
DockPanelSuite http://sourceforge.net/projects/dockpanelsuite/
無償でオープンソース。現在ベータ版で、メニューの統合がうまくいかないなどバグが残る。

DotNetMagic http://www.dotnetmagic.com/
機能的にはおそらく最強。でも有償。

MagicDocking http://www.codeproject.com/cs/miscctrl/dockingmanagerextender.asp
DotNetMagic の旧バージョン。ライセンスはよくわからん。
SharpDevelopに使われるなど実績あり。

Docking Suite http://www.divil.co.uk/net/controls/dockingsuite/
現在ベータ版。非商用利用に限り無償。
245デフォルトの名無しさん:2005/04/24(日) 11:23:27
よくVisualStudioなどで 自分のアプリ外でのファイル の変更があると
「xxxはこのエディタ以外で編集されましたが再度読み込みますか?」みたいなメッセージがでますけど
このような機構はどのようにして実現するのがいいのでしょうか?

自分のアプリで登録した時点でのタイムスタンプを保存して
対象をポーリングしてるのでしょうか
それとも便利な何かがある?
246デフォルトの名無しさん:2005/04/24(日) 11:26:58
>>245
System.IO.FileSystemWatcherクラス。
ただし、Win9X系ではうまく動かないけど。
247デフォルトの名無しさん:2005/04/24(日) 12:32:11
ノータッチデプロイメントでロード時間が長いので、せめてロード中の表示をしたいのですが、
たとえば、こういう事はできるのでしょうか?

1.dll をいくつかに分けて初期状態ではdllは読み込まずに手動で読み込み
2.どの程度読み込み終わったのか判定
248デフォルトの名無しさん:2005/04/24(日) 12:51:49
ファイルの名前を変更したいのですが、
ファイルの中身を読み込んで新規ファイル名で保存
その後古いほうを削除するしかないんでしょうか?

直接リネームできると助かるのですが。
249デフォルトの名無しさん:2005/04/24(日) 12:53:45
>>248
File.Moveでいいじゃん。
250248:2005/04/24(日) 12:56:37
即レス感謝。
Moveって移動と思い込んでましたが、よく見たら名前の変更に使えるんですね。
251デフォルトの名無しさん:2005/04/24(日) 14:20:53
>>246
そもそもFileSystemWatcherの動作プラットフォームにWin9xが入っていないし。ReadDirectoryChangesWが呼ばれるんだと思う。
Win9xにも対応するならFindFirstChangeNotificationを使えばいいかと。
252デフォルトの名無しさん:2005/04/24(日) 14:28:19
あめぞうをつぶしませんか?
253245:2005/04/24(日) 20:24:49
>>246,>>251ありがとうございます
うは、Win9xに対応してないとかってまったく気にしてなかった。
よく見ると下のプラットフォームのところに書いてあるのね
他に9xじゃ動かないメジャーなAPIってあるのかな
254デフォルトの名無しさん:2005/04/25(月) 00:06:21
フォームのタイトルバーにあるアイコンを非表示にするにはどうすればいいのでしょうか。
255デフォルトの名無しさん:2005/04/25(月) 00:22:12
FormBorderStyleを適当にいじればいけたような気がする。
256デフォルトの名無しさん:2005/04/25(月) 00:22:46
なんていい加減な助言w
257デフォルトの名無しさん:2005/04/25(月) 00:24:32
だってヘルプみればわかるし
258デフォルトの名無しさん:2005/04/25(月) 05:58:27
ありがとうございました。
FormBorderStyleをFixedDialogにすることで解決しました。
今後は安易に質問せず、自分で解決できるよう努力します。
259デフォルトの名無しさん:2005/04/25(月) 15:26:07
DShellFolderViewEventsの SelectionChangedを扱いたいんですが、
eventhandlerとかはどう記述したらいいんでしょうか。
ぐぐってもほとんどヒットしません。
shell32とshdocvwはインポートしてあります。
260デフォルトの名無しさん:2005/04/25(月) 15:51:59
Process.Startとかで起動したプログラムそのもののプロセスIDってどうやって取得するんでしょうか?
261デフォルトの名無しさん:2005/04/25(月) 16:01:44
クラスの情報を調べる方法を探しています。
継承元のクラス名やらはBaseTypeとかでわかるのですが、継承したインターフェイスクラスの事を調べる術がわかりません。
どなたかご存知ありませんか?
262デフォルトの名無しさん:2005/04/25(月) 16:19:16
Type.GetInterfacesがあるだろ。
263デフォルトの名無しさん:2005/04/25(月) 16:20:12
>>260
Process.Id……リファレンスを少しは見ろと。
それともなにか、Process.Start静的メソッドで起動して返値は捨ててるのか。
264デフォルトの名無しさん:2005/04/25(月) 16:51:20
>>262
それはその「クラス名」を指定しないと取得できないんですが・・・・・
265デフォルトの名無しさん:2005/04/25(月) 17:03:00
>>264
ん? GetInterfaceと勘違い?
foreach (Type interfaceType in typeof(Hoge).GetInterfaces()) {
   Console.WriteLine(interfaceType.Name);
}
それともこういう事じゃないの?
266デフォルトの名無しさん:2005/04/25(月) 17:34:42
HTMLを解析するのに便利で速くて格好いいクラスはありますか?
267デフォルトの名無しさん:2005/04/25(月) 18:03:03
mshtm(ry
268デフォルトの名無しさん:2005/04/25(月) 21:36:43
かっこよくはないだろう
269デフォルトの名無しさん:2005/04/26(火) 00:15:00
非同期通信の勉強でSystem.Net.Socketを使ってファイルの送受信を書いてみたんですけど
Threadを二つ使ってSend(...)、Receive(...)でやり取り
非同期メソッドBeginSend(...)、BeginReceive(...)でやり取り
と二通り書いてみたら、Threadのほうが早かったのですがそういうもの?
bufferサイズは1k,10kで
//コードとしてはこんな感じで@非同期
public void receive(...){
...
clientSocket.BeginReceive(
buffer, 0, buffer.Length, SocketFlags.None,
new AsyncCallback(callback), null);
}
private void callback(IAsyncResult ar){
try{
bufferReceivedCount = clientSocket.EndReceive(ar);
fileStream.Write(buffer, 0, bufferReceivedCount);
}
catch(Exception ex)
{Trace.WriteLine(ex);}

if(!clientSocket.Connected || timeout < 0)
{//終了処理
return;
}

clientSocket.BeginReceive(
buffer, 0, buffer.Length, SocketFlags.None,
new AsyncCallback(callback), null);
}
//thread
public receive(){ new Thread(new ThreadStart(){while(true){ clientSocket.Receive(....); ...}).Start();}}
270デフォルトの名無しさん:2005/04/26(火) 01:37:10
よくメーラーとか、FTP ClientとかIEも
パスワードを保存してくれますが、これってどうやってるんでしょうか?

C# 暗号化 でググってもユーザーが入れたパスワードをキーに
ファイルを暗号化して保存。 それを読み込むときもまたパスワードを入れてもらって
ってやってますが、最初にあげたようなソフトはユーザーに何も聞かずに
パスワードを保存してます。

暗号化に用いたであろうキーはどうやって安全に保存してるんでしょうか?
271デフォルトの名無しさん:2005/04/26(火) 07:44:17
>>265
出来ました。ありがとうございます。

DLL内部をツリービューに表示して、選択されたクラスについての情報を表示しようと思ったんですが、
なぜか
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.TypeResolve += new ResolveEventHandler(MyResolver);
をやってから
Type t = Type.GetType(name,true);
しないとクラスの型が取得出来ませんでした。
これはなんでなんですかね?
しかも、
static Assembly MyResolver(object sender, ResolveEventArgs args)
{
return typeof(TextBox).Assembly;

}
という内容なんですが。TextBoxでなくとも正解の値が返ってくるんですよね。わけわかめ。。。。
272デフォルトの名無しさん:2005/04/26(火) 09:25:29
プロセスの起動時に
起動したプロセスのIDが戻り値の中に含まれていますか?
含まれている場合戻り値取得方法についてお伺いしたいのですが
どなたかご存知の方おられましたらアドバイスいただければと思います。
273デフォルトの名無しさん:2005/04/26(火) 09:32:03
……戻り値の取得方法って……。
"hoge".Replace("o", "a")の戻り値をどうやって取得するか教えろってこと?
274デフォルトの名無しさん:2005/04/26(火) 09:54:26
>>271
Type.GetTypeの解説を読むと何故AppDomain.TypeResolveが必要か分かる。
簡単に言えば、単純型名/名前空間付き型名でGetTypeした場合、mscorlib.dllと自分自身のアセンブリしか検索対象にしないから。
Type.GetTypeで任意のアセンブリ内のクラスの型情報を取得するには、アセンブリのバージョン情報などを含んだ完全限定名で指定する必要がある。

>TextBoxでなくとも正解の値が返ってくるんですよね。
これは要するにSystem.Windows.Forms.dllのアセンブリ情報が欲しいわけで、
それならTextBoxだろうがDataGridだろうが同じアセンブリだから。
Type.GetTypeするのがSystem.Drawing.PenだったらSystem.Drawing.dllのアセンブリ情報が必要になる。
275デフォルトの名無しさん:2005/04/26(火) 10:23:53
まだはじめたばかりで諸先輩にとってはアホな質問だと思われるかもしれませんが

private void button2_Click

System.Diagnostics.Process A =
System.Diagnostics.Process.Start("notepad");
System.Threading.Thread.Sleep(2000);
A.Kill();

というのを作成したのですが
private void button3_ClickでA.killをしたいのですが別の場所でもAのプロセスIDを保つにはどうしたらよいのでしょうか?
276デフォルトの名無しさん:2005/04/26(火) 10:49:14
button2がどこで宣言されてるか、どこで初期化されてるか調べてみるといいよ。
#regionも開いて。
277デフォルトの名無しさん:2005/04/26(火) 11:16:15
>>276
まて、もまいはこっちに池
http://pc8.2ch.net/test/read.cgi/tech/1045307942/
VSを使ってるにほいがプンプンする

>>275
Aをbuttn2_Clickメソッドの外で宣言する
278デフォルトの名無しさん:2005/04/26(火) 11:40:07
>>277
いや、命名を見れば275も明らかにVS使ってるからさ。
直接の解法を与えるのは好きじゃないし。
279275:2005/04/26(火) 12:15:53
いろいろと調べてみて

System.Diagnostics.Process A;
private void button2_Click

System.Diagnostics.Process A =
System.Diagnostics.Process.Start("notepad");

として

private void button3_Click
A.kill();

としてみましたが

button3を押すと

オブジェクト参照がオブジェクト インスタンスに設定されていません。

とエラーが出てうまくいきませんでした。
私にはまだまだ敷居が高いようでした。
280デフォルトの名無しさん:2005/04/26(火) 12:45:49
>>279
おしいですな、スコープとか勉強しなおしたほうが...
281デフォルトの名無しさん:2005/04/26(火) 13:37:26
System.Diagnostics.Process A;
private void button2_Click

A = System.Diagnostics.Process.Start("notepad");

として

private void button3_Click
A.kill();


すればよろし、ところでなんで {} と (object sender, 忘れた e )
が無いの?
282デフォルトの名無しさん:2005/04/26(火) 14:43:56
通りすがりがまったくもっておバカな質問なんですが
上のProcess.Startの ("") の中にドライブ直下に置いてるアドレスを書いても
なんだか起動しないんだが
別の指定方法とかるんですかね?
一応

c:\helloworld.txt

と入れても(もちろん適当な文字をいれてファイルは作成してあります)

認識できないエスケープシーケンスです

と出るんだが一応

c:\\helloworld.txt

と¥を2つ入れると実行できた。

普通に

c:\

で実行する方法あります?
283デフォルトの名無しさん:2005/04/26(火) 14:57:18
ヘルプでC#プログラマーズリファレンス>C#のキーワード>型>参照型>stringを調べてみな。
284282:2005/04/26(火) 15:14:47
>>283
なるほど・・・・

@くっつけろってことね・・・・
C#やり始めて2ヶ月もたつのに
こんなこと聞いてるようじゃ人間失格だな
肉体労働にでも転職考えます。
285moetan:2005/04/26(火) 15:57:38
Visual C# 2.0を使って
以下のサイトにあるようなフックDLLを作成することはできますか?
もちろん、.NetFrameworkを必須としたものであっても当然OKです。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm
286デフォルトの名無しさん:2005/04/26(火) 16:04:11
>>285
そういうのはアンマネージ以外からはこれからも使えないと思う
287moetan:2005/04/26(火) 16:11:59
>>286

さんくすこ
288デフォルトの名無しさん:2005/04/26(火) 16:19:25
フック系はWinFXでマネージドから扱えるようになるんじゃないかなと期待。……先は遠いな。
289デフォルトの名無しさん:2005/04/26(火) 16:29:54
のっとり万歳ですか、マネージドに入れるのはセキュリティー上ヤバイだろ
290デフォルトの名無しさん:2005/04/26(火) 16:41:34
>>289
ハァ?
セキュリティ上何がやばいか言ってみ?
291デフォルトの名無しさん:2005/04/26(火) 17:17:12
>>290
パスワード盗み放題とか
292デフォルトの名無しさん:2005/04/26(火) 17:30:39
マネージドであることと関係ない件について
293デフォルトの名無しさん:2005/04/26(火) 17:40:35
>>291
じゃあいまのWindowsも盗み放題なんだね!
みんなWindowsは危険極まりないぞ!
さっさと窓から投げ(ry
294デフォルトの名無しさん:2005/04/26(火) 17:45:04
>>293
今まで知らなかったのか、実際そういうウイルス居るぞ

>>292
近年は成りすまし防止等も重要な事なのじゃよ、トップレベルウインドウに制限とかつけるようになってるだろ。
295デフォルトの名無しさん:2005/04/26(火) 18:14:34
>>294
マネージドと関係あることをやっぱり説明できてない件について
296デフォルトの名無しさん:2005/04/26(火) 18:44:42
むしろマネージドに入れたほうがセキュリティ上安全かもね
297デフォルトの名無しさん:2005/04/26(火) 20:54:45
基本はアンマネージのまま放置、機能の自然消滅待ちでしょう
入れたら大穴になるんじゃないの
298デフォルトの名無しさん:2005/04/26(火) 21:00:08
マネージドにすると大穴になると言う根拠は?
フックが嫌いなのは分かったが、なんかマネージドに幻想持ってる?
299デフォルトの名無しさん:2005/04/26(火) 21:07:44
>>298
別にフックは嫌いじゃないが、こういう物は基本的にOSの一部として動作すべきものだから、
デバイスドライバやその類のやり方で組まれるのが正しいと思うが根拠。
こんなえげつない物の取り込みはかなり嫌な感じがする。
300デフォルトの名無しさん:2005/04/26(火) 21:24:10
289ではないが…。
それを防止するためにAssemblyのFullNameがあんなに長ったらしい
ものになってるし署名機能が基盤に組み込まれているともいえる。
ただ明示的に指定して(つまりユーザーが確実に管理下における特殊な状況において)
技術的に出来ないわけでもないし、危険性も限定的にすればいいだけなので
追加されるかもしれない。

っていうかここまで書いて気づいた。DelaySign使えば今でもできるじゃん
301デフォルトの名無しさん:2005/04/26(火) 21:26:34
あ、ごめん、勘違いしてた。そっちのフックか
えーと、C++/CLIで出来るからいらないんじゃないかな
302デフォルトの名無しさん:2005/04/26(火) 21:30:44
うあ、えーと、C++/CLIじゃなくてCLR Hostingのほうか・・・
ごめん、吊ってくる
303デフォルトの名無しさん:2005/04/26(火) 22:14:11
すいません、質問をお願いします。
ファイルのアイコン、ファイルの種類(zipなど)、などの「全般」情報と
タイトル、表題、作成者、カテゴリ、などの「概要」情報を取得するにはどのようにしたらよいのでしょうか?
304デフォルトの名無しさん:2005/04/26(火) 22:18:00
>>303
>タイトル、表題、作成者、カテゴリ、などの「概要」情報
これ Explorer が独自に管理している情報じゃなかったっけ?
一部のファイルについては、いくつかの情報は自力で抜き出せるけど、
わけわかんなくなったら諦めた方が身の為かと思う
305デフォルトの名無しさん:2005/04/26(火) 22:40:34
>>303
なんか見つけた。
ttp://ant0x.udap.jp/tips/tips_fileSummaryInfo.htm

前半部分はSHGetFileInfoとかその辺かね。そのほかはShell32.dllを参照すれば色々楽かも。しらんけど。
ttp://hp.vector.co.jp/authors/VA016117/explorer1.html
306デフォルトの名無しさん:2005/04/26(火) 23:41:33
>>304,305
即レスありがとうございます

NTFSでマルチストリームで管理していたんですね>概要
試しにC#でfilename:stream名で実験したら失敗(当たり前か)
Shell32.dllは使いづらかったです。(いろいろいじってちょっと面白かった)
DSOFileは使えそうな感じ。割と簡単でした。
>>ttp://hp.vector.co.jp/authors/VA016117/explorer1.html
ファイル/フォルダの(Large/Small)アイコンを取得するところがうまくいきません。
(自分的にC++から.Netの世界に持っていくのはコストかかって辛い T-T)
HIMAGELISTってなんだろう・・
C++バリバリでシェルのアイコンとるサンプル作ってくれる御方いないかな。。
307デフォルトの名無しさん:2005/04/26(火) 23:48:20
SHGetFileInfoにHIMAGELISTは出てこないと思うが。
308デフォルトの名無しさん:2005/04/27(水) 00:00:26
>>ttp://hp.vector.co.jp/authors/VA016117/explorer1.html
に下記のような記述があったのでHIMAGELISTについてしらないとだめかな。と
//次のようにして、イメージリストのハンドルを得る
himlSmall = (HIMAGELIST)SHGetFileInfo((LPCSTR)"C:\\",
    0,
    &sfi,
    sizeof(SHFILEINFO),
    SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
309デフォルトの名無しさん:2005/04/27(水) 00:06:49
private int _numberA;
public int NumberA{
   get{
      return _numberA;
   }
   set{
      if( value < 0) throw new ArgumentOutOfRangeException("負の値ではない数値が必要です。");
      else _numberA = value;
   }
}

クラスの一部がこんな感じです。
ArgumentOutOfRangeExceptionのParamNameプロパティーをコンストラクタで設定したいのですが、プロパティーのときは何を設定すればよいのでしょうか。

[C#]
public ArgumentOutOfRangeException(
 string paramName,
 object actualValue,
 string message
);
310デフォルトの名無しさん:2005/04/27(水) 00:08:00
まあただのハンドルで、ImageList_HOGEHOGEの各関数があるだけだがね。
SHGetFileInfoでアイコン取得するだけなら基本的に必要ないし。
311デフォルトの名無しさん:2005/04/27(水) 00:11:29
>>309
value

または無記入
312デフォルトの名無しさん:2005/04/27(水) 00:13:07
>>311
そうですか、ありがとうございます
valueですか、そういえばそうですね
313デフォルトの名無しさん:2005/04/27(水) 00:35:04
>>303-306
初めて知った、マルチストリーム
普通のエディタで開けますね、こっそりディレクトリみたい
314デフォルトの名無しさん:2005/04/27(水) 01:33:44
TabPanelにControlを追加削除を何度も繰り返すと
たまに、一切追加したオブジェクトが表示されないって
現象起きたことある人いませんか?
315デフォルトの名無しさん:2005/04/27(水) 01:43:41
>>314
タブに対して優先順位を変えると良く起こるね
タブに限らないけど、修復方法のノウハウ誰か作ってくれないかな・・・・
316デフォルトの名無しさん:2005/04/27(水) 07:36:43
>>315
とりあえず、コーディングガタガタでも無理矢理でもいいんですが
直す方法としてどんなことを試せばいいのか教えてもらえませんか?
317デフォルトの名無しさん:2005/04/27(水) 12:01:35
チェックボックスのチェックを入れる白い部分の色を変えることって出来ますか?
バックのカラーは変えれるみたいですがやはり中の白い部分は変えられないのでしょうか?
318デフォルトの名無しさん:2005/04/27(水) 12:26:31
そう言うプロパティがないなら無理だろ。
319デフォルトの名無しさん:2005/04/27(水) 13:19:14
>>316
直す方法は見つからない、プロパティーいじって復活したらラッキーといったところ。
320デフォルトの名無しさん:2005/04/27(水) 15:14:06
標準のTabControlはいくらなんでもしょぼすぎだよね。
321デフォルトの名無しさん:2005/04/27(水) 15:42:46
そうでもないよ、使い方を理解してないんじゃない?
322デフォルトの名無しさん:2005/04/27(水) 16:11:39
バグ対策ですが、
TabPage コントロールに貼り付けたコントロールが全滅を食らわないようにするために
一旦 UserControl 上に全てのコントロールを貼り付けて、このコントロールを改めてTabPageに貼り付けるようにしている。
こうすればTabPageが壊れても、そこだけ作り直せばよいので被害が少なくて済みます。
UserControl 上で貼り付けたコントロールが消える時は、最後に貼り付けたコントロールもしくは最後にリネームしたコントロールからのようなので、
生贄用のコントロールとして、全ての配置が終わったあとに、表示内容の無い Lavel コントロールを一枚貼り付けています。
323デフォルトの名無しさん:2005/04/27(水) 17:00:21
俺はなんとなく消えるのがうざいのでデザイン終わったら
InitializeComponentの中身をコンストラクタにコピペして
InitializeComponent自体消す。
でも以降デザイナで表示できなくなってしまう
でもリソースとかあるとダメポ

・・・parcial typeマダー
324デフォルトの名無しさん:2005/04/27(水) 22:11:56
Hashtable ht1,ht2
があって、ht1にあってht2にないキー
また逆に、ht2にあってht1にないキーをリストアップするのに
なにかスマートな方法ないですか?
325デフォルトの名無しさん:2005/04/27(水) 22:24:08
ないのでforeachとContainsKeyで。
326324:2005/04/27(水) 22:43:47
地道にするしかないですか…
ありがとでした。
327デフォルトの名無しさん:2005/04/27(水) 23:16:12
複数のdllを一つに纏めたり、dll を exeの中に取り込んだりする方法ってありますでしょうか?
328デフォルトの名無しさん:2005/04/27(水) 23:32:38
基本的にない。
応用的にリフレクションを使えば可能ではあるが恐らく貴方の望むモノではない。
329デフォルトの名無しさん:2005/04/27(水) 23:34:52
susieプラグインでJPEGをBMPへ変換したいのですが、
以下の場合だとStretchDIBitsがエラーを返します。
どのあたりが間違っているか教えてもらいたいのですが、よろしくお願いします。

private const int DIB_RGB_COLORS = 0; // color table in RGBs
private const int SRCCOPY = 0x00CC0020; // dest = source
private const int GDI_ERROR = 0;

[DllImport("ifjpeg.spi", EntryPoint="GetPicture",ExactSpelling=true , SetLastError=true)]
private static extern int GetJPEGPicture( StringBuilder FileStr, int len, int flag,ref IntPtr pHBInfo,ref IntPtr FARPROC,int CallBack, int CallBackLong);
public static extern int LocalFree(IntPtr MemHandle);
[DllImport("kernel32.dll")]
public static extern int LocalLock(IntPtr MemHandle);
[DllImport("kernel32.dll")]
public static extern int LocalUnlock(IntPtr MemHandle);
[DllImport("kernel32.dll")]

330デフォルトの名無しさん:2005/04/27(水) 23:36:15
つづき
public static int DrawJPEG(StringBuilder PicFile,PictureBox ToDraw)
{
IntPtr BitMapInfo = IntPtr.Zero;
IntPtr BitMapObj = IntPtr.Zero;
IntPtr M_BMP;
IntPtr M_Info;
int ret;
//画像展開
ret = GetJPEGPicture(PicFile, 0, 0,ref BitMapObj,ref BitMapInfo, 0, 0);
if(ret != 0)
return ret;
//メモリーのロック
M_BMP = (IntPtr)LocalLock(BitMapObj);
M_Info = (IntPtr)LocalLock(BitMapInfo);
//描画先をとりあえずピクチャーBOX
Graphics g = ToDraw.CreateGraphics();
if(StretchDIBits(g.GetHdc(),0,0,100,300,0,0,100,30,M_BMP,M_Info,SRCCOPY,DIB_RGB_COLORS) == GDI_ERROR)
return -1;
ToDraw.Invalidate();
//メモリの開放
LocalUnlock(BitMapObj);
LocalUnlock(BitMapInfo);
LocalFree(BitMapObj);
LocalFree(BitMapInfo);
return 0;
}
331デフォルトの名無しさん:2005/04/27(水) 23:53:44
>>327
ILMergeってやつじゃないの?
332デフォルトの名無しさん:2005/04/27(水) 23:56:03
>>329
GetLastErrorは?
333デフォルトの名無しさん:2005/04/28(木) 00:05:18
>>332
一番したがちょん切れていました。
[DllImport("kernel32.dll")]
public static extern uint GetLastError();

戻り値は”0”(GDI_ERROR)でした。
334デフォルトの名無しさん:2005/04/28(木) 00:14:07
>>329
susieプラグイン使わなくても変換はできるが、それは駄目なのか?
335デフォルトの名無しさん:2005/04/28(木) 00:21:22
そもそもGDI_ERRORの定義が
#define GDI_ERROR (0xFFFFFFFFL)
だったりするんだが。
336デフォルトの名無しさん:2005/04/28(木) 00:29:55
>>334
いえ、それどころか大歓迎なのですが、
やり方がわからなかったものでsusieを弄ってました。


>>335
すみません、間違ってました。
MessageBox.Show(GetLastError().ToString());
とかやったらちゃんと127と出てきました。
どうもありがとうございます。
337デフォルトの名無しさん:2005/04/28(木) 00:40:46
DllImportもsusieプラグインもいじれるのにjpeg<->bmpができないと言うのも珍しいな。
Image.FromFileで開いてSave(string, ImageFormat)するだけなのだが。
338デフォルトの名無しさん:2005/04/28(木) 02:32:24
C++からの移行組みなんじゃないかな、オレもそういうの多いし
339デフォルトの名無しさん:2005/04/28(木) 06:46:11
>>327,328
>複数のdllを一つに纏めたり
よくわかんないけど
マルチモジュールアセンブリトとかじゃだめ?
ttp://www.atmarkit.co.jp/fdotnet/technology/framework01/framework01_04.html
340デフォルトの名無しさん:2005/04/28(木) 08:18:04
>>339
それは複数のモジュールから集めたメタデータを一つのアセンブリにするもの。
複数のアセンブリをどうこうするものじゃないし、
モジュールそのものをアセンブリに内蔵するわけでもない。
341デフォルトの名無しさん:2005/04/28(木) 13:06:59
a=A b=B c=C…
みたいにaによって一意にAが決まり、その逆も成り立つデータを扱っているのですが、
a→A
A→a
を扱うにはどうしたらいいですか?
普通に連想配列をひとつ使うと、 a→Aはいけますが、
A→aはできないですよね?
342デフォルトの名無しさん:2005/04/28(木) 13:09:23
普通に連想配列をふたつ使えば?
343341:2005/04/28(木) 13:14:05
即レスありがとうございます。
連想配列
a,AってのとA,aってのを用意するのが普通なんですか。
参考になりました。ありがとうございます。

#素人孤独マだとなにが普通かがぜんぜんわからないので助かります。
344デフォルトの名無しさん:2005/04/28(木) 14:28:25
>>341
作って公開してよ、このあたりの弱さは.NetFrameworkはかなり悲惨なので・・・・
グラフとか、同値とか順序集合とか半順序集合とかものすごく欲しいんですが、作ってる時間が無い。
345341:2005/04/28(木) 15:09:58
…よしやるぞ!
といいたいところなんですが、
順序集合とかはじめて聞きましたよ…

とりあえず連想配列を二つまとめたクラスでもw
346デフォルトの名無しさん:2005/04/28(木) 17:31:15
>>344
そういうのを作るとしたら、どの言語を参考にすればいいの?
347デフォルトの名無しさん:2005/04/28(木) 17:36:22
STLの~~は.NETにありますか、って質問は何度か目にしたな。
Javaのコンテナとかはどうなんだろう。
348デフォルトの名無しさん:2005/04/28(木) 20:41:00
いま欲しいんだよね。
349デフォルトの名無しさん:2005/04/28(木) 20:59:03
二つのstring[]比較してそれぞれに共通なもの、
片方にしかないものの抽出してくれるのも。
350デフォルトの名無しさん:2005/04/28(木) 21:13:33
>>349
そいつはクラスじゃなくて静的メソッドがお似合いじゃないか?
List<string>ならFindAllメソッドで対応できそうだな。
351デフォルトの名無しさん:2005/04/28(木) 21:18:49
反汎用的な機能をつけられても、逆に困る罠
352デフォルトの名無しさん:2005/04/28(木) 22:15:28
でも集合演算なんかができると結構面白そうだ。
353デフォルトの名無しさん:2005/04/28(木) 22:17:05
>>337
どうもありがとうございます。
354デフォルトの名無しさん:2005/04/28(木) 22:17:54
そのうちに推論エンジンも付けろとでも言い出しそうな奴が
355デフォルトの名無しさん:2005/04/28(木) 22:36:39
>>354
C++への回帰
356デフォルトの名無しさん:2005/04/28(木) 22:57:09
>344
欲しい。けど
Javaも似たようなものだと思うけど
グラフとか、同値とか順序集合とか半順序集合がそろってるのって例えばなに?
Hashtableあればどうとでもなる、というか他人のコードが読みやすい。ような気も
計算量の見積もりとか
357デフォルトの名無しさん:2005/04/28(木) 23:46:03
>>356
C++だろ
358デフォルトの名無しさん:2005/04/28(木) 23:53:35
>>321
お前が作ってるソフトがしょぼいだけ。
BackColor すらないんだぞ?
359デフォルトの名無しさん:2005/04/28(木) 23:55:53
>>339
情報提供有難うございます、多分それで僕の望みは叶いそうな予感がします。
しかし、メチャクチャ難しいですね、良い書籍とかないですかね?
まだパラパラっと見ただけなのですが、といいますか吟味して読めるレベルではないといいますか、そんな状況なのですが、
VisualStudioから module を生成する方法・・・これはなさそうですね、どこかのディレクトリに中間ファイルとしてでものこっているといいのですが・・・
ともかく、dllかexeからmoduleファイルは生成する簡単な方法があったら、教えてください、無ければ頑張ります。
もう一つ、どこかのディレクトリにmoduleファイルが入っていないでしょうか、これは自分もこれから探してみます。
利用目的はノータッチ・デプロイメントで、ファイルを分割すると大抵の無料の貸しサイトでdllが読み込めない問題に対処するためです。
360デフォルトの名無しさん:2005/04/29(金) 00:04:00
>>359
> VisualStudioから module を生成する方法・・・これはなさそうですね、どこかのディレクトリに中間ファイルとしてでものこっているといいのですが・・・
.netmoduleは中間ファイルじゃない。

> ともかく、dllかexeからmoduleファイルは生成する簡単な方法があったら、教えてください、無ければ頑張ります。
csc.exeでソースを/target:moduleをつけてコンパイルする。
既存アセンブリから作るのは無理。

> もう一つ、どこかのディレクトリにmoduleファイルが入っていないでしょうか、これは自分もこれから探してみます。
入ってない。
VSでは作成しないしできない。

> 利用目的はノータッチ・デプロイメントで、ファイルを分割すると大抵の無料の貸しサイトでdllが読み込めない問題に対処するためです。
ちなみにマルチモジュールアセンブリにしても、.netmoduleも実行時に必要だよ?
読み込めないかどうかは知らないけど。
361デフォルトの名無しさん:2005/04/29(金) 00:24:37
自分で継承したコントロール
例えばMyButton (extends Button
を簡単にマイユーザーコントロールに出す方法ってないですかね?

XXX extends UserControlならXXXクラスはデザインビューにするだけで
マイユーザーコントロールに追加されるのですが
メニューの追加、から追加すると自分のプロジェクト内から参照できないので面倒です。
今のところ、一度extends UserControlでビルドして、デザインビューで開いた後
extends Buttonでコンパイルしなおして使っているのですが・・・
362デフォルトの名無しさん:2005/04/29(金) 00:45:02
TabControl・・しょっぱいな
BackColor実装されてないのか
あるけど何も起こらないね

タブの上にボタンを乗せたり
タブの形を丸くしてみたり
選択中のタブの点線を消してみたりしたいんですけど、どうするのがいいんですかね
363デフォルトの名無しさん:2005/04/29(金) 00:48:28
>>362
オーナードロー
364デフォルトの名無しさん:2005/04/29(金) 00:57:40
>>362
ttp://santamartadotnet.hp.infoseek.co.jp/releases/freewares/usamimibeta/index.html
この人がタブを独自実装してるから参考にしてみたら?
俺はタブの並び替えだけ TabControl 継承してやってみた。
365デフォルトの名無しさん:2005/04/29(金) 12:01:21
まともなTabControl機能が欲しい場合は独自実装するしかないからな。
"閉じる"ボタンすら付いてないって何だよそれ。
366デフォルトの名無しさん:2005/04/29(金) 12:23:05
えーと、閉じるボタンというのはTabControlにデフォなのか?
MDI兼用タブブラウザにはMDI由来の閉じるボタンが付いてたが、
使ってるタブ式エディタにもIrvineタブモードにも付いてないんだが。
367349:2005/04/29(金) 13:00:30
strin[]やめてArrayListにして
同じのが見つかるたびに両方から削除していって残ったものが違い
ってことにしました。

>>TabControl
閉じるボタンって普通はないですけど、あるととても便利です。
まぁ慣れの問題でしょうけど。タブの右上に×マークがないと不安。
368デフォルトの名無しさん:2005/04/29(金) 13:21:56
MessageBoxをShowした際に、指定した位置に表示するにはどうすればいいでしょうか?
親フォームの中央に出したいんですが、Show()の引数にもそれらしいものは見当たらないし・・・
369デフォルトの名無しさん:2005/04/29(金) 13:32:52
>>368
無理。
自分で簡単なダイアログを作る。
370デフォルトの名無しさん:2005/04/29(金) 19:47:46
unmanagedなライブラリのラッパを作っています。そのライブラリに、

//func_codeにより色々な処理をする。
int func(int func_code,void *param);

という関数があります。
これをC#において、
int x=10;
wrapped_func(FUNC_HOGE,ref x);
みたいな呼び出し方がしたいのですが、ラッパー関数はどのように実装すればいいんでしょうか?
371デフォルトの名無しさん:2005/04/29(金) 19:58:37
>>370
動作未確認

void wrapped_func( int func_code, ref int x )
{
unsafe
{
func( func_code, &x );
}
}

なんか間違っている気もするが。
372370:2005/04/29(金) 20:08:58
>>371
引数がintで固定されてればそれでもいいんですが、
func_codeによってWORDだったりBOOLだったり構造体だったりするんですよ。
とりあえず
public int wrapped_func(int code, ref int param);
public int wrapped_func(int code, ref short param);
って具合にparamの型によって関数をオーバーライドして対処してますが、
もしパラメータを複数取るような関数があったら型の組み合わせ爆発が起こりそうです。
System.Runtime.InteropServiceあたりを使ってどうにかなりそうな気もするんですが。
373371:2005/04/29(金) 20:12:23
>>372
func_code の仕様がよくわかんないけど、これじゃだめ?

void wrapped_func( int func_code, ref System.ValueType x )
{
unsafe
{
func( func_code, &x );
}
}
374デフォルトの名無しさん:2005/04/29(金) 20:25:15
普通は(int func_code, IntPtr x)で宣言するものだが。
呼び出すコーディングがいささか面倒なのがネック。
375370:2005/04/29(金) 20:33:00
>>373
そのコードだと
> fixed ステートメントの初期化子内の fixed でないステートメントのアドレスのみを取得できます。
とのエラーが。

fixed(void* param=&val)

にすると、
> マネージ型 ('System.ValueType') の変数のアドレスまたはサイズを取得できません。
だそうです。
あと呼び出し元で
> 引数 '2' : 'ref ushort' から 'ref System.ValueType' に変換できません。
とのこと。

>>374
そう、面倒くさいんですよ。
今回は引数の型もたかだか10通り程度なので>>372で書いた方法で行こうと思います。
付き合ってくれてありがとう。
376デフォルトの名無しさん:2005/04/29(金) 20:33:20
int 型から IntPtr を取得するのってどうやるんだっけ。
377デフォルトの名無しさん:2005/04/29(金) 20:37:49
>>376
Marshal.AllocHGlobalで4バイト確保して、Marshal.WriteInt32。
使い終わったらMarshal.FreeHGlobal。

いっそunsafeにしてvoid*で宣言した方が手っ取り早いかもしれん。
378デフォルトの名無しさん:2005/04/29(金) 20:40:52
>>377
Marshal 使うのか…気づかんかった。どうも。
379デフォルトの名無しさん:2005/04/29(金) 20:41:00
>>377
やっぱFreeしないと駄目?
380デフォルトの名無しさん:2005/04/29(金) 20:57:47
alloc したら free でしょ
381デフォルトの名無しさん:2005/04/29(金) 21:04:57
>>379
そりゃそうだ。AllocHGlobalしたのはGC管理外のメモリだから。


で、微妙なの思いついた。

[DllImport("hoge.dll")]
extern int func(int func_code, [In, Out, MarshalAs(UnmanagedType.AsAny)] object param);

渡す場合にボクシングしてobject型で渡すか、LayoutKind.Sequentialのclass(not struct)にする必要がある。
値型で渡してしまうと実行先で値が書き換えられてもこっちに反映されない、素敵バグの元。
382デフォルトの名無しさん:2005/04/30(土) 02:17:49
クライアントとサーバで通信を行うプログラムを作成なのですが、お聞きしたいことがあります。

クライアントからコマンドを投げて、サーバから返事があります。
コマンドやサーバからの返事はテキストベースでのやりとりなので、NetworkStreamからStreamReaderやStreamWriterを作成しReadLine、WriteLineを使っています。

ただ、あるコマンドの場合は、その後続けてバイナリのデータをサーバ側に送る必要があります。
そのためその部分のみNetworkStreamのRead、Writeを直接使っています。
その際に、ソケットからストリームを再取得などしていません。

【こんな感じ↓】
サーバ側
TcpClient client;
NetworkStream stream = client.GetStream();
StreamReader reader = new StreamReader( stream );
WtreamWriter writer = new StreamWriter( stream );
switch( reader.ReadLine() ) {
 case DATA:
  stream.Read( buf, 0, buf.Length );
  writer.WriteLine( "OK" );

クライアント側
StreamReader reader = new StreamReader( stream );
WtreamWriter writer = new StreamWriter( stream );
byte[] data = new byte[1024];
writer.WriteLine( "DATA" );
writer.Flush();
stream.write( data, 0, data.Length );

こういうように、StreamReader/StreamWriterを利用しながら、その下の(?)ベースとなっているStream(この場合はNetworkStream)を直接さわっても問題ないのでしょうか。
383デフォルトの名無しさん:2005/04/30(土) 08:39:50
今のプログラムで心配なら、全部バイナリで通信すれば良いんじゃない?

と、昨日初めてHello WorldのMessageBox出した人が言ってみる。
384デフォルトの名無しさん:2005/04/30(土) 11:01:26 BE:17318939-##
>>382
自分はちょうど今HTTPを自分で扱うプログラムを組んでるところだったのでちょうどいいタイミングの質問だ。
HTTPはコマンドとヘッダがテキストで、その後にバイナリのデータが続くから、あなたの状況と同じじゃないかな。

んで、結論を言うと、問題なしです。


ストリームが
|テキストデータ|バイナリデータ|
って感じのストリームで、最初のテキストデータをStreamReaderで読めば、Streamのポジションはテキストデータの最後まで来るから、そこからStreamのReadメソッドを使えば、バイナリデータから読み始められる。
Writeのほうも同様だし、テキストとバイナリの順番が逆でもOK。
385デフォルトの名無しさん:2005/04/30(土) 12:38:55
>>384
だめで~す
StreamReader は先読みを行ってますんで、バイナリデータまで問答無用に喰っちゃいます

全てバイナリで送信する (StreamReader を使用しない) か、
バイナリをエンコードして送る (Stream を使用しない) にして、どちらかに統一しないと
386デフォルトの名無しさん:2005/04/30(土) 14:45:25 BE:15393964-##
>>385
あ、ほんとだ。
おかしいなあ、あのときのプログラムがちゃんと動いてたのはなぜだろう。。。
387デフォルトの名無しさん:2005/04/30(土) 15:35:47
string a = "abcdefghijklmnopqrstuvwxyz"
string b = "opqrs"
みたいなときに
aにbが含まれるかどうかってどうやって調べますか?
aの中にbが含まれるとしても一つしかないことはわかってます。
388デフォルトの名無しさん:2005/04/30(土) 15:44:07 BE:7031467-#
>>387
IndexOfメソッド
389デフォルトの名無しさん:2005/04/30(土) 15:44:20
IndexOf
390デフォルトの名無しさん:2005/04/30(土) 15:46:23
結婚
391387:2005/04/30(土) 15:47:19
ありがとうございます。

>>388-389さん 末永くお幸せに...
392デフォルトの名無しさん:2005/04/30(土) 16:05:09
なるほど!ありがとうございました^^
現在計算機が作れるようになりました。
ここに住み着いていろいろと勉強させてもらいます。
これから、よろしくお願いいたします。
393デフォルトの名無しさん:2005/04/30(土) 19:23:38
>>391
検索文字列が確定してるなら、Regexで検索したほうが処理速度は速い。
394デフォルトの名無しさん:2005/04/30(土) 20:56:20
2度目の自動更新で、テキストボックスに
T2005/04/30 19:53:11
となるようなものを作成しています。
どのようにすればよいのでしょうか?

<META HTTP-EQUIV="Refresh" CONTENT="5">でリロードします。
下のようなコードを書いてみました。
private void Page_Load(object sender, System.EventArgs e)
{
 if(IsPostBack==false)
 {
  TextBox1.Text="F"+System.DateTime.Now.ToString().ToString();
 }
 else
 {
  TextBox1.Text="T"+System.DateTime.Now.ToString().ToString();
 }
}
395デフォルトの名無しさん:2005/04/30(土) 21:00:33 BE:4018638-#
>>393
意外。Regexてどんな実装なのかね。
IndexOfはBoyer-Moore法で検索してると思ってた。
396デフォルトの名無しさん:2005/04/30(土) 21:36:00
>>395
charが16bitだから、スキップのテーブルがでかくなるからだと思う。
ベタサーチしてるのは。
397デフォルトの名無しさん:2005/04/30(土) 22:12:38
ToString().ToString(); ???
398デフォルトの名無しさん:2005/04/30(土) 22:27:42
>>397
TextBox1.Text="T"+System.DateTime.Now.ToString();
の間違いでした。
でもうまく動作しないのはなぜ?
399デフォルトの名無しさん:2005/04/30(土) 22:35:29
>>398
なにがどのようにうまく動作しないのかさっぱりわからないし、
Webアプリなのかどうかすら明示されていない質問なので
答えられません
(多分Webアプリなんだろーけど)
400デフォルトの名無しさん:2005/04/30(土) 22:39:34 BE:6696858-#
ロケール依存のはずだけど、単純に日付のフォーマットが違うとか言う落ち?

ttp://ukamen.hp.infoseek.co.jp/Programming/DateFormat/
401デフォルトの名無しさん:2005/04/30(土) 22:43:24
ASP.NET WEBアプリケーションで作成しています。
ブラウザでみてから5秒後のの自動更新で、テキストボックスに
T2005/04/30 19:53:11
となるようなものを作成していますが
F2005/04/30 19:53:11
となってしまいます。なぜでしょうか?
402デフォルトの名無しさん:2005/04/30(土) 22:46:40 BE:6696858-#
たぶんDateの問題ぢゃないですね


IsPostBack がどういう定義になってるのかわからんのですが
403デフォルトの名無しさん:2005/04/30(土) 23:10:10
ん~?
401をみるとなんかIsPostBackの意味を逆に取ってないか……?
ていうかRefreshさせたときにIsPostBackって有効だっけ?
404デフォルトの名無しさん:2005/05/01(日) 00:04:57
>>403
>ていうかRefreshさせたときにIsPostBackって有効だっけ?
それが知りたい。
もしかしてダメなの
405デフォルトの名無しさん:2005/05/01(日) 01:44:37
PostBackの前にブラウザのキャッシュを疑う俺は間違ってるんだろうか。
406382です:2005/05/01(日) 01:59:56
>>383-386
ありがとうございます。

StreamReaderは先読みしちゃってるんですね…。

でも、とりあえず作ってみたプログラムは正常に動いていたみたいなんですよね…。
受信したバイト数が送信したものと同じだったので…。

でもたまたま、だったんですかね…。

ところで、C#のこういったネットワークプログラムの本でなにかイイの無いですかね。
407デフォルトの名無しさん:2005/05/01(日) 05:51:37
VB6.0で作成した
Project1.ocx(COM)を使用して
C#にてプログラミングしています。


それをビルドすると
下記のようなファイルが作成されるのですが
これは、どのような意味があるのでしょうか?
実行ファイルと同じ配下にコピーすれば
実行可能でした。

またローカルコピーをFalseにした場合は
下記ファイルができないみたいですが
この場合はどのように
すれば実行できるのでしょうか?

また参考になるHP等があればご返答よろしくお願いします。

Interop.Project1.dll
AxInterop.Project1.dll
408デフォルトの名無しさん:2005/05/01(日) 05:56:02
409デフォルトの名無しさん:2005/05/01(日) 13:47:54
>>407
COMのDLLを参照設定したときにできるDLLは、COMが公開しているコクラス/インターフェイス情報を.NETのアセンブリに翻訳したもの。
参照設定したときに、.NET SDKに含まれるtlbimp.exeを使って、自動的に/objディレクトリに作成される。
ローカルコピーのtrue/falseは単に/bin/Debug(あるいはRelease)にコピーするかどうか。

実装はCOMが提供し、COMとのやりとりはRCWという.NETの機能が管理し、クライアントはDLLを使ってメタデータを参照して実行する。
だから、メタデータ不要なレイトバインディングにはDLLは必要ない。C#でやるにはリフレクションベースのコーディングになって死ぬほど不便だが。
410デフォルトの名無しさん:2005/05/02(月) 01:35:16
以下のようなフォームを作りたいと思っています。

1. 親フォーム(親アプリ)の常に前面にいるが、TopMostで最前面表示されているわけではない。
2. 親フォームを最小化した際には同時に最小化される。

要はVisualStudioの検索フォームのようなものです。
2は親フォームの最小化イベントと関連付けて以下略、なんですが、1はなかなか難しい気がします。
MDIウィンドウにすることも考えましたが、MDIだと子フォームが親フォームからはみでることができません。
親と子の状態を常時監視して、うまく配置してやるしかないんでしょうか?
411デフォルトの名無しさん:2005/05/02(月) 01:39:04
>>410
Owner
412デフォルトの名無しさん:2005/05/02(月) 01:58:43 BE:1877524-
.NET 1.1 SP1 でましたね
413デフォルトの名無しさん:2005/05/02(月) 02:08:28
414デフォルトの名無しさん:2005/05/02(月) 02:57:15
おそらくVS2002のことと勘違いしてると思われる。
415デフォルトの名無しさん:2005/05/02(月) 03:21:41
ワラタ
416デフォルトの名無しさん:2005/05/02(月) 07:36:31
VS2002 に SP を適用させたら Windows Update が出来なくなった
417デフォルトの名無しさん:2005/05/02(月) 12:18:49
IEのLANの設定でプロクシ指定しているなら
WinXPのSPのときと同じかも
418デフォルトの名無しさん:2005/05/03(火) 01:09:51
ノータッチデブロイメントで作ったコントロールをIE上に配置して、
そのページをIEで印刷したいと思ったのですが、コントロールは中身無しの状態で印刷されてしまいます。
これをうまく印刷する方法はないでしょうか?
419デフォルトの名無しさん:2005/05/03(火) 01:56:37
VS2002 を使いつづけてる人ってWAREZERですか?
420382です:2005/05/03(火) 02:29:05
以前StreamReaderのことで質問した者です。

StreamReaderは先読みするとのことですが、その先読みはStreamReaderがインスタンス化されているだけで先読みしてしまうのでしょうか。
それとも、ReadLine等のメソッドを実行した時点で、そのときStream上にあるデータを先読みするのでしょうか。

つまり、ReadLineを実行した時点ではまだStream上にないデータについては先読みされないので、その後StreamReaderメソッドを実行する前であれば、NetworkStreamのメソッド(Read等)で読み込んでも大丈夫なんでしょうか?
421デフォルトの名無しさん:2005/05/03(火) 05:56:24
>>420
せいぜい20行の簡単なコンソールプログラムで、そんなの確かめられるんだから、やってみたら?
422デフォルトの名無しさん:2005/05/03(火) 09:58:11
>>420 MSDNにきちんと動作仕様書いてあるよ。一度見たほうがいいよ。

DataGridにデータを追加するとチラツキが起こって具合が悪いです。
WM_PAINTやSetStyleを変更しても起きてしまいます。そうゆう仕様という
ことであきらめるしかないのでしょうか?
423デフォルトの名無しさん:2005/05/03(火) 10:09:34
WM_SETREDRAW
424デフォルトの名無しさん:2005/05/03(火) 10:37:40
>>423
どもです。
425デフォルトの名無しさん:2005/05/04(水) 02:36:40
stringからenumに変換するにはどうすればいいでしょう?

enum A { HOGE,HAGE }

//enum to string
string foo(A a) {return a.ToString();}

//string to enum
A bar(string s) {
return A.Parse(s); //無理ぽ
}

switchかなんかで強引にやるべきなのか。
426420です:2005/05/04(水) 02:43:27
>>421
実際にやってみるとうまくいくのですが、386のようにうまくいってしまう場合もあるようで…。

>>422
MSDNのリファレンス > クラスライブラリ には具体的にどの時点で先読みを行うのか、という箇所は見つけることが出来ませんでした…。
探し方が悪いのでしょうか…。
MSDNのどのあたりか、ヒントだけでももらえませんでしょうか
427デフォルトの名無しさん:2005/05/04(水) 03:19:55
>>425
(A)TypeDescriptor.GetConverter(typeof(A)).ConvertFromString("HOGE")
こんな感じで変換はできる。
でも、switchで強引にやった方が速いんだけど。
428デフォルトの名無しさん:2005/05/04(水) 04:11:47
>>425 >>427
いや、えーと、

return (A)Enum.Parse(typeof(A), value);

Enumクラスのメンバを一回見とくことをすすめる。ただ遅いけどな。
429デフォルトの名無しさん:2005/05/04(水) 07:40:44
C#の変数を宣言するときは、頭にハンガリアン表記を着けてますか?
HPで見たコーディング規約には、ハンガリアン表記はしない。と
書いていたんで、他の人はどうなのかと思って質問しました。
430デフォルトの名無しさん:2005/05/04(水) 08:13:13
>>429
俺は付けてないよ。初めて触った言語がC#なもんでね。
インターフェースのIは使うけどね。
431デフォルトの名無しさん:2005/05/04(水) 09:08:59
版画利アンは爆裂するだけで、いいことあまり無いからやってないな。
Cで書くときは今でもハンガリアンだけど
432デフォルトの名無しさん:2005/05/04(水) 13:54:05
MSのコーディング規約にハンガリアン使うなとあったから使ってない。
433デフォルトの名無しさん:2005/05/04(水) 14:23:43
規約に書いてるのは基本的に「外から見える」メンバだけだよ。
privateメンバについては定められていない。
実際mscorlib.dllのクラスを覗いてみればprivateメンバにm_プリフィクスとか普通に付いてる。ハンガリアンはあんまり見ないが。

privateメンバには、コントロールにだけは種類がすぐ分かるようにtxtとかlblとかプリフィクスつけることがある。
434デフォルトの名無しさん:2005/05/04(水) 14:44:33
たしかに、UIコントロールにはプレフィックスつけるようにしてるな。
435デフォルトの名無しさん:2005/05/04(水) 15:01:47
俺は大体VSのデフォルトの名前をそのまま使ってる
436デフォルトの名無しさん:2005/05/04(水) 15:17:55
Form1最強伝説。
437デフォルトの名無しさん:2005/05/04(水) 15:46:48
Form1はやばいだろw
438デフォルトの名無しさん:2005/05/04(水) 15:50:05
439デフォルトの名無しさん:2005/05/04(水) 19:33:50
Form1ワロタ

さておき、コントロールの変数名はどうするか迷う。
440デフォルトの名無しさん:2005/05/04(水) 19:36:08
>>439
俺は [クラス名の先頭を小文字にしたもの] + [通し番号] を変数名にしちゃう
GUI はあと付け的に考えてっから
441デフォルトの名無しさん:2005/05/04(水) 21:09:01
俺だってさ、GUIはあと付け的に考えてっから、VSのデフォルト値のままなんだよなw
Form1最強

442440:2005/05/04(水) 21:17:32
Form1 は変数名じゃなくてクラス名だw そこんとこよろしくw
443デフォルトの名無しさん:2005/05/05(木) 00:06:01
書籍で見た C# コーディング規約で、定数が "全て大文字、
単語区切りはアンダースコア" となっていたけど、
納得いかない。漏れは Pascal 記法にしてる。
プロパティと命名規則を同じにすれば、
定数からプロパティへこっそり変えることもできるし。

誰か同士はいないか。
444デフォルトの名無しさん:2005/05/05(木) 00:08:08
そういや定数使ってないなぁ
445デフォルトの名無しさん:2005/05/05(木) 00:22:54
>>443
同じく。
ていうか全大文字はMSの勘違いじゃないかと疑っている。
だってInt32.MinValueを見れば明らかに他のと命名規則同じだもん。
446443:2005/05/05(木) 00:27:20
>>445
MS公式のコーディング規約じゃなくて、
日本のどこかの団体が決めたコーディング規約な。

その書籍のフォーラム(と思われるところ)で、すでにその話題があったようだが、
http://www.kawabata.com/Forums/ShowPost.aspx?PostID=298
いつ改訂するつもりなのだろうか。
447デフォルトの名無しさん:2005/05/05(木) 00:33:15
ありゃ、ほんとだ。
多分私もそれを読んで違和感を覚えたんだが、MSが定義した規約とごっちゃになってた。
448デフォルトの名無しさん:2005/05/05(木) 00:52:43
>>443
俺も全部大文字はいやだったから
__(アンダーバー*2) + camelにしてたけど
なんかとかぶってるし見にくいから大文字にした。
449デフォルトの名無しさん:2005/05/05(木) 01:58:56
変に変数名などに凝る奴に限って使えないんだよね

入社して3年も立つのにCOMサーバもかけない奴に
「メンバ変数には~をつけてください」
なんて言われても
はぁ?
って感じなんだけど。
450デフォルトの名無しさん:2005/05/05(木) 02:40:39
俺も書けないが
451デフォルトの名無しさん:2005/05/05(木) 02:52:13
普通かけない
452デフォルトの名無しさん:2005/05/05(木) 07:43:15
453デフォルトの名無しさん:2005/05/05(木) 17:38:41
低レベルな質問ですが
#region,#endregion  ←コイツら、なんて言うんですか?
454デフォルトの名無しさん:2005/05/05(木) 17:45:02
ヘルプ見ろ。
455デフォルトの名無しさん:2005/05/05(木) 18:05:11
>>452
俺の隣にいる野郎はエイリアン記法を使ってるに違いない。冗談はさておき、
最近のコーディングはIDEの専用エディタの使用を前提にしているので開発環境が
想定してる記法にしておいたほうが無難、C#ならMSのやり方にしとけば問題ないと思う。
ただC#とJavaでキャメルとパスカルの使い分けが微妙に違うので混乱する。
クラスは明確に定義されているし型やフォーカスの情報はIDEが教えてくれるから
ハンガリー記法はもはや不要。
456デフォルトの名無しさん:2005/05/05(木) 18:25:52
正直 camel でも Pascal でもハンガリーでも別に良いんだけど、
同じプロジェクト内ではせめて統一して欲しいと思ってる

…… IDE の自動補完があっても、一瞬戸惑うし
457デフォルトの名無しさん:2005/05/05(木) 18:44:46
担当が好き勝手に名前付けるのはやだな
privateならいいけど
458デフォルトの名無しさん:2005/05/06(金) 00:06:57
メソッドって、camel と Pascal どっちが多いのかな。
おいらは Pascal 派だけど。
459デフォルトの名無しさん:2005/05/06(金) 00:20:10
すいません。ちょっと教えてください。

WinForm の DataGrid でヘッダーカラムクリックした時のソート処理を
フックすることってできますか?

具体的には DataGrid に明細行と合計行があってソートの条件に関係無く
常に合計行を最後の行に表示したい場合とかどうすればいい?
460デフォルトの名無しさん:2005/05/06(金) 03:36:15
断然Pascal
461デフォルトの名無しさん:2005/05/06(金) 03:40:14
>>458
privateはcamel、publicやprotectedはPascal ってしてる
462デフォルトの名無しさん:2005/05/06(金) 09:30:24
>>461
俺もそうしてる。
当初はメソッド名はprivateでもcamelだったけど変えた。
463462:2005/05/06(金) 09:31:44
×当初はメソッド名はprivateでもcamelだったけど変えた。
○当初はメソッド名はprivateでもPascalだったけど変えた。
464デフォルトの名無しさん:2005/05/06(金) 16:29:32
画像をカジノなんかにある、スロットのように
スクロールすることってできますか?
465デフォルトの名無しさん:2005/05/06(金) 16:34:35
できるよ
466デフォルトの名無しさん:2005/05/06(金) 16:38:08
http://YahooBB219189144014.bbtec.net/
おkwwwwwwwwwうはっwwwうはっwwwうはっwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwww

おkwwwうぇwwwおkwww
467デフォルトの名無しさん:2005/05/06(金) 17:30:31
エクスプローラーの切り取り後みたいな感じの処理って、どうやるんでしょ?
ListViewItemにそういう処理ってありますか?
468デフォルトの名無しさん:2005/05/06(金) 18:00:17
ん?アイテムを灰色にするってこと?
469デフォルトの名無しさん:2005/05/06(金) 18:13:11
>>468
エクスプローラーで切り取り処理をやるとアイコンの色が半透明というか減色というか、
とりあえず色が変わってるので、そういう処理がListViewについてるのかなーと。
470デフォルトの名無しさん:2005/05/06(金) 18:39:23
Layeredwindow
471デフォルトの名無しさん:2005/05/06(金) 18:49:11
DESのCryptを.netでサクッとやる方法を教えてください。
472デフォルトの名無しさん:2005/05/06(金) 18:56:48
System.Security.Cryptography.DESクラスとSystem.Security.Cryptography.CryptoStreamクラスでごにょごにょする。
473デフォルトの名無しさん:2005/05/06(金) 22:06:32
javaやってて、これからC#をやろうと思いますが、間違えやすいポイントはありますか?
474デフォルトの名無しさん:2005/05/06(金) 22:08:43
別に
475デフォルトの名無しさん:2005/05/06(金) 22:51:11
OpenFileDialogを表示するとき位置やサイズを指定したいんですがどうすればいいでしょうか。
476デフォルトの名無しさん:2005/05/06(金) 23:09:02
>>475
諦める。
Win32APIのGetOpenFileName関数とOPENFILENAME構造体を駆使すれば可能だと思うけど。
477デフォルトの名無しさん:2005/05/07(土) 00:50:57
478デフォルトの名無しさん:2005/05/07(土) 12:35:55
>>451
入社3年でそれだと、首にしてほしいんですけど・・・
479デフォルトの名無しさん:2005/05/07(土) 13:28:39
Sealed にすると実行速度が速くなったりしますか?
480デフォルトの名無しさん:2005/05/07(土) 15:38:59
>>479
仮想メソッドなしという前提でコンパイルされるから、若干速くなるらしい。
481デフォルトの名無しさん:2005/05/07(土) 15:46:37
OK!Sealedにしまくるぜ
482デフォルトの名無しさん:2005/05/07(土) 17:21:12
画像をカジノなんかにある、スロットのように
スクロールすることってできますか?

その場合、どの部分を操作したらいいでしょうか。
483デフォルトの名無しさん:2005/05/07(土) 17:22:49
クライアント領域を目に優しい範囲でBtlする
484デフォルトの名無しさん:2005/05/07(土) 21:29:16
コンソールを拡張するプログラムを作っています。
MSDN のサンプルを参考にして、自分の System.Console に
バックグラウンドで実行させた CMD.EXE の出力を
表示させることができました:
  :
  :
  :
  string input = Console.ReadLine();
  process.StandardInput.WriteLine(input);
  process.StandardInput.Close();
  process.WaitForExit();
  System.Console.WriteLine(process.StandardOutput.ReadToEnd());

しかし、(i) CMD.EXE が全て出力し終わらないと表示が始まらない上に、
(ii) process.StandardInput.Close() しないと途中で固まってしまいます。
この2点を何とかできないものでしょうか。
485デフォルトの名無しさん:2005/05/07(土) 22:05:43
>>484
> (i) CMD.EXE が全て出力し終わらないと表示が始まらない

WaitForExit()してるんだから当然。
inputで起動したプログラムが実行されている間はWaitForExitで待機してる。
実行が完了してから=プロンプトに表示し終わってからReadしてるわけだ。

> (ii) process.StandardInput.Close() しないと途中で固まってしまいます。

普通にcmd.exeを起動してみる。
WaitForExit……無限に待機するのは分かるよね。
ユーザがexitを入力するまではcmd.exeは終了しないんだから。

その代わりになっているのがこの場合のStandardInput.Close。
これ以上入力されない=終了だから(動かしてるプロセスがなければだけど)。
だからStandardInput.Closeしなければ幾つでもコマンドは発行できるわけで。
その間WaitForExitと言われてもcmd.exeそのものは終了できない。
486484:2005/05/08(日) 01:13:22
>>485
ありがとうございます。
  process.StandardInput.Close();
  // process.WaitForExit();
としましたが、動作自体には変わりありませんでした。
最後に一気に表示するのではなく、例えば ping で一行一行
リアルタイムに表示されるようなものを考えています。そのようなことは不可能なのでしょうか。

ストリームの追加部分の差分のみを表示すればうまくいくと考えたのですが、
ストリームの末端にたどり着いたことを検地する手段が見つからず、結局
挫折してしまいました。

質問を重ねてしまい大変申し訳なく思っていますが、もしよろしければ
どうかご教授のほど願います。
487デフォルトの名無しさん:2005/05/08(日) 03:15:02
>>486
ReadToEndも、ストリームがEOFになるまでブロックするんだが。
ReadLineで一行ずつ拾っていってやればいい。

ただ、StandardInputに書き込む事で起動した(cmd.exeが起動させた)プロセスが終了したかどうかの判断は多分できないので、
よく考えとくこと。
488デフォルトの名無しさん:2005/05/08(日) 12:33:50

linkLabel1.LinkVisited = true;
// URL表示
System.Diagnostics.Process.Start(this.linkLabel1.Text);

としているのですが
'System.ComponentModel.Win32Exception' のハンドルされていない例外が system.dll で発生しました。
と出てIEが出てきません。
linklabelのtextにはhrrp://~から始まるアドレスを入れているので間違いはないと思います。
何が原因なのでしょうか?
489デフォルトの名無しさん:2005/05/08(日) 13:10:02
確かにhrrp://なら例外が出るだろうが。
例外メッセージはそれだけ?
490488:2005/05/08(日) 13:15:37
>>489
性格には
http://
でした。
もちろんhttp://ですが変わらずエラーが出ます
エラーの他には
追加情報 : この操作に対して指定されたファイルには、アプリケーションが関連付けられていません。
と出ています。
他にもプロセススタートなど使用してますがそれは正常に動作しています。
491デフォルトの名無しさん:2005/05/08(日) 13:35:53
関連づけ……? ファイルが見つかりませんかパラメータが間違ってますなら分かるんだが……。
スタート>ファイル名を指定して実行で直接URLを指定すればブラウザが開くよね?

やはりlinkLabel1.Textが変なことになってるとしか考えられないな。
Process.Startする直前のlinkLabel1.Textの値をブレークポイントとかで確認してみたらどう?
492484:2005/05/08(日) 14:37:29
>>487
ReadLine を使用してとりあえず成功しました。仰られたとおり、終了がキャッチ
できないのと、 while(StandardOutput.Peek() != -1) で回しても出力が
一時停止した時点で終了してしまいました。 これを機にシステムの構造を見直してみます。
ありがとうございました。
493デフォルトの名無しさん:2005/05/08(日) 15:01:27
>>490
標準のブラウザが見つからないってことじゃないのか?
タブブラウザとか入れて標準のブラウザの設定を変えた後にそのブラウザを削除したとか。
494490:2005/05/08(日) 16:45:40
>>491 >>493

レスありがとうございます。
以前にFireFoxを入れて削除した経緯がありまして
IEなどの標準ブラウザを指定してやったら
うまくいきました。
原因はC#ではなかったようです。
アドバイスありがとうございました。

495デフォルトの名無しさん:2005/05/08(日) 19:34:55
P/Invoke で ImmSetCompositionWindow 呼び出して、Form に対して未変換文字の表示位置を
Point にて設定しようとしたんですが、何故か Y 座標だけしか設定されなくて困っています

直後に ImmGetCompositionWindow 呼び出して逆取得したら、ちゃんと X, Y ともに設定されていたので
P/Invoke の仕方そのものは間違っていないようなのですが、予想される問題点が分かる方、ご教授ください
496デフォルトの名無しさん:2005/05/08(日) 20:18:04
>>495
COMPOSITIONFORM.dwStyleにCFS_POINTを設定してる?

> The coordinates (略) are subject to adjustment by the IME.

って書いてるけど。
//手元ではCFS_POINTでもいけてるしCFS_FORCE_POSITIONと実行結果が変わらないんだが……。
497495:2005/05/08(日) 20:38:39
>>496
はい。CFS_POINT = 2 は設定してあります
中身は↓なことやってます

=====

// WM_IME_STARTCOMPOSITION が送られてきたときに
CompositionForm cf = new CompositionForm();
cf.Style = CFS_POINT;
cf.Pos = CompositionPoint;
int hIMC = ImmGetContext(Owner.Handle); // Owner は Form クラスのインスタンス
ImmSetCompositionWindow(hIMC, ref cf);
// cf.Pos = Point.Empty; // 以下3行はチェック用
// ImmGetCompositionWindow(hIMC, ref cf);
// MessageBox.Show(cf.Pos.ToString());
ImmReleaseContext(Owner.Handle, hIMC);
498495:2005/05/08(日) 20:40:50
あ、ちなみに
>何故か Y 座標だけしか設定されなくて
っていうのは、Y 方向への調整は出来ても、右端が必ずフォームの左端に接してしまうという意味です
499495:2005/05/08(日) 20:45:35
>>498
『右端が左端』 じゃなくて 『左端が左端』 だなw
500デフォルトの名無しさん:2005/05/08(日) 20:51:05
496の
> The coordinates (略) are subject to adjustment by the IME.
は読める?
「座標はIMEによる調節に従う」って書いてあるんだけどさ。
MSDNでCOMPOSITIONFORM構造体をチェックした?
501495:2005/05/08(日) 21:04:31
>>500
あ、チェックしました……が、なんか見落としている予感……
ちなみに、CFS_FORCE_POSITION 指定しても変わらなかったです
502デフォルトの名無しさん:2005/05/08(日) 22:00:42
う~ん、再現しないから検証できないや。
ImmGetCompositionWindowで取得したCompositionFormをそのままImmSetCompositionWindowしても左に寄るの?
503デフォルトの名無しさん:2005/05/09(月) 00:21:37
質問です。
Bitmap の PixelFormat を非 Format32bppArgb から Format32bppArgb に変換するには
どうしたらよいでしょうか。

bitmap 変数に元の Bitmap が入っているとして、

Bitmap newBitmap =
new Bitmap( bitmap.Width, bitmap.Height, PixelFormat.Format32bppArgb );
Graphics graphics = Graphics.FromImage( newBitmap );
graphics.DrawImageUnscaled( bitmap, 0, 0 );
graphics.Dispose();
Bitmap oldBitmap = bitmap;
bitmap = newBitmap;
oldBitmap.Dispose();

とすればやりたいことは実現できるのですが、もっとスマートなやり方は
ないかと思い、質問させていただきました。
504デフォルトの名無しさん:2005/05/09(月) 00:28:58
それが一番シンプルじゃね?
505デフォルトの名無しさん:2005/05/09(月) 09:33:22
WndProc(ref Message m) で送られてくるm.Msgの
定数値はどうやって知ることができますか?
506デフォルトの名無しさん:2005/05/09(月) 10:29:18
>>505
別名で定義されてるので、知る必要は無い。
507デフォルトの名無しさん:2005/05/09(月) 10:59:40
えーと、例えば

const int WM_HSCROLL = 0x114;

のように定義して下のようにswitchで判別するという
よく紹介されている方法がありますよね。

switch (m.Msg) {

  case WM_HSCROLL :
  // 処理
  break;

}

で、この場合、
WM_HSCROLL が 0x114 であるということを知らないといけないわけですが、
その情報はどうやって得ればよいのかということです。

実は.netに識別子が用意されたりしているのでしょうか。
508デフォルトの名無しさん:2005/05/09(月) 11:07:02
ぐぐればすぐ見つかるだろ。
509デフォルトの名無しさん:2005/05/09(月) 11:19:07
まぁ、メッセージの名前で検索すれば出てきますけども、
だから検索すればいいじゃないかっていうのは釈然としませんねぇ。

定数の出所がわからないってそんな。
510デフォルトの名無しさん:2005/05/09(月) 12:33:04
Platform SDK をダウンロードしてヘッダファイルを調べれ。
511デフォルトの名無しさん:2005/05/09(月) 13:13:31
だが、アレさがすのめんどくさいよな。
512デフォルトの名無しさん:2005/05/09(月) 13:30:24
そうでもない。
513デフォルトの名無しさん:2005/05/09(月) 14:02:43
>>512
ぜひコツを教えてくれ。
514デフォルトの名無しさん:2005/05/09(月) 14:44:01
>>510
生Windows.hを見るしかないのかぁ…。ありがとう。
気が向いたらC#で定義し直すことにしよう。
515デフォルトの名無しさん:2005/05/09(月) 15:35:04
textBox1.Textに
2005/05/09 12:34:56
という風にテキストで時間を入力しているのですが
これをDateTimeなどに変換するのはどうすればいいのでしょうか?
このようなレベルの低い質問で恐縮なのですが
アドバイスいただければと思います。
516デフォルトの名無しさん:2005/05/09(月) 15:38:03
DateTime.Parse
517デフォルトの名無しさん:2005/05/09(月) 18:30:31
Windows インストーラ プロジェクトで デフォルトのインストール先を
D:\MyApp のように C:ドライブ 以外に指定するにはどうすればよいのでしょう?
518デフォルトの名無しさん:2005/05/09(月) 18:43:47
Cのときみたく、バイト配列に読み込んだデータを構造体ポインタ使ってアクセスすることって出来ないんですかね?
519デフォルトの名無しさん:2005/05/09(月) 19:41:51
520518:2005/05/09(月) 20:48:24
>>519
サンクス

「ずばり」では、ないようですが参考にさせて頂きます
521デフォルトの名無しさん:2005/05/09(月) 20:57:11
WIN32API.TXT
とかってファイルがどこかに落ちてたような…
そいつと.NET用のAPIViewer見たいの使えば楽
522デフォルトの名無しさん:2005/05/09(月) 21:52:13
>>518
構造体がクラスインスタンスを含まないのならunsafeとfixedを使えば可能。
配列を扱うのが極めて面倒だが。
523495:2005/05/09(月) 23:53:29
レスが遅くなってすみません

原因が未だにわからないので、とりあえずこちらの (上手く動いていない) コードをあげてみます
かなり汚いコードですが、どうかよろしくお願いいたします m(_ _)m

tp://ranobe.sakuratan.com/up/updata/up36724.lzh
524デフォルトの名無しさん:2005/05/10(火) 01:13:44
>>523
なんで CompositionForm の DWORD dwStyle が ulong == System.Int64 で宣言されてるんだ……。
そりゃ POINT ptCurrentPos の上位4バイト == ptCurrentPox.x が0で埋められるわ。

ついでに言っておくと、
・POINT構造体とSystem.Drawing.Point構造体は同じ構造だけど、
 RECT構造体とSystem.Drawing.Rectangle構造体は別構造。
・ハンドルはSystem.IntPtrで宣言すべし。
・LogFontのStructLayout属性にCharSetの定義が抜けてる。
・CompositionForm.Styleとかは列挙体で宣言・定義した方が自然じゃない?
・ImmGetCompositionWindowの仮引数CompositionFormはrefよりoutの方が、
 事前の初期化がいらないし入力が無意味であるとはっきりできる。

//ImmGetCompositionStringで取得できる文字列って必ずしもNULLターミネートされてないっぽいな……(w;;
525デフォルトの名無しさん:2005/05/10(火) 01:24:35
おっと、ulongだからSystem.UInt64だったな。
526デフォルトの名無しさん:2005/05/10(火) 11:32:27
すごい初心者な質問だと思うんですが
起動時にtextBox1にフォーカスした状態にするには
どうすればよいのでしょうか?
3ヶ月もやっててこんなこと聞くのは恥ずかしいんですが
よろしくお願いします。
527デフォルトの名無しさん:2005/05/10(火) 11:43:09
528デフォルトの名無しさん:2005/05/10(火) 11:43:31
>526
textBox1.Focus()
529デフォルトの名無しさん:2005/05/10(火) 14:47:56
>>527
これは知らなかった。
530デフォルトの名無しさん:2005/05/10(火) 14:50:08
>>527
しらんかった・・・


ナイス情報
531デフォルトの名無しさん:2005/05/10(火) 14:55:11
>>529-530
VCLから流れてきてる人間にとっては普通なんだけどね。
532デフォルトの名無しさん:2005/05/10(火) 15:26:03
>>531
VBからの流れ者だと気づかない罠w
533495:2005/05/10(火) 18:00:29
>>524
>ulong
OTL

いろいろと有り難うございました m(_ _)m
何とかいけそうです


……IME のハンドル、ぐぐって見つかった GotDotNet の掲示板だと int でやってたもんで orz
534デフォルトの名無しさん:2005/05/10(火) 18:38:51
DataGrid を継承したクラスで、CurrentCellChanged イベントに次のコントロールにフォーカスを移す処理をさせたいのだが、
 protected override void OnCurrentCellChanged(EventArgs e)
の中に
    this.TopLevelControl.SelectNextControl(
     this,
     true,
     true,
     true,
     true
     );
とか書いても、一瞬次のコントロールにフォーカスが移るのだがまたなぜかDataGridにフォーカスが戻ってくるんだけど、
原因/対処法分かる人いませんか?
535デフォルトの名無しさん:2005/05/11(水) 08:22:03
>>531
タブオーダー設定して、最初のコントロールにフォーカスがくるってことで
十分だったからね。
536デフォルトの名無しさん:2005/05/11(水) 11:01:02
質問です。
Windowsアプリ作成中なのですがSQLServerからDataSetを取得して、
そのテーブルにDataRowを追加するのですが、下のエラーがでます。
System.OverflowException: Int16 型の値が大きすぎるか、または小さすぎます。
値がInt16の範囲にあるかどうかを調べればいいのかと思うんですが、
将来的にテーブルのInt32に拡張される可能性があるんで、それでも稼動できるようにしたいんですが、
こういう場合の値のチェックの方法などはどうやっておけばいいんでしょうか?

DataSetは
SqlDataAdapter adp = new SqlDataAdapter( sql, con );
DataSet dataSet = new DataSet( table );

adp.FillSchema( dataSet, SchemaType.Source, parameterTableName );
adp.MissingSchemaAction = MissingSchemaAction.AddWithKey;
adp.Fill( dataSet, parameterTableName );

DataRow changeRow = dataSet.Tables[ tablename ].NewRow();
changeRow[ columnName ] = 値; //ここでエラー
dataSet.Tables[ tablename ].Rows.Add( changeRow );
537デフォルトの名無しさん:2005/05/11(水) 11:07:50
>>536
される可能性があるって言うか現在既にInt16に入りきらない数値を入れようとしてるんだろ?
538デフォルトの名無しさん:2005/05/11(水) 12:25:36
Stringクラスのエイリアスであるstringの存在理由がまるっきり分からないのだが誰か教えてくれ
539デフォルトの名無しさん:2005/05/11(水) 12:35:57
慣習。以上でも以下でもない。

System.String s;
string s;

どっちでもいいよ。


nullableの?も中身はジェネリクス

System.Nullable<int> n;
int? n;

これもどっちでもいいよ。
540デフォルトの名無しさん:2005/05/11(水) 12:40:06
PictureBoxの中で画像をスロットのようにスクロールすることはできますでしょうか?
できるとすれば、どのようなメソッドがありますか?
541デフォルトの名無しさん:2005/05/11(水) 12:44:05
>>540
がんばって自前で描画。タイマつかうとか。
542デフォルトの名無しさん:2005/05/11(水) 12:44:54
質問お願いします。

ShowDialogでフォームを新しく開くんですが、
きちんとモーダルにならず、呼び出し元フォームをクリックすると
そのまま切り替わってしまいます。
form.ShowDialog(this)で呼び出すと、前面表示にはなるんですが、
やっぱり呼び出し元を選択できてしまいます。
ボタンやコントロールのイベントから呼び出すとokなんですが、
メソッド内から呼び出す場合はモーダルにはならないんでしょうか。
色々調べたけども情報見つからず、、初心者ですいませんがお願いします。
543デフォルトの名無しさん:2005/05/11(水) 13:06:24
情報不足なのでもっと詳しく。
再現コードが書けるならそれが一番良いが。
544デフォルトの名無しさん:2005/05/11(水) 16:43:20
>>542
親 Form を作ったスレッドとは別のスレッドから ShowDialog するとそうなります
頑張って親 Form のスレッドが ShowDialog するように改造してくださいな
545デフォルトの名無しさん:2005/05/11(水) 16:50:05
>>542だけで、別スレッドから呼び出してるってのを思いつくのってすげえな
546デフォルトの名無しさん:2005/05/11(水) 16:52:36
>>545
>ボタンやコントロールのイベントから呼び出すとok
ここからです

多分別スレッドから呼び出しているで FA
非同期デリゲート使ってて気づいてない可能性もあり
547542:2005/05/11(水) 19:16:46
542です、FAがそのまま正解でした。
スレッドを詳しく知らないまま使ってたのが原因か。
ここから改造するのは骨が折れる。。(´Д`)
しかし、皆さんさすがですね、こんなに早く解決すると思ってませんでした。
ありがとうございましたー。
548デフォルトの名無しさん:2005/05/11(水) 19:47:53
Visual C#で TextBoxに入力される文字を
バイト数で制限することって可能なんでしょうか?
549デフォルトの名無しさん:2005/05/11(水) 20:01:17
できるよ。
やり方は…そのまんまだな>バイト数で制限
550デフォルトの名無しさん:2005/05/12(木) 00:02:38
MaxLengthだったかに設定するだけだな。
551デフォルトの名無しさん:2005/05/12(木) 00:05:54
>>547
this.Invoke(new MethodInvoker(form.ShowDialog));
とか強引にやってみる。
552デフォルトの名無しさん:2005/05/12(木) 00:07:15
ちゃうわ、戻り値あるからそのままじゃダメか…
553デフォルトの名無しさん:2005/05/12(木) 00:07:58
MaxLengthは文字数であってバイト数じゃないよ
554デフォルトの名無しさん:2005/05/12(木) 00:10:25
文字数の倍がバイト数だから問題ないよ
555デフォルトの名無しさん:2005/05/12(木) 00:11:58
もっとおいしそうな餌をくれYO
556デフォルトの名無しさん:2005/05/12(木) 00:12:21
おっと・・・
557デフォルトの名無しさん:2005/05/12(木) 01:01:38
Streamをコピーするには
Readでbyte[]受け取ってWriteするしかないんですかね?
めんどうじゃないですか?
558デフォルトの名無しさん:2005/05/12(木) 01:11:04
事実上1文字2バイトなわけだが。
559デフォルトの名無しさん:2005/05/12(木) 01:12:04
Shift-JISに変換してカウントすりゃいいんじゃねーの?
560デフォルトの名無しさん:2005/05/12(木) 01:12:30
>>553
じゃバイト数ってなんだ?
561548:2005/05/12(木) 10:08:50
>>548
自己解決しました。

TextChangedで

byte[] bTemp = System.Text.Encoding.Default.GetBytes ( TextBox1.Text );
int len = bTemp.Length;
// 40バイトに制限
if ( len > 40 )
{
TextBox1.Text = System.Text.Encoding.Default.GetString ( bTemp, 0, 40 );
// ↑で入力カーソルが先頭にいっちゃうので末尾にもっていく
TextBox1.Select ( TextBox1.Text.Length, 0 );
}

で出来ました(・∀・)
かまってくれた皆様サンクス。
562デフォルトの名無しさん:2005/05/12(木) 13:30:18
>561
余計なお世話かもしれないけど、無条件に
カーソルを末尾に飛ばすのは不味いんじゃないのかな?

末尾以外でのTextChangedでも後ろへ飛んでっちゃうし。
563デフォルトの名無しさん:2005/05/12(木) 13:59:00
delegate void ThreadMethodDelegate(ArrayList files);
ThreadMethodDelegate d ;
private boid make_list()
{
ArrayList files = new ArrayList();
//送信ファイル一覧作成
//forループの中でファイルを順次読み出し、10MBになるごとにひとつのリストにして
//送信スレッドにリストを渡す。 同時に複数のスレッドが送信する。
d = new ThreadMethodDelegate(send_files);
d.BeginInvoke(files,null,null);
}

private void send_files(ArrayList files)
{
//送信処理。
}
ってしてるのですが、送信処理すると同じファイルが何度も送られてしまいます。
リスト作成メソッドでd.Invokeする時点だと毎回望みどおりのリストを渡しているのですが、
send_filesスレッドの頭で受けたfilesを書き出すと同じリストを何度も受けているようです。
そのため、リストは渡しているはずなのに、送信されないファイルが多数出てます。

何を見直せばいいんでしょうか?
564デフォルトの名無しさん:2005/05/12(木) 14:14:27
forループの中でどういうリストを作ってるんだ?
そのリストはどうしてるんだ?
そのコードだけみたらBeginInvokeは一度しか呼ばれてないようだがそれでいいのか?
565563:2005/05/12(木) 14:21:37
private boid make_list()
{
for(int i = 0 ; i < n; i++){
ArrayList files = new ArrayList();
files.Add(hoge[i]);
if(10MB以下かどうかの判定){
d = new ThreadMethodDelegate(send_files);
d.BeginInvoke(files,null,null);
}
}
}
大まかな動作としてはこんな感じにしてます。
d.BeginInvokeにBreakPointでfilesをチェックしました。

よろしくお願いします。
566563:2005/05/12(木) 14:30:21
何度もすいません。
private boid make_list()
{
ArrayList files = new ArrayList();
for(int i = 0 ; i < n; i++){
files.Add(hoge[i]);
if(10MB以下かどうかの判定){
d = new ThreadMethodDelegate(send_files);
d.BeginInvoke(files,null,null);
files.Clear(); が抜けてました。
}
}
}
d.BeginInvokeした直後にリストをクリアして次のリストを作ってるのですが、
クリアした後でfilesの内容がsend_filesスレに伝わってるときもあるみたいです。

d.BeginInvokeした後、実際にsend_filesが"開始”したことを確認する方法ってあるのでしょうか?
567548:2005/05/12(木) 14:31:47
>>562
たしかに…‥

int sel = TextBox1.SelectionStart;
TextBox1.Text = System.Text.Encoding.Default.GetString ( bTemp, 0, 40 );
// ↑で入力カーソルが先頭にいっちゃうのでカーソル位置にもっていく
TextBox1.Select ( sel, 0 );

これで、それっぽくなりました。
568デフォルトの名無しさん:2005/05/12(木) 17:03:07
>>566
files.Clear();
をけせ。BeginInvokeは非同期だ
send_filesとd.BeginInvokeとfile.Clear()は同時に実行されうる。

簡単に言えば、渡したものとそこでクリアしてるArrayListが同じもので、
それにたいして、send_filesとfiles.Clear()を同時に実行してるんだ
どうなるか、に関しては状況によって異なるんで分からんが、
クリアされてからfiles_sendが実行されるとか、files_send中にクリアされるとか
そんな感じになるだろ
569563:2005/05/12(木) 17:47:16
レスありがとうございます。
ArrayListは参照型だから参照元が書き換わると(files.Clear()されると)
スレッド内でも変わってしまうって理解でいいですか?

send_fileスレッドの頭で
ArrayList files_ = (ArrayList)files.Clone();
としてみました。
570デフォルトの名無しさん:2005/05/12(木) 17:59:42
つかループ毎にArrayListを宣言・初期化すればいいじゃん。
571デフォルトの名無しさん:2005/05/12(木) 19:41:46
Windowsアプリを作る時に設定の保存って皆どうしてる?
App.config使うと読む時は便利だけど書く時ってアプリ側から出来ないじゃん。アプリ閉じてる時にメモ帳で触るしかない。
何か共通で用意されてる方法ってあるんですか?昔のiniファイルの操作方法みたいに。
あるんだったら誰か教えて下さい。
572デフォルトの名無しさん:2005/05/12(木) 20:26:17
シリアル化してる。
573デフォルトの名無しさん:2005/05/12(木) 20:27:56
>>571
俺は設定を保存するXMLファイルを使ってる。
構成ファイルは俺は再コンパイルなしに定数的なものを書き換えるものとして使ってる。

どこに保存するかの問題もあるから共通の用意された方法はないんじゃね?
574デフォルトの名無しさん:2005/05/12(木) 21:47:01
俺も独自のXMLに書いてる。
2.0からは.configにかけるらしいが。
575デフォルトの名無しさん:2005/05/12(木) 21:58:38
>>571

俺は class Settingみたいなもんを作ってフィールドに設定
項目を保存してbinaryformatterでシリアライズしてるかなぁ。
個人別の設定はGetFolderPath(SpecialFolder.Personal)に
保存。
576デフォルトの名無しさん:2005/05/12(木) 22:52:30
> ArrayListは参照型だから参照元が書き換わると(files.Clear()されると)
> スレッド内でも変わってしまうって理解でいいですか?
なーんか微妙に引っかかるな…

参照型って結局参照先に何かオブジェクトがあって、
変数とかはそれを指してるってことだぞ。
参照でオブジェクトをメソッドに渡すってことは、
こちらとメソッドの実行先で同じオブジェクトを操作してるんだから…

スレッド内でも変わってしまうとかっていうよりも
もともと同じ物を見てるんだから。
577デフォルトの名無しさん:2005/05/12(木) 22:54:28
>>575
個人的にはXMLシリアライズの方が好み。
単に設定ファイルを手でいじれるからってだけだが。
578デフォルトの名無しさん:2005/05/12(木) 23:05:05
XmlSerealizerは固まるからなぁ
579デフォルトの名無しさん:2005/05/13(金) 00:30:54
>>577

ま、好みだね。
ただ、シリアル化したもんを変にいじって例外上がると
設定が全部吹っ飛んじゃうから、設定ファイルを手で書き換える
ことを考慮に入れるなら、シリアル化より伝統的なiniファイルのほうが
いいかなと思う。
580デフォルトの名無しさん:2005/05/13(金) 00:48:18
そこでXmlTextReaderですよ
581デフォルトの名無しさん:2005/05/13(金) 01:19:19
>>569 10MBのデータCloneなんてするな。Queue使ってなんちゃって排他制御じゃだめなのか?
public struct Data{public string FileName;public int FileSize;}

delegate void StartSend();
public class ListFactory{
StartSend startSend;Thread MakeSendListThread;Queue ListDataQue;Random rand;bool NowSend = true;
public ListFactory(){
this.MakeSendListThread = new Thread(new ThreadStart(MakeListData));
this.MakeSendListThread.Start();this.ListDataQue = new Queue(); rand = new Random();}
private void MakeListData(){
while(true){
if(NowSend || this.ListDataQue.Count == 0){
NowSend = true; Data data = new Data();
int size = rand.Next(1, 10000);data.FileName = "name" + size.ToString(); data.FileSize = size;
lock(ListDataQue)
this.ListDataQue.Enqueue(data);
if(this.ListDataQue.Count == 5){
startSend = new StartSend(SendList);
startSend.BeginInvoke(null,null);
this.NowSend = false;}}
else
Thread.Sleep(1000);}}
private void SendList(){
lock(ListDataQue){
for(; ListDataQue.Count > 0;){
Data data = (Data)ListDataQue.Dequeue();
Console.Write(data.FileName + ", ");}
Console.WriteLine();
this.NowSend = true;}}}}
582デフォルトの名無しさん:2005/05/13(金) 01:23:04
書式の選択で整形してくれや。まぁ動くはず
583563:2005/05/13(金) 10:47:27
みなさんどうも、補足を。
>>570
forループの中でi=1~5でリスト1 2~40でリスト2… 見たいな感じなので

>>576
ありがとうございます。そのとおりですね。値型と参照型今後は心します。

>>581
コピーしてるArrayListは合計すると10MBになるファイルのフルパスしか入ってません。
c:\hoge.dat c:\hoge2.dat...とかの合計が10MBなのでArrayListの実態としては
多くてもfiles.count<=100のstringしか入れてません。
584デフォルトの名無しさん:2005/05/13(金) 22:48:14
BitmapのPixelFormatを変換する関数はあるでしょうか?
最悪の場合自分で書いてもいいんだけど組み合わせ爆発が起こりそうなので
できれば既存のものを使いたい……
585デフォルトの名無しさん:2005/05/13(金) 23:00:02
ないと思うよ。
単純なのは新しくPixelFormat指定したBitmap作ってGraphics.DrawImageUnscaledすること。
586571 :2005/05/14(土) 00:42:03
アプリの設定の話ですがXmlSerealizer使う事にしました。
これだとintはintのまま保存できるからStringを変換とかしなくていいから楽でいいや。
ありがとう。
587デフォルトの名無しさん:2005/05/14(土) 00:45:11
>>586
XmlConvertクラス
588デフォルトの名無しさん:2005/05/14(土) 01:54:23
>>586
ttp://support.microsoft.com/kb/899153
これに気をつけてね
589デフォルトの名無しさん:2005/05/14(土) 09:42:28
The Knowledge Base (KB) Article You Requested Is Currently Not Available
590デフォルトの名無しさん:2005/05/15(日) 10:24:52
591デフォルトの名無しさん:2005/05/15(日) 11:48:57
エンタープライズなら使えるかもしれないけど
スタンドアロンだとちょっとオーバースペックすぎな気がする
592デフォルトの名無しさん:2005/05/15(日) 13:43:50
質問です!
C#の勉強を兼ねて、仕事場の仲間内に配布できるようなテキスト入力支援
ツールを組んでみようかと思ってます。半分以上は趣味みたいなものです。
こういう目的で購入する場合、下記のパッケージで適切でしょうか?

・Visual C#.NET 2003 Standard 通常版

VisualStudioは10万以上するので趣味でかじるには、ちょっと手が出ません。
無料の環境もあるようですが、ヘルプの充実度など学習面で大きく差がある
ようなら、上記のパッケージを2万円程度で買ってしまおうと思ってます。

アドバイスいただけたら助かります!
593デフォルトの名無しさん:2005/05/15(日) 13:48:56
もうすぐ2005が出るからそれまでExpressのベータでいいじゃね?
てか会社で買ってもらえないのか?
594デフォルトの名無しさん:2005/05/15(日) 13:57:21
> てか会社で買ってもらえないのか?

いやぁ、趣味の延長なもので。
仕事もゲームのシナリオ班なんで、本来は開発言語いじるとこじゃないんです。
ただ、会社のプログラマさんがタスク飽和状態で、ほしいツールがあっても
そうそう新規開発してもらえる状況じゃないんで、いっそ自分でつくって
しまおうかと。
プログラムいじるとギャルゲーシナリオで澱みきった脳が癒されるんですよ。

ところで、「Expressのベータ」というのはこれですか?
http://www.microsoft.com/japan/msdn/vstudio/2005/express/vcsharp/
595584:2005/05/15(日) 17:40:18
Bitmap.Clone(Rectangle,Pixelformat)を使って解決しました。
596デフォルトの名無しさん:2005/05/15(日) 21:07:23
>>592
とりあえずSDKでいじってみれば?
ヘルプは同じだし。
597デフォルトの名無しさん:2005/05/15(日) 21:44:51
>>592
俺、ヤフオクで一万円のプロフェッショナル版を買ったよ。
598デフォルトの名無しさん:2005/05/15(日) 21:49:47
やるだけだったらタダで出来る
599デフォルトの名無しさん:2005/05/15(日) 22:08:43
Express Edition を拾ってくればいいのに
600デフォルトの名無しさん:2005/05/15(日) 22:15:56
>>592
2005になって.NET Framework 2.0が~
とかいうのにこだわってないならそれでOK
601デフォルトの名無しさん:2005/05/15(日) 22:34:40
あるクラスの中で 時間のかかる処理を別スレッドを使って
処理し、処理が終わったらイベントを通知したいんですが、
このイベントはクラスを作成したスレッド(メインスレッド)で実行
されるように保障するにはどうしたらよいでしょうか?

class Worker
{
public void ProcessAsync()
{
Thread myThread = new Thread(new ThreadStart(TimeConsumingProcess));
myThread.Start();
}

private void TimeConsumingProcess()
{
//時間のかかる処理
Thread.Sleep(2000);
//処理終了の通知
ProcessAsyncComplete(this,EventArgs.Empty);
}

public event EventHandler ProcessAsyncComplete;
}

こうすると、ProcessAsyncCompleteはmyThread内で実行されてしまいますが
こいつをWorkerクラスの呼び出し元のスレッドで実行するようにしたいのです。
602デフォルトの名無しさん:2005/05/15(日) 22:46:22
メインスレッドがどこほっつきあるってるか分かれば、何とか解決できる
というか、別スレッドからメインスレッドに通知、メインスレッドで対象のメソッドを実行してもらうようにするとか
603デフォルトの名無しさん:2005/05/15(日) 22:54:41
>>601
メインスレッドがWindowを持ってるなら適当なコントロールのInvokeが楽。
604デフォルトの名無しさん:2005/05/15(日) 23:01:28
>>602
>
> 別スレッドからメインスレッドに通知

これはどうしたら実現できるんでしょうか?
manualreseteventとか使うんでしょうか?
MSDNドキュメントをよんでもいまいちよくわからんのですが…
605デフォルトの名無しさん:2005/05/15(日) 23:04:10
通知なら共有変数とか共有キューとか用意してやるべし
Control 持ってるのなら Control のメッセージキューを使用 ⇒ つまり Control.Invoke した方が楽だけど
606デフォルトの名無しさん:2005/05/15(日) 23:04:43
>>603

windowを持っていれば workerクラスにControl ownerあたりの
フィールドを持たせて、 Control.Invokeでいいんですが、
一応コンソールAPP等でも使えるような汎用的なものにしたいと
おもっているもんで、悩んでます…。
607デフォルトの名無しさん:2005/05/15(日) 23:13:20
>>606
汎用性を考えるとキリが無いから、適当なところで区切った方が良いかと

ちなみに、方法は
    1) ProcessAsyncComplete は別スレッドから呼び出されるモノと割り切る
    2) Control を Worker に渡して、Worker 側が Control.Invoke
    3) イベントを廃止して、Worker の進行状況をメインスレッドに監視させる
の3つが思いついた
608デフォルトの名無しさん:2005/05/15(日) 23:21:35
>>607

そうですね…あんまり汎用性を突き詰めても仕方ないので。
「1) ProcessAsyncComplete は別スレッドから呼び出されるモノと割り切る 」
ことにして、同期処理はイベント通知を受けた側でControl.Invokeなりlockなりを
使って処理することにします。
609607:2005/05/15(日) 23:26:01
あ、もう一個方法があった

    4) Worker で作成するスレッドの方をメインスレッドにする
610デフォルトの名無しさん:2005/05/16(月) 02:20:24
時間のかかる処理をやってる最中に
メインスレッドが何をしてるかに依る訳で。

つまりどうしてもメインスレッドに依存する
→完全な汎用化なんて考え自体が無理。
611デフォルトの名無しさん:2005/05/16(月) 07:35:54
>>608
汎用性なら…System.ComponentModel.ISynchronizeInvokeを
利用するのが普通。名前空間見て分かると思うが
コンポーネントの基幹部分の機能
System.Timers.Timerなんかがこの実装を使ってる
ってかWinformのInvokeはこれが元だ

public class Foo {
 (...略)
 private ISynchronizeInvoke synchronizingObject = null;
 public ISynchronizeInvoke SynchronizingObject {
  get { return this.sysnchronizingObject; }
  set { this.synchronizingObject = value; }
 }

 public event EventHandler ProcessCompleted;
 protected virtual void OnProcessCompleted(EventArgs e) {
  if(ProcessCompleted!=null)ProcessCompleted(this, e);
 }

 private delegate void OnProcessCompletedInvoker(EventArgs e);
 private void InvokeProcessCompleted(EventArgs e) {
  if(this.SynchronizingObject!=null && this.SynchronizingObject.InvokeRequired) {
   this.SynchronizingObject.Invoke(
    new OnProcessCompletedInvoker(OnProcessCompleted),
    new object[]{ e });
  } else {
   OnProcessCompleted(e);
  }
 }
}
612611:2005/05/16(月) 07:45:12
これで

public void Start() {
 Thread thread = new Thread(new ThreadStart(this.DoProcess));
 thread.Start();
}
private void DoProcess() {
 ...
 this.InvokeProcessCompleted(EventArgs.Empty); //<-こんな感じ
}

とか使えばよい
613611:2005/05/16(月) 07:50:50
追記しておくが、一応これは最低限実装なので
このFooをコンポーネント化とかするんならSynchronizingObjectプロパティを隠したり
Designerをカスタマイズしたりしろよ。
614デフォルトの名無しさん:2005/05/16(月) 13:03:25
RichTextBox で、以下のようなことは出来るのでしょうか。
* 何行/列表示可能か取得
* 現在のカーソル位置の取得/設定
615デフォルトの名無しさん:2005/05/16(月) 15:36:18
>>614
> * 何行/列表示可能か取得
文字毎にフォントサイズが変えられるというのにどうやって求めろと?

> * 現在のカーソル位置の取得/設定
位置ってのは何文字目かってこと、それとも現在のカレットのPoint?
前者はほぼSelectionStartで代用可能。
後者はGetPositionFromCharIndexメソッド辺りを併用して。
616デフォルトの名無しさん:2005/05/16(月) 18:21:13
.NET 1.1
TcpListner で待ち受け、TcpClientで通信する予定です。
TcpClientから接続元を知る事ができませんか?
Socketを使えばできる事は知っているのですが、
Socketで書くのはメドーイ
617デフォルトの名無しさん:2005/05/16(月) 19:09:57
TcpClientクラスのClientプロパティ(protected)があるから、
派生クラス作って接続元を返すプロパティーでもメソッドでも自分で作る。

俺にはこれぐらいしか思いつかなかった。
618614:2005/05/16(月) 20:59:30
>>615
> 文字毎にフォントサイズが変えられるというのにどうやって求めろと?
確かにまずい質問でした。
> 位置ってのは何文字目かってこと、それとも現在のカレットのPoint?
キャレットのほうです。試してみます。
ありがとうございました。
619デフォルトの名無しさん:2005/05/16(月) 21:34:31
Socketでやれ。
既につながってるからそんなに面倒じゃない。
protectedだからTcpListnerを使うとClientプロパティが使えないし。
620デフォルトの名無しさん:2005/05/16(月) 21:43:08
ああそうだ、TcpListener使うから派生クラス作っても駄目だ
621デフォルトの名無しさん:2005/05/16(月) 21:49:19
結構、不便だよな。TcpListenerとTcpClient
俺も似たようなことがあって結局、Socketにした。
622デフォルトの名無しさん:2005/05/16(月) 22:01:45
困ったときのリフレクション

まあ素直に初めからSocket使う方が楽だけどな。
623デフォルトの名無しさん:2005/05/16(月) 22:23:36
TcpListenerはAcceptSocketだけ使ってればそこそこ便利だと思うよ。後はNetworkStream使えば手軽に処理できるし。
TcpClientはサブクラスを作るなら無理なところだけSocket使えるから、そこそこ手軽だと思うよ。
624デフォルトの名無しさん:2005/05/16(月) 23:41:04
入力されたデータが正の整数かどうか判別する方法はありますか?
あるとすればどうやるのでしょう?
625デフォルトの名無しさん:2005/05/16(月) 23:50:31
質問の意図が分からない。
if( data > 0 ) が答えだとしたらこのスレに来るのはまだ早い。
626デフォルトの名無しさん:2005/05/16(月) 23:50:59
それぐらい自分で考えろと。
627デフォルトの名無しさん:2005/05/17(火) 00:06:42
>>624
入力されたデータってのがよくわからんが、例えば 0100101011100101 っていうデータが正の整数かどうかを判別するってことか?
だったら無理だ。
「意味」までは判別できない。
628デフォルトの名無しさん:2005/05/17(火) 00:43:23
入力された文字列を数値に変換して
>>625でやればいいんじゃねーの?
629デフォルトの名無しさん:2005/05/17(火) 01:31:25
630デフォルトの名無しさん:2005/05/17(火) 02:34:08
>>625のやり方だと、整数かどうかは判断できないと思うが。
631デフォルトの名無しさん:2005/05/17(火) 09:15:33
ヒント:自然数
632デフォルトの名無しさん:2005/05/17(火) 13:12:18
>>619-623
thx、Socketを使う事にするよ。
さんくすこ。
633デフォルトの名無しさん:2005/05/17(火) 16:43:02
Win32APIのGetStockObjectで得られるフォントをFontオブジェクトとして扱う方法はありますか。

固定幅フォントで描画する必要があり、
GetStockObjectのSYSTEM_FIXED_FONTで得られるフォントを使用しようとしたものの
Font.FromHFontではTrueTypeではないというエラーが発生して使用できません。
634デフォルトの名無しさん:2005/05/17(火) 19:07:28
文字通りTrueTypeフォントじゃないと無理なんだろ。GDI+の制限だ。
FixedSysはビットマップフォントだからな。

フォントファミリ名不明のまま固定幅フォントとなるとFont.FromLogFontメソッドかな。
635デフォルトの名無しさん:2005/05/17(火) 23:30:05
どなたか下の宿題解いてくださいませんか??なんかもうさっぱりです。
今年こそは単位とりたいのですが自力でできる気がしないんです…

OSはウィンドウズでコンパイラはシグウィンです。

ダミー節点を使わないリスト構造を用いて,挿入整列の
プログラムを作成せよ
・リスト構造は,ポインタによるリンクリストを用いること
・整列前のリスト内の各要素,整列後のリスト内の各要素を
 表示するようにすること

よろしくお願いします。
636デフォルトの名無しさん:2005/05/17(火) 23:33:51
スレ違いはスルー
637デフォルトの名無しさん:2005/05/17(火) 23:48:09
しかも宿題スレとマルチしてるカスだな
638デフォルトの名無しさん:2005/05/18(水) 00:43:34
Cygwinでcsc.exeうごくんかな
639デフォルトの名無しさん:2005/05/18(水) 00:43:38
624です。

なんか、低レベルですみません。
なんか、言葉足らずですみません。

入力されたデータが
正の整数(負の数でもなく、少数でもなく、文字列でもなく、0でもなく、空白でもない)
かどうか判別する方法はありますか?
あるとすればどうやるのでしょう?
640デフォルトの名無しさん:2005/05/18(水) 00:48:16
>>639
入力されたデータの「型」は???

// なんらかの数値の場合
if( x > 0 && Math.Round( x ) == x ) ...

// 文字列型の場合
int x = int.Parse( str );
あとは上記
641640:2005/05/18(水) 01:03:19
あ、だめだ、文字列型のときは
double x = double.Parse( str );
が無難かな…
642デフォルトの名無しさん:2005/05/18(水) 01:43:51
>>634
FromLogFontで固定幅フォントを得ることができました。
ありがとうございました。
643デフォルトの名無しさん:2005/05/18(水) 07:08:48
Aspでデータグリッド内にデータグリッドを入れ込んだ時に、入れ込んだ側のデータグリッドのイベントって取得できないんでしょうか?
644デフォルトの名無しさん:2005/05/18(水) 08:04:13
>>641
どうせ整数型が欲しいんだからint.Parseでいいよ。例外が出たらそれは整数じゃなかったってことだ。

>>639
で、入力されたデータというのがどこから入力されたどういう型なのかというのが分からないことには何とも言いようがないし。
例えば文字列で入力されたのを判断するとして、C#で扱える最大の数値型decimalの上限79,228,162,514,264,337,593,543,950,335を超える数字が入力された場合でも問題ないとするのかどうかとか。
それとも入力はobject型で、数字が並んだstring型は駄目なのか。
string型を判断するのならコンマはOKなのか。
前提条件が足りなさすぎる。
645デフォルトの名無しさん:2005/05/18(水) 08:27:59
Windowsサービスとして作成したEXEファイルがあります。
直接起動されたときはサービスでなくいちWindowsアプリケーションとして動作
させたいのですが、EXEファイルが起動されたときに、Windowsサービスとして
起動されたのか、それとも直接起動されたのかをプログラム内部で判定する方法は
ありませんか?
646デフォルトの名無しさん:2005/05/18(水) 09:31:22
System.Environment.UserInteractiveとかどうなのかな。
647デフォルトの名無しさん:2005/05/18(水) 11:48:24
>>646
UserInteractiveで判定できました。
ありがとうございました。
648640:2005/05/18(水) 16:31:31
>>644
int x = int.Parse( str ); を try ~ catch で囲むの?
ここで例外を使うのはどうかと思うんだがなあ…。不自然じゃないか?
ほとんどが非整数の入力の場合、ほとんどが「例外」扱いになるな。
649デフォルトの名無しさん:2005/05/18(水) 16:38:17
>>648
確かに相応しくない例外の使い方だけど、使った方がナチュラルに書ける。
どのみちテキストボックス辺りからのユーザの入力をParseするならtry-catchは必須だし。
.NET 2.0でTryParseが増えるからそれでなんとか。

>ほとんどが非整数の入力の場合、ほとんどが「例外」扱いになるな。

で、その場合どう対策しろと?
//まあ私は正規表現でチェックするが。
650C++に嫌気がさした:2005/05/18(水) 22:08:58
参照型のclassをreturnしちゃうと、非constな参照が返されて、フィールドに対する値の正当性が保たれないのですが......
要素に対するアクセスをセッター、ゲッターだけに絞る事ってできないんですか?
C++で書くと
#include <iostream>
struct A
{
int val;
};
class B
{
A a;
public:
const A& Ref()const{ return a; }
A Get()const{ return a; }
void Set( int n ){ a.val = n; }
};
int main()
{
B b;
b.Set( 10 );
std::cout << b.Get().val << std::endl;
//b.Get().val = 20;//コンパイルエラー
std::cout << b.Get().val << std::endl;
//b.Ref().val = 20;//コンパイルエラー
std::cout << b.Get().val << std::endl;
}
651650:2005/05/18(水) 22:14:05
日本語意味分からないですね(汗
参照型のclassを

フィールドに持ってるインスタンスを
の間違いです
652デフォルトの名無しさん:2005/05/18(水) 22:19:07
現状、無理。
constの必要性は言語設計者らの間でも議論になったらしいけど。
//まあAがstructなら値のコピーになるので実質変更不可だ。
653650:2005/05/18(水) 22:26:58
Get()の方のメソッド(ディープコピー)もICloneableを継承しないとだめなんですか?
654デフォルトの名無しさん:2005/05/18(水) 22:49:08
Aをラップしたクラスを返すとか
655デフォルトの名無しさん:2005/05/18(水) 23:00:08
べつにconstなんていらないじゃん。
その先で値が変わったら
その値を変えたやつが悪い。
656デフォルトの名無しさん:2005/05/18(水) 23:42:52
その悪いやつを未然に防げた方が便利じゃん
657デフォルトの名無しさん:2005/05/19(木) 00:45:50
ということでconstが生まれましたとさ。
658デフォルトの名無しさん:2005/05/19(木) 10:12:11
>>655
釣り?
659デフォルトの名無しさん:2005/05/19(木) 15:55:04
C#で書かれたオープンソースソフトウェアで、初学者の手本になるような
設計・実装がされているものってありますか?

もしオススメな物があれば参考にしたいので是非教えて下さい。
660デフォルトの名無しさん:2005/05/19(木) 18:01:08
661デフォルトの名無しさん:2005/05/19(木) 19:42:27
>>659
Reflectorでmscorlib.dllを読めとか言ってみるテスト。
http://www.aisto.com/roeder/dotnet/
662デフォルトの名無しさん:2005/05/19(木) 21:13:21
ライブラリ系じゃどっから読んだらいいかわからんのでは?
663デフォルトの名無しさん:2005/05/19(木) 21:40:17
C#でコード公開というとTwintailだがどうだろうね。
664デフォルトの名無しさん:2005/05/19(木) 23:05:57
なにが?
665デフォルトの名無しさん:2005/05/19(木) 23:11:26
666デフォルトの名無しさん:2005/05/19(木) 23:13:08
オープンソースなだけで手本にはならないと思うが。
667デフォルトの名無しさん:2005/05/19(木) 23:30:56
以下のプログラムはコンパイルはできるんですがなぜか実行できません。
何ででしょうか?

#include <stdio.h>
#include <stdlib.h>
typedef struct node *link;
struct node {int item; link next;};

int main(int argc,char *argv[]) {
struct node heada,headb;
int i,N=atoi(argv[1]);
link t,u,x,a = &heada,b;
srand(1);
for(i=0,t=a;i<N;i++){
t->next = malloc(sizeof *t);
t = t->next; t->next = NULL;
t->item = rand() % 1000;
}
b = &headb; b->next = NULL;
for(t=a->next; t!=NULL;t=u){
u=t->next;
for(x=b;x->next!=NULL;x=x->next)
if(x->next->item > t->item) break;
t->next = x->next;
x->next = t;
}
}
668デフォルトの名無しさん:2005/05/19(木) 23:32:05
csc.exeではコンパイルも不可能だな。
669デフォルトの名無しさん:2005/05/19(木) 23:35:35
axWebBrowserについて質問させてください。

単純にaxWebBrowser組み込んだだけのページでブラウザ内のJavaアプレットが動作しません。
同じURLをIEで開くと普通に動作します。

何か設定をしてやらないといけないのでしょうか?
670667:2005/05/19(木) 23:37:41
言い忘れました。コンパイラはgccです。
671デフォルトの名無しさん:2005/05/19(木) 23:38:59
>>669
appletタグじゃなくてobjectタグを使うしかない
672デフォルトの名無しさん:2005/05/19(木) 23:43:13
>>671

即レスありがとうございます。
明日早速やってみます。
673667:2005/05/19(木) 23:43:51
すみません、タイトル見間違えてました。スレ違いでした。
674デフォルトの名無しさん:2005/05/19(木) 23:53:10
675デフォルトの名無しさん:2005/05/20(金) 03:04:17
>>673
お疲れ~
676デフォルトの名無しさん:2005/05/20(金) 03:18:34
677デフォルトの名無しさん:2005/05/20(金) 11:05:01
C#で、テキストボックスの値を数値か文字かわかるようにして、
文字が入力されたらエラーメッセージを出すようにしたいのですが、
分かりません。教えてください。
678デフォルトの名無しさん:2005/05/20(金) 11:08:42
>>677
TextChanged イベントでチェックすればいいんじゃね?
679デフォルトの名無しさん:2005/05/20(金) 11:23:40
>>678
そのチェックの方法を教えてください
680デフォルトの名無しさん:2005/05/20(金) 11:40:19
正規表現でも使えば?

と書くとその使い方を(ryと返ってきそうでヤだな。
681デフォルトの名無しさん:2005/05/20(金) 11:49:46
VCのテキストボックスには数値のみの入力のオプションがあったのに、
.netにはなんでついてないんだろうな。
682デフォルトの名無しさん:2005/05/20(金) 12:39:29
そうなんです。数値のみの入力オプションがないため困っているんです。

正規表現を教えてください。お願いします。
683デフォルトの名無しさん:2005/05/20(金) 12:46:32
数値のみ入力のコントロールなら、numericUpDownを使えばいいんじゃね?
684デフォルトの名無しさん:2005/05/20(金) 13:01:02
>>683
ありがとうございます。

でも、numericUpDownだと矢印がついてしまうのです。
685デフォルトの名無しさん:2005/05/20(金) 14:14:52
何か方法はないですかね?
686デフォルトの名無しさん:2005/05/20(金) 14:21:04
あのな、「TextBoxの入力内容を制限する」なんてのはFAQなのな
もうちょっと調べろ&フラットスレにでもいってろ
687デフォルトの名無しさん:2005/05/20(金) 14:22:05
検索すれば見つかりそうではある。
688デフォルトの名無しさん:2005/05/20(金) 14:59:59
例外について質問なのですが、以下のような使い方でいいのでしょうか?
それともProcBの中にtry~catchを置くべきなのでしょうか?

ProcA(){
try{
 ProcB(filename);
}
catch(FileNotFoundException){
 Console.WriteLine("ファイルは存在しません");
 return;
}
・・・略・・・
 return;
}

ProcB(Strig filename)
{
 XmlDocument xml = new XmlDocument();
 xml.Load(filename);
・・・略・・・
}
689デフォルトの名無しさん:2005/05/20(金) 15:07:48
690デフォルトの名無しさん:2005/05/20(金) 15:14:04
>>688
時と場合によるので画一的には答えられない。
その例なら、ファイルが見つからないときにコンソールにメッセージを書くだけで済ませられる所でcatchする。
//勿論途中で一旦キャッチして再スローしてもいいわけだが。
691デフォルトの名無しさん:2005/05/20(金) 15:20:16
>>690
ありがとうございます。

例えばProcBがライブラリの一関数として様々な箇所から呼ばれることを
想定した場合はどのようにするべきなのでしょうか?
692デフォルトの名無しさん:2005/05/20(金) 15:34:52
>>691
ケースバイケース・・・設計者の気分しだい(w
693デフォルトの名無しさん:2005/05/20(金) 15:45:04
それだけの情報じゃ答えられん気も。
694デフォルトの名無しさん:2005/05/20(金) 17:05:50
基本的に、「ProcBの内部で何をやってるかはライブラリを利用する側には分からない」という前提で例外を設計すると良いですよ。
695デフォルトの名無しさん:2005/05/20(金) 20:00:45
どっちにしろ ProcB 内で FileNotFoundException をスローするのは
作法上正しいとおもうよ。
696デフォルトの名無しさん:2005/05/20(金) 20:15:07
こういうXMLをXmlTextWriterで書きたいんですが
<element1(改行)
(タブ)attribute1="value1"(改行)
(タブ)attribute2="value2"(改行)
/>

xtw.WriteStartElement("element1");
xtw.WriteWhitespace("\r\n");
xtw.WriteAttributeString("attribute1", "", "value1");
(略)
と書くと、WriteWhitespace("\r\n")がうまくいかないらしくて
属性部分が出力されません。
あと、タブの出力の仕方もよく分かりません。
WriteWhitespace("\t")みたいなのじゃ駄目みたいです。

xtw.WriteStartElement("element1\n");
と文字列中に改行を入れると一見イイのですが、
次の行に半角空白が1個出てしまいます。

どうするのがよいのでしょうか。
697デフォルトの名無しさん:2005/05/21(土) 00:13:55
C#勉強中ですが、疑問がひとつ。
C#ではなんでグローバル変数のことを「フィールド」なんていうややこしい
言い方にしてるんでしょうか?
698デフォルトの名無しさん:2005/05/21(土) 00:25:37
>>697
C# にグローバル変数は存在しません。出直してきなさい
699デフォルトの名無しさん:2005/05/21(土) 00:49:26
ないことはありません。出直してきなさい
700デフォルトの名無しさん:2005/05/21(土) 00:56:49
698じゃないが、697=699なの?
どっちにしても荒れそうだ。
701デフォルトの名無しさん:2005/05/21(土) 01:00:14
>>699
いや、ないだろ
702デフォルトの名無しさん:2005/05/21(土) 01:02:22
どっちでもいいが、使わないほうがいいってのが良く分からんのだよ・・・
703デフォルトの名無しさん:2005/05/21(土) 01:06:59
>>702
class外の変数にアクセスしたら、そのclassが独立できないじゃないか。
704デフォルトの名無しさん:2005/05/21(土) 01:08:26
>>702
697=699=702?
> 使わないほうがいいってのが良く分からんのだよ・・・
オブジェクト指向のカプセル化原則に反するからです。
複数のクラスから同じ変数(フィールド)をいじろうとすると、
発見しにくいバグの元になります。
705704:2005/05/21(土) 01:09:58
自分で書いていて文脈がつながらない文になった。
703が代弁しているからそれでいいや。
706デフォルトの名無しさん:2005/05/21(土) 01:20:25
グローバル変数って死語だろ
707デフォルトの名無しさん:2005/05/21(土) 01:22:41
ナウなヤングにバカ受け
708デフォルトの名無しさん:2005/05/21(土) 01:23:30
>703-704
697,699とは別人の702だが。
うむ。勉強しなおしてくるよ・・・。
709700,703:2005/05/21(土) 01:24:52
俺の言ってるのと違う話で代弁とか言われても困惑する。
バグの元とかいう次元じゃないつもりだ。
710704:2005/05/21(土) 01:26:23
オブジェクト指向の~ → バグの元

という流れより

オブジェクト指向の~ → クラスの独立性が~

としたほうが自然だねってことで…
あまり気にしないでください…
711デフォルトの名無しさん:2005/05/21(土) 01:46:43
てかグローバル変数って何?そんなレベルの低そうなもの知らないんだけど
712デフォルトの名無しさん:2005/05/21(土) 02:02:22
Simulaの効率性の悪さに嫌気がさしたBjarne Stroustrupは、やっぱ
グローバル変数(つかstatic記憶クラスの変数)は必要だと
痛感したらしいけどね

そんな彼も、C++のstatic変数の初期化順序の問題に頭を悩まされる
ことになる
713デフォルトの名無しさん
>>711は窓際プログラマー