トップページ⇒tech
1001コメント291KB

ふらっとC#,C♯,C#(初心者用) Part21

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001ななしぃ#2007/11/18(日) 15:53:41
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

前スレ: ふらっとC♯, C#(初心者用) Part20
http://pc11.2ch.net/test/read.cgi/tech/1191036844/
0856デフォルトの名無しさん2007/12/13(木) 12:12:45
�dとか�j
みたいに
0857デフォルトの名無しさん2007/12/13(木) 12:14:58
w←みたいでうける
0858デフォルトの名無しさん2007/12/13(木) 12:17:11
エスケープ文字よりもC++は記号の使いまわしすぎだろ
0859デフォルトの名無しさん2007/12/13(木) 12:23:22
101キーボードで打てないといけないからね。
0860デフォルトの名無しさん2007/12/13(木) 12:34:00
トライグラフ もあるけどなーw
0861デフォルトの名無しさん2007/12/13(木) 13:00:22
みなさん、C#を使って作るのは
やっぱりWinアプリですか?
0862デフォルトの名無しさん2007/12/13(木) 13:15:12
Mono
0863デフォルトの名無しさん2007/12/13(木) 14:23:18
webbrowserでサイトを表示するとテンポラリフォルダに勝手にファイルが溜まっていくんですが、
プログラム終了時にフォルダ内全削除してから終了させるのってどうやるんでしょうか?
0864デフォルトの名無しさん2007/12/13(木) 14:52:15
おいお例外が終わったら過疎ったじゃないか
0865デフォルトの名無しさん2007/12/13(木) 14:54:37
デリゲートとカスタム属性に泣きそうになってるC++プログラマです・・・。
誰か慰めてください><
0866デフォルトの名無しさん2007/12/13(木) 14:56:43
>>865
犬にでも噛まれたと思ってあきらめなさい。
0867デフォルトの名無しさん2007/12/13(木) 14:57:10
throw >>865;
0868デフォルトの名無しさん2007/12/13(木) 15:02:40
catch(>>865){}
0869デフォルトの名無しさん2007/12/13(木) 15:27:03
>>868
catch(>>865){}
         ↑
完全スルーカワイソス
0870デフォルトの名無しさん2007/12/13(木) 16:19:32
>>830
ファイルの存在確認からOpenまでの間にファイルが消えることがあるだろ
並列処理してたらそういうことはよくある
確認用メソッドと取得用メソッドは分けてはいけない
0871デフォルトの名無しさん2007/12/13(木) 22:02:26
>確認用メソッドと取得用メソッドは分けてはいけない
そういう問題かよ
0872デフォルトの名無しさん2007/12/13(木) 22:17:46
ActiveDirectoryに存在している全てのプライマリグループを取得するには
どうすればいいかな?
0873デフォルトの名無しさん2007/12/13(木) 23:57:43
ListViewの仮想モードがよく分からないのですが、表示件数が変わるときは
常にVirtualListSizeを操作するのでしょうか?
また、一般的な使用方法とかはList<ListViewItem>みたいなリストを保持して、
RetrieveVirtualItemで処理するのでしょうか?
0874デフォルトの名無しさん2007/12/14(金) 01:49:46
今C#の勉強がてら別アプリケーションのキャプションを取得したりする物を作っています
現在の処理の流れとしては
Process.GetProcessesByNameでプロセス取得
↓
取得したプロセス.Threadsをforeachでまわして
Win32APIのEnumThreadWindowsを使ってウィンドハンドル取得
↓
EnumThreadWindowsの中でEnumChildWindowsを使って全部の子ウィンドを取得
↓
GetWindowTextを使用してキャプション取得

こんな感じで処理してます。ここで質問なのですが
1.他のアプリケーションウィンドウのキャプション取得するのって
Win32APIを使う以外に処理する方法ってありますか?

2.特定のウィンドウのキャプションが変更された時に
何らかのメソッドを実行したいのですができますか?
0875デフォルトの名無しさん2007/12/14(金) 01:54:36
メインウィンドウならProcess.MainWindowTitle
それ以外はなし
あとGetWindowText使うな

タイマでポーリングしてりゃ良いんじゃね
0876デフォルトの名無しさん2007/12/14(金) 01:55:46
>>874

>1.他のアプリケーションウィンドウのキャプション取得するのって〜〜
確かできなかったはず。IntPtr を取る Control のコンストラクタもあるっぽいが、
昔試したときに他のアプリケーションのウィンドウやコントロールに関して有益な情報が得られなかったと記憶してる。

>2.特定のウィンドウのキャプションが変更された時に〜〜
Win32 API を使う方法になるけど、メッセージフックがある。
SetWindowsHookEx などの関数で調べてみるといいかも。
08778742007/12/14(金) 02:34:30
>>875-876
レスありが�d

>>875
GetWindowTextって使わない方が良いのですか?

>>876
SetWindowsHookEx試してみたいと思います
0878デフォルトの名無しさん2007/12/14(金) 02:44:27
誰かスルーしないで親切丁寧に分かりやすくテンポフォルダのキャッシュの消し方教えておー
0879デフォルトの名無しさん2007/12/14(金) 02:47:56
フォルダを開く→Ctrl+a→Delete→OK
0880デフォルトの名無しさん2007/12/14(金) 02:50:38
>>878
Environment
0881デフォルトの名無しさん2007/12/14(金) 04:15:34
StringBuilderにClearがないのはなぜだろう
0882デフォルトの名無しさん2007/12/14(金) 06:30:47
>>881
Length = 0 で代用できるのと、十分に軽量にしているから
使いまわしせずに必要になったら作り直せというお達しだと思う。
08837082007/12/14(金) 10:28:42
どなたか・・・
0884デフォルトの名無しさん2007/12/14(金) 10:46:29
>>883
ToolStripDropDownMenuのチェックとかアイコンの枠を描画するときじゃね
Refectorで追いかけてみればどうよ
0885デフォルトの名無しさん2007/12/14(金) 12:58:42
>>879>>880
やり方知らねーなら素直に分かりませんって書けやカス
ほんと役立たずのゴミしかいねーなここ
こんな低脳の溜まり場なんかで聞いた俺が馬鹿だったわw
0886デフォルトの名無しさん2007/12/14(金) 13:01:34
>>885
そういうときに使える有名なレスを授けよう。

「知らないんだったらレスしないで下さい!!」
0887デフォルトの名無しさん2007/12/14(金) 13:09:55
VC++とVC#をアンインストールしようと手動でやったんだけど、それがまずかった
アンインストール用のソフトがあるんだね。これ使ってればよかったのに
手順が間違っていたのか、アンインストールもインストールもできなくなった

どうすればいいんでしょうか?
0888デフォルトの名無しさん2007/12/14(金) 13:10:35
TextBoxでListBoxのように行を追加・挿入・削除することはできないのでしょうか?
0889デフォルトの名無しさん2007/12/14(金) 13:18:46
>>887
http://support.microsoft.com/kb/290301/ja
>>888
できません。
自前で各行の差し替えを実装して頑張ってください。
0890デフォルトの名無しさん2007/12/14(金) 14:01:45
糞じゃん
0891デフォルトの名無しさん2007/12/14(金) 14:27:01
>>889
即レス感謝します
なんとかインストールはできるようになりました
あとは、もう一度アンインストールしてうまくいくかどうか・・
0892デフォルトの名無しさん2007/12/14(金) 15:51:36
他のアプリのリストビューのデータを取得したりすることは可能でしょうか?
APIとかいうのを使うしか無理?
0893デフォルトの名無しさん2007/12/14(金) 18:29:52
両方yes
0894デフォルトの名無しさん2007/12/14(金) 18:39:47
>>893
他アプリ(非.NET)のデータを取得するのはc#でもできるということですか?
0895デフォルトの名無しさん2007/12/14(金) 18:41:18
APIつかWin32APIは大抵の言語で扱える もちろんC#でも
0896デフォルトの名無しさん2007/12/14(金) 19:31:21
ということはやっぱり、.NETの言語だけでは無理ということですね
API使うとメモリリークとかを意識しないとだめなんですよね
0897デフォルトの名無しさん2007/12/14(金) 20:21:44
たとえばVSのデバッガでList<Dicrionary<string,string>> の中身を

[ { col1 => "val", col2 => "val" }, { col1 => "val", col2 => "val" } ]

上記のような表示形式で見たいのですが方法はありますか?
0898デフォルトの名無しさん2007/12/14(金) 20:25:08
>>897
autoexp.cs弄ればできるかも
0899デフォルトの名無しさん2007/12/14(金) 21:30:49
何を格納するコレクションなんだそれは……
09008972007/12/14(金) 21:40:28
すみませんDicrionaryではなくDictionaryです。
List<Dictionary<string,string>>

>>898
おお。まだちゃんと調べてないけどこれでちょっといけそうな気がします。
ありがとうございます。

Javaだと構造が一発でみれて楽なんだけどなぁ・・・
0901デフォルトの名無しさん2007/12/14(金) 21:43:03
自分でデバッガビジュアライザ作れば
0902デフォルトの名無しさん2007/12/14(金) 21:48:49
Javaだと構造が一発でみれて楽なんだけどなぁ・・・
0903デフォルトの名無しさん2007/12/14(金) 21:55:34
Javaとか.NETとかそういう問題なのか
0904デフォルトの名無しさん2007/12/14(金) 21:57:08
デバッガの仕様の問題だろ
VSは基本的にはToStringを表示するだけだし
0905デフォルトの名無しさん2007/12/14(金) 22:23:02
ビジュアライザだったら簡単に作れるお
0906デフォルトの名無しさん2007/12/15(土) 00:25:49
http://msdn2.microsoft.com/ja-jp/library/7ay27kt9(VS.80).aspx

を読んだのですが、シリアル化の意味がよくわかりません。
シリアル化とはどういう意味なんでしょうか?
0907デフォルトの名無しさん2007/12/15(土) 00:33:05
>>906
オブジェクトをファイルとかに保存できるようにデータ列に変換すること。
ファイルに保存=永続化って考えちゃえば良い。
0908デフォルトの名無しさん2007/12/15(土) 00:33:21
ここに魔法の小箱があります。名前は「シリアライザ」。
Serializableなインスタンスをここに入れると、 バイナリデータになったりXMLデータになったりします。
ネットで転送したり、ファイルに書き込めますね。
こんどはそのバイナリデータやXMLデータをいれて、横にある「デシリアライズ」というボタンを押すと、
あら不思議、もとのインスタンスがフィールドデータとかそのままで復元します。
0909デフォルトの名無しさん2007/12/15(土) 00:34:45
ファイルなりデータベースなりにオブジェクトの状態を保存して、
アプリが終了した後も永続的に状態が残るようにすること。

要するに、アプリ設定のセーブ/ロードとかに使う。
0910デフォルトの名無しさん2007/12/15(土) 03:27:53
ちょっと教えて下さい。.NET Compact Framwork上で動作させる物を作っております。
ウィンドウにButtonを2個配置した場合、カーソルキーの左右でボタン1と2の間でフォ
ーカスが移動しますが、これと同じ動作をPictureBoxに対しても行いたいと考えており
ます。

PictureBox.TabIndexプロパティで何とかなるかとも思ったのですが、CFMのPictureBox
はTabIndexプロパティが実装されておりません。
当初ははPictureBoxでなくButtonで行いたかったのですが、Button上にイメージを貼り
付けたいのですが、Button.Imageがサポートされておらず、PictureBoxにした次第です。
PictureBoxにフォーカスを当てる方法か、Button上にイメージを貼る方法どちらか実現
出来ないでしょうか?
0911デフォルトの名無しさん2007/12/15(土) 03:56:17
>>910
↓ここらへん参考にしてみてはどうでしょう
http://www.microsoft.com/japan/msdn/thisweek/10lines/extra_bottoncontrol.aspx
09129102007/12/15(土) 04:30:45
>>911氏
情報ありがとうございます。
ちょっと試してみます。
0913デフォルトの名無しさん2007/12/15(土) 08:01:29
C#を勉強し始めた者で、オブジェクト指向言語なるものは初めてなのですが
勉強していくうちに理解できることかも知れないけど質問させてください。

クラス、名前空間など処理を分ける(?)概念は
処理のグループ化、階層化などによって作成、管理、修正、解読などを
しやすくする狙いがある(または狙いのひとつである)のでしょうか。

Cは授業で基礎を習った程度の知識と経験がありますが、
その初段階で教わった「プログラムの構造化」を
言語自体の持つ性格としてより明確に打ち出されているものと考えてよいでしょうか。
0914デフォルトの名無しさん2007/12/15(土) 08:20:09
>>913
簡単にいうとネームが競合しないようにするためだね

*クラス

人が「歩く」
犬が「歩く」

同じ「歩く」でも歩き方などが違うわけで、「人が歩く」というクラス名にしてもいいけど
長くなるので同じクラス名でも別の機能を持たせたいのでクラスという概念ができた

*名前空間

田中さんが作った「人が歩く」プログラム
山田さんが作った「人が歩く」プログラム

同じ「人が歩く」プログラムでもプログラマによって歩かせ方が違うわけで
「田中さんが作った人が歩く」というクラス名にしてもいいけど
長くなるので同じクラス名でも別の機能を持たせたいので名前空間という概念ができた
0915デフォルトの名無しさん2007/12/15(土) 09:57:19
>>907
>>908
>>909
目的はよくわかりました。
たとえば、
class Widget {
 public int x = 10;
 public int y = 20;
}
のようなクラスのインスタンスを
シリアライズ化してファイルに保存
する場合、何が保存されるのでしょうか?

class obj = new Widget();
シリアライズ化
ファイルに保存
逆シリアライズ化
xとyを参照すると正しく10と20が読める。

こんな感じですか?
0916デフォルトの名無しさん2007/12/15(土) 10:36:34
そんな感じ
つか自分でやってみろよ
0917デフォルトの名無しさん2007/12/15(土) 13:26:34
>>913
違います
言語を使ってみる前にこういうものかと言葉で理解しようとするのは誤りです
0918デフォルトの名無しさん2007/12/15(土) 13:47:26
>>914
間違いだらけでワロスw
0919デフォルトの名無しさん2007/12/15(土) 13:47:28
C#の文法は一通り勉強しました。
.NETも含めてより深く理解するために
Windowsアプリに応用しようかと思う
のですが、自作クラスを作成しない簡単な
フォームアプリでもdelegateととかは使われる
ものですか?
0920デフォルトの名無しさん2007/12/15(土) 13:48:30
クラスのないC#ってなんだ?
0921デフォルトの名無しさん2007/12/15(土) 13:50:10
Form派生させないのは結構面倒だぞ
0922デフォルトの名無しさん2007/12/15(土) 13:52:43
まず間違いなく使われる。
気づかないだろうけど。
0923デフォルトの名無しさん2007/12/15(土) 13:54:47
デリゲートってもともとGUIのために作られたようなもんだし
0924デフォルトの名無しさん2007/12/15(土) 14:29:49
Form1からして既に自作クラスです。
0925デフォルトの名無しさん2007/12/15(土) 16:23:22
おまえらしょうもないなw
0926デフォルトの名無しさん2007/12/15(土) 20:07:17
マジでここは素人に毛が生えた程度だな
まともに答えず話の方向ずらすだけ
0927デフォルトの名無しさん2007/12/15(土) 20:21:19
gooとかはてなとかに行けば、えらそうに質問してもやさしく教えてもらえる。
説教がましく言ってくるやつがいても、言い返せばOK。
0928デフォルトの名無しさん2007/12/15(土) 21:30:38
プログラミング初心者です
Aという処理の○○msec後にBという処理を行う
ということをTimerより高精度で行いたいのですがどうすればいいのでしょう?

QueryPerformanceCounterを使うといいよと言われたのですが、
ぐぐっても実行時間の計測方法しかわからなくて困ってます・・・
0929デフォルトの名無しさん2007/12/15(土) 21:30:49
C#でAPIを使う場合、取得したハンドルを格納する変数を
メモリ開放しないとだめなのでしょうか?
c#は自動でメモリ開放してくれるのでしなくてもいいのでしょうか?
もしダメならなぜなのでしょうか?
今作っているプログラムはクラス内にAPIを使っていますが
メモリ開放をしなくても何も問題は起きていないです。
自動で開放できているということでしょうか?
0930デフォルトの名無しさん2007/12/15(土) 21:32:32
>>929
API って何? Win32API?
普通はハンドルは最後に解放するよ。それは C# でも C++ でも一緒。
0931デフォルトの名無しさん2007/12/15(土) 21:33:44
>>929
なんのハンドルか知らないけど
呼び出し側が解放するように指定されてるAPIなら解放しとけ
0932デフォルトの名無しさん2007/12/15(土) 21:47:10
>>928
System.Threading.TimerかSystem.Timers.Timerは?
0933デフォルトの名無しさん2007/12/15(土) 21:50:59
>>928
まずは精度を提示してください。
09349282007/12/15(土) 22:06:18
実験に使いたいので、1msecレベルの精度が欲しいです・・・
0935デフォルトの名無しさん2007/12/15(土) 22:12:21
>>934
まずは、C#を捨てるところから始めましょう。
0936デフォルトの名無しさん2007/12/15(土) 22:14:45
timeBeginPeriod?
0937デフォルトの名無しさん2007/12/15(土) 22:15:29
>>926
恥ずかしいからやめとけよ。
まともに答えてるのもわからんのなら。
わかるのなら答えてやれよ。
0938デフォルトの名無しさん2007/12/15(土) 22:16:23
C#じゃ無理だな
GCが動いたら軽く吹っ飛ぶ
09399282007/12/15(土) 22:21:37
うぅ、なんかやっぱり勉強不足感があるので出直してきます・・・
0940デフォルトの名無しさん2007/12/15(土) 22:24:38
>>928
>>934
何の実験かは知らんがWindowsをその用途に使うの多分向いてないよ。

仮に1msec以下の精度で時刻が分かっても
スレッドスケジューラが問答無用で実行権を奪っていくこともあるし
行儀の悪いドライバが長時間CPUを離さないと、
その間ユーザモードのプロセスは原理上なんもできん。

QueryPerformanceCounterとかStopwatchクラスでポーリングすれば、
100回のうち何十回とかは要件を満たせるかもしれんが、
一回のミスも許されないような用途ならそもそもWindowsを選ぶべきじゃない。
C#じゃなくてC++なら可能とかそういうレベルですらない。

FPGAとか使った方がいいんでは? と目的も聞かずに適当アドバイス。
0941デフォルトの名無しさん2007/12/15(土) 22:32:03
windowsというかデスクトップOSを使うべきではない
0942デフォルトの名無しさん2007/12/15(土) 22:34:06
別なハードウェアでいったん受けて、Windows でデータの集計するのが普通なのかな?
0943デフォルトの名無しさん2007/12/15(土) 22:35:11
処理の内容分らんのにアドバイスのしようが無いだろ
0944デフォルトの名無しさん2007/12/15(土) 22:40:22
>>930
APIを呼び出しているクラス内の最後にclose(hwnd)みたいな感じやるということですか?
でも、hwndがメソッド外でフィールド?で定義していた場合
クラス自体を終了しなければ解放されないですよね?
で、クラスならいちいち解放しなくてもガベージコレクションで自動で開放されるから
わざわざしなくてもいいと思うんですがどうなんでしょうか?

>>931
他のプロセスのハンドルです
VirtualAllocExで仮想メモリを割り当てて、開放しなかったけれども
何も異常が起きないんですが、このクラスを呼び出す別クラスのメソッドが
終了すれば、自動で開放されているということかな?
0945デフォルトの名無しさん2007/12/15(土) 22:46:12
単にリークするだけさ
0946デフォルトの名無しさん2007/12/15(土) 22:52:13
Stopwatchって、タイムスタンプの取得に
2マイクロ秒くらい(これは俺の環境の場合だが)
かかるんだが、これってQueryPerformanceCounterの速度か
それともアンマネージ呼び出しなんかのオーバーヘッドかどっち?
0947デフォルトの名無しさん2007/12/15(土) 22:53:52
>>944GCがハンドル開放してくれるわけないだろ。
まあ普通はハンドル自体はSafeHandleでラップして、
さらにDisposableなクラスでラップするけどね。
0948デフォルトの名無しさん2007/12/15(土) 22:56:54
ハンドルはスタックで、インスタンスはヒープ
だよね?
0949デフォルトの名無しさん2007/12/15(土) 22:59:29
>>948
意味の分からんことを言うな
0950デフォルトの名無しさん2007/12/15(土) 23:02:58
参照型変数はスタックに確保されて、参照型変数が指すオブジェクトはヒープ
に確保されるんだよね?
0951デフォルトの名無しさん2007/12/15(土) 23:05:07
質問です。

DirectoryInfo()にパス名を引数として渡す場合、
C#では@"c:\temp"のように先頭に@マークをつけるのは
何故ですか?VC++やVBでは付けないみたいですが。
0952デフォルトの名無しさん2007/12/15(土) 23:08:25
\
0953デフォルトの名無しさん2007/12/15(土) 23:08:31
画面上にテキストボックスを表示させるということを
aspx.csでやりたいのですが、これはTextBoxオブジェクトをインスタンス化して
表示するということは可能でしょうか?
Response.Writeでタグを吐けば表示可能ですが、この方法以外でやりたいのです。
なぜデザイナでタグをペチペチ配置しないかというと
例えばURLのパラメータによってテキストボックスの数が異なるからです。
なので、動的に生成する方法を知りたいのです。
よろしくお願いします。
0954デフォルトの名無しさん2007/12/15(土) 23:09:44
SafeHandleでラップしたらもはやそれはクラスだよ。
ハンドルそのものは値型で保持されるけど
ローカル変数じゃないからスタックとか関係ないよ。
0955デフォルトの名無しさん2007/12/15(土) 23:10:57
>>953
Designer.csを読めばわかる
レス数が950を超えています。1000を超えると書き込みができなくなります。