1 名前:デフォルトの名無しさん [2008/01/11(金) 15:41:00 ] このスレッドは 「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 勇気をもって書き込んでください。 内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。 ふらっとC#,C♯,C#(初心者用) Part22 pc11.2ch.net/test/read.cgi/tech/1197802312/
75 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:13:08 ] 配列の巡回を持った言語ならC#に限らない話だと思うのですが、 foreach中に配列の要素を消したい時、一番スマートなやり方としてはどんな物が有るでしょうか? どうしてもforeachが2回以上必要な気がします。 プログラミングがうまい人ならもっとマシな方法をしていませんでしょうか? 下に目的の代換えソースを書いてみました。 //あまり綺麗では無いと思う例--- /* 「予期しない動作を防ぐため、コレクション内容の変更には使用しないでください。」という制限の為 削除する要素へのキーを別途用意した配列に入れてその配列を"又"foreachしています。 */ foreach(OBJ val in table) { if (val.needDel) delArray.Add(val.key); } foreach(key key in delArray) // { table.Remove(key) } delArray.Clear()
76 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:21:01 ] 前スレでさんざん水掛け論やってたな確か
77 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:24:07 ] >>75 つ RemoveAll()
78 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:24:55 ] そうだな。 元がListBoxだったのにそれそっちのけでなんやかややってたなw
79 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:28:20 ] OBJとかkeyとかなぜか先頭小文字のneedDelとかvarと紛らわしいvalとか 名前ばっかり気になるw
80 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:29:35 ] Smalltalk風ですな
81 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:34:54 ] つうかあの時の奴と全く同じミスをしとる。 >>75 アイテムで削除すると同じキーが複数存在した場合にうまくいかんぞ。
82 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:35:17 ] foreachは消すためには使えない そもそも配列はAddもRemoveもできない
83 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:36:01 ] あらしや釣りでは無いです。 >76 >78 前スレ見てきました。 C#では ToList().ForEach(index => listBox1.Items.RemoveAt(index) ); あたりが使えそうですね。 これはつまり匿名メソッド? >79 >80 borland (Pascal?)から来ました。 var,valとalignはテキストエディタで色分けしています。
84 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:38:43 ] なんで素直にRemoveAll()じゃあかんの? たしかにあのメソッド名は大変紛らわしいが、アイテムごとに条件を見て 削除するという目的にまさにぴったりなんだが。
85 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:38:50 ] >>75 for (i = list.Count - 1; i >= 0; i--) { if (...) { list.RemoveAt(i); } } こんな感じかな。
86 名前:85 mailto:sage [2008/01/13(日) 17:42:13 ] しまった。RemoveAll()を忘れてた。
87 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:43:22 ] >>75 の言う配列というのがList<T>のことならRemoveAll一択
88 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:54:26 ] 前スレから見に戻って良かったです。前スレではRemoveAll()出てないし。 ヘルプが2割も理解できてませんが、List<T>::RemoveAllが良いのですね? Delegateを返す関数を作ってvalueに入れる?? どうでも良い話。自分が一昔前にborlandつかってた頃のソースは小文字のみでした。 何処で聞いたんだっけな?
89 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:54:26 ] AddやRemoveが使えてるから、配列じゃなくてList<T>なんだろうな。 table.RemoveAll(x => x.needDel) といったところか
90 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:55:27 ] >89 ありがとう。 まとまりました。
91 名前:デフォルトの名無しさん [2008/01/13(日) 18:17:25 ] List<T>の各要素に対して、削除と、削除とは別の処理を、1つのループで行うにはどうすればいいの?
92 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 18:25:38 ] RemoveAllかなんかで削除してからその他の処理をすれば?
93 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 18:28:06 ] RemoveAll厨必死杉
94 名前:デフォルトの名無しさん [2008/01/13(日) 18:28:59 ] List<T>の各要素に対して、削除と、削除とは別の処理を、1つのforeachで行うにはどうすればいいの?
95 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 18:33:32 ] forを使うといい
96 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 18:49:22 ] ttp://bbs.wankuma.com/index.cgi?mode=al2&namber=10106&KLOG=23
97 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 18:57:39 ] namber?
98 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 19:00:00 ] cgiの仕様だそうだからそっとしといてやれ。
99 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 20:25:32 ] XPの音量のプロパティのうちWaveとかの特定のものを操作したいのですが .NETのライブラリを探してもないようです。 Win32APIを使うしかないのでしょうか?
100 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 20:32:46 ] うん まあちょっと検索すりゃC#ラッパとかすぐ見つかるだろうけど
101 名前:58 mailto:sage [2008/01/13(日) 20:57:10 ] >>59 あ・・・ShowDialogって値返してたんですね(´・ω・)戻り値見る方法ですんなり解決しました。ありがとうこざいました。
102 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 21:43:33 ] ウインドウを表示するにはどうすればいいのでしょうか?
103 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 22:10:57 ] >>102 Form.Show(); とかってことじゃなくて?もうちょっと具体的に言ってもらえればアドバイスもしやすいと思うよ
104 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 22:44:18 ] ShowWindow( HWND, int )
105 名前:デフォルトの名無しさん [2008/01/13(日) 23:07:42 ] すいません。 C# 2005 Express Editionを使っているのですが、 フォームのAcceptButtonに設定されているボタンの クリックイベントをキャンセルするには、 どうしたらよいのでしょうか? private void buttonOK_Click(object sender, EventArgs e) { if (エラーチェック) { エラーならキャンセル } 以下略 というようなことがやりたいのですが、 フォームのAcceptButtonに設定されているため、 ウィンドウが消えてしまいます。 AcceptButtonに設定するのをあきらめるしかないのでしょうか?
106 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 23:20:25 ] うん。
107 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 23:25:55 ] VB6.0のフォームデザイナみたいにフォームに点が表示されて コントロールが配置しやすくなる設定はできないんでしょうか?
108 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 23:34:01 ] >>107 formのプロパティーにあるよ。
109 名前:デフォルトの名無しさん [2008/01/13(日) 23:41:20 ] いろんなサンプル見て調べながら、 public void myReceive (){ remoteEP = null; udp.BeginReceive(new AsyncCallback(ReceiveCallback), null); } private void ReceiveCallback (IAsyncResult ar){ byte[] ReceivedBytes = udp.EndReceive(ar, ref remoteEP); } udpはUDPClient型 remoteEPはIPEndPoint型 こんなかんじでバックグラウンドでUDPの受信待機&受信をするコードを書いてみたんですが、受信待機状態を中断するにはどうしたらいいんでしょうか・・・良い感じのメソッドとかも見つからなくて困ってます。。。
110 名前:デフォルトの名無しさん [2008/01/13(日) 23:42:40 ] >>106 むう。。。 ありがとうございます。
111 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:04:36 ] >>108 ツール→オプション→Windowsフォームデザイナ→レイアウト設定でできました
112 名前:デフォルトの名無しさん [2008/01/14(月) 08:02:02 ] Windows2003R2 x64のWndProcにNM_CUSTOMDRAWが飛んでこないんですが、なんで? x86を明示してビルドすると動くのですが
113 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 09:21:23 ] >>112 64bit環境ではIntPtrが64ビットになるから、これが影響してないか?
114 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 15:33:00 ] あるバイナリファイルの100万バイト目から10バイトだけデータが欲しいのですが、 こういう時でも律儀に100万バイト分のデータを読み込まないと取得できないのですか?
115 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 15:36:57 ] >>114 Seekがあるよ。
116 名前:114 mailto:sage [2008/01/14(月) 15:46:15 ] >>115 BaseStream.Seek()メソッドを利用することで取得できました ありがとうございました
117 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 16:57:24 ] File.Copyメソッドについて質問です。 このメソッドを利用して、色々とコピーしてみていると、たまにエラーが出ます。 アクセス権の問題だったりするのですが、例えば File.Copy(From, To); このFromを読み込み可能に、Toを読み書き可能にする、というのは無理なんでしょうか?
118 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:00:24 ] 質問の意味がよく分かりませんが。。。 そんな質問してると「日本語でおk」って書かれちゃうと思うぞw
119 名前:117 mailto:sage [2008/01/14(月) 17:04:24 ] えっと、こうかけばよかった File.Copy(From,To); この時、FromとToのアクセス権の設定の問題でエラーが出るのを回避したいです。 どうすれば良いでしょうか?
120 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:07:31 ] エラーが出ないようにチェックしてからコピーすればいいじゃまいか。 それともアクセス権を回避して無理やり書き込みたいってことか?
121 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:10:00 ] 無視しようと思えば無視して横車を押せるようなアクセス権なら そんなものに意味などないと思うんですが間違ってるでしょうか……
122 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:11:10 ] 無理にというより、設定し直してやりたいです
123 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:13:19 ] >>122 同じことだと思いますが…… 設定して「無理に」横車を押したい、と
124 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:16:07 ] アクセス権がないのにアクセス権を変える権利はあるのかよ。 どう考えても設定間違ってるだろw
125 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:16:29 ] それを言ったらPCの存在を否定してそうですが…… 設定を変えるのは無理そうですね、ファイルアクセス権に限ってというよりファイルアクセス権だからなのかな 世のバックアップソフトは一体どうなってるんだろう
126 名前:デフォルトの名無しさん [2008/01/14(月) 17:16:29 ] ふらっとなのにあげあしとりしか存在しないのかね それも反応早いし、このスレもういらないだろ正直
127 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:17:23 ] 前スレで「フォームの内容を保存」がどうのと騒いでた人ですが、 なるほど。拡張子がいかなるものであろうと、テキストファイルやHTMLファイルみたいな テキスト主体のデータをファイルに保存するにはテキスト形式で書き出し、 画像ファイルや音楽、動画ファイルといったデータを保存するにはバイナリ形式で書き出せば良かったのですね。 あとは書き出したい内容を然る場所に書けば、と。 その節は大変お騒がせして、お恥ずかしい(*^ ^*; (報告したかっただけなので、流してくださって構いません)
128 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:19:27 ] >>126 揚げ足取りってw 俺はそうは思わないけど、君がそう思うのなら自分の言葉に責任持てよ。 つまり揚げ足取りではない(繰り返すけど揚げ足とってるつもりないぞ)、 真面目な回答をぜひ頼むよ。 それとも自分棚上げ野郎なのか君は。
129 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:25:46 ] 円の描画でつまづいています。 円の内側は塗りつぶしができるのですが, 円の外側を塗りつぶしたい時はどうしたらいいでしょうか
130 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:31:12 ] >>125 アクセス権の存在意義について考えろ。 アクセス権をオーバーライドできたらアクセス権の意味がないだろ。 バックアップソフトは普通はアドミン権限で実行する。 >>129 円の形でクリッピングして塗りつぶせばいいんじゃね?
131 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:38:45 ] >>130 様 解決しました。 ありがとうございます。 勉強になりました。
132 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:44:37 ] コントロールでkeydownを所得するとき 個々のkyedownイベントでとる方法とPreviewKeyDownのどちらが良いのでしょうか? ふつうにkeydownで所得できるようなイベントの時はどっちでも同じ?
133 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:49:21 ] 所得ってなんだ…
134 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 19:31:44 ] スクロールのついているフォーム全体をキャプチャを目的に, スクロールを操作してキャプチャを試みています。 コントロールを指定して画像を取得することができたのですが スクロールは制御すらできません。 なにかよい助言をしていただけませんか?
135 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 20:31:46 ] >>133 また揚げ足かよ!と思ったら、その上も所得と書いてる・・・ たぶん132はガチでずっと、取得を所得と思って使ってきたんだろねw >>132 2.0以降なら、PreviewKeyDownで取得すべき。 KeyDownは発生しないキーがある(IsInputKeyプロパティで発生可になるけど)
136 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 20:49:19 ] >>126 揚げ足を取られるのは、アホな質問をした場合に限られる。 まともな質問であればまともな回答が返ってくる。 とられた場合はまずは自分がアホなことを言っていないかを振り返ってみよう。
137 名前:134 mailto:sage [2008/01/14(月) 21:19:13 ] どなたかおわかりになりませんか? いろいろ調べてみましたが,具体的にどのようにしたらいいのか さっぱり分かりませんでした。
138 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:21:43 ] WM_SCROLL投げたら?
139 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:21:44 ] Formの背景色だけを半透明にする方法はないでしょうか? Opacityオプションで半透明にすると、Form上のLabelなどの文字やButtonまで半透明になってしまいます。
140 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:25:58 ] >>139 TransparencyKey
141 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:27:47 ] >>139 TransparencyKeyでは完全に透明になってしまうのですが…
142 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:31:16 ] 背景色をマゼンタにでもしとけば?
143 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:38:53 ] zlib(RFC1950)で圧縮されたファイルを解凍したいんだけど、C#だけでできる? DeflateStream はRFC1951、GZipStream はRFC1952を使ってるらしくてうまく解凍できない。 他にzlibに関わるクラスも見当たらないし、もしかしてC#じゃできない?
144 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:40:27 ] 正式な方法が用意されてるかどうかは知らないけど CでできるんだったらC#でもDllImport使えばできる
145 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 22:21:36 ] C#でも自分でプログラム書けばできる
146 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 22:51:16 ] 携帯からなんでURLは書けないが、Sourceforgeにzlib.netとかいうプロジェクトがある
147 名前:109 mailto:sage [2008/01/14(月) 23:18:31 ] 良かったらどなたか>>109 もお願いします(´・ω・)
148 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:26:39 ] 受信待機状態を中断…もう少し具体的に
149 名前:109 mailto:sage [2008/01/15(火) 00:09:52 ] >>148 ありがとうございます。 具体的には、ボタンが押された時にポートを解放(?)してudpを破棄したいということです。 実装としては udp=new UdpClient(port);としているんですが、ユーザの入力でポートを変更することも出来るようにしたいんです。 とりあえず今日いろいろ考えた末、 ポートを変更するときに呼ばれるメソッドを public void ChangePort () { udp.Close(); udp = new UdpClient(port); myReceive; } として、無理矢理破棄して、ReceiveCallback内をtry〜catchで起こった例外を全て無視するようにして一応動いたんですが、あまりにも邪道すぎる気がします。。。
150 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:14:11 ] >>149 いやもそれでほぼオケじゃね? 例外を全て無視じゃなくて外からClose()された時の例外だけ無視するようにすれば。
151 名前:109 mailto:sage [2008/01/15(火) 00:36:04 ] >>109 あ゛・・・ これでよかったんですね。例外は基本的に全て処理するべきなのかなぁって思い込みがありました(´・ω・) とりあえずArgumentExceptionと、タイミングによってはObjectDisposedExceptionがスローされるみたいなんで、これらを無視するようにしておきました。 ありがとうございました。
152 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:53:30 ] C#のことでなく.NET Frameworkのことですれ違いなんだけど、 C#で文法のことはいいとしてライブラリのことが知りたいんだけど いい情報源教えてください。 dobon.net/ は読みました。 とりあえず プログラミングMicrosoft .NET Framework 第2版 (マイクロソフト公式解説書) (単行本) は買ってみようと思います、 よろしくお願いします。
153 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 01:15:19 ] >>152 MSDN
154 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 02:33:43 ] アンマネージドなリソースについてなんですが、やり直し等の機能でいつ解放 したらいいかわからないものが出てきた(ファイルとか)ので、ゴミ箱クラス作って そこで一括管理しようと思ったのですが、対象となる変数の参照カウンタって 取得できないのでしょうか? やっぱり自分で皮をかぶせるしかないですかね?
155 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 02:40:28 ] 何が言いたいのかよく分からんが、 LRのガーベジコレクタは参照カウント方式じゃないぞ
156 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 02:40:59 ] s/LR/CLR/;
157 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 02:48:42 ] >>155 ありゃ、そうなんですか… orz 今ざっと調べたところ、Finalize()を積んでおけばGCが勝手に実行 してくれるみたいなんですが、どうしてもDispose出来ないときは それでいいんですかね?
158 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 04:03:32 ] GC される前にランタイムが落ちるとか、結構ありそうだけどな。 ところで 「やり直し等の機能」 って何?
159 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 06:24:53 ] >>157 アンマネージリソースを扱うなら、必ず適切なタイミングで Disposeを呼ぶような設計しなきゃ駄目だよ。 細かい話が多いので割愛するけど、 ファイナライザに頼るスタイルは色々問題があるのヨ。 ぶっちゃけマネージドな世界では、例えばC++において参照カウンタ式スマートポインタで 自動化できてたリソース管理の一部は使えなくなると思っていた方が良いかと。
160 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 06:30:02 ] VBの参考書で勉強しているのですが Label1.Text = DirectCast(Me.PreviousPage.FindControl( _ "TextBox1"), TextBox).Text をC#で書くにはどうしたらいいですか?
161 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 07:42:54 ] 自己解決しましたm(_ _)m
162 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 08:30:22 ] >>158 ペイントなどに良くあるやり直し・元に戻す操作です。 >>159 やっぱり自前でDisposeしなきゃだめなんですね… ちょっと基本設計見直してきます orz
163 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 14:07:03 ] Form1とForm2を定義して Form1内で Form2 f2 = new Form2(); f2.ShowDialog(); でForm2を呼び出した後にf2内のbutton_Clickイベント処理内でf2の中のテキストボックスや、コンボボックスの値をForm1で取得したいのですが どうしたらよいでしょうか?
164 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 15:56:14 ] Form2がイベント公開してf2内のbutton_Clickイベントハンドラ内でfire イベントデリゲート自分で定義してテキストやコンボボックスの値をEventArgsにつっこむか またはプロパティで公開しとく
165 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 16:31:40 ] fireってなんでしょうか?ぐぐってもよくわかんないです・・・
166 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 16:39:14 ] イベントを起こす、ってことじゃね? //Form2.cs public event EventHandler HogeEvent; private void button_Click( object sender, EventArgs e ) { if( this.HogeEvent != nul ) this.HogeEvent( this, EventArgs.Empty ); // ← ココ } ------------------------------------------- //Form1.cs ... Form2 f2 = new Form2(); f2.HogeEvent += new EventHandler( f2_HogeEvent ); ... private void f2_HogeEvent( object sender, EventArgs e ) { //ココが呼ばれる }
167 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 18:47:13 ] >>f2.HogeEvent += new EventHandler( f2_HogeEvent ); これは何をしているのでしょうか? form1では private void button_add_Click(object sender, EventArgs e) { Addition add = new Addition(); add.ShowDialog(); } でform2(Addition)を呼び出し、手動で、form2内のテキストエリアやコンボボックスに入力してOKボタンを押す そのとき、したのイベントに遷移して、このメソッド内で、form1内のデータグリッドを更新できないか?ということなんですが。 private void button_OK_Click(object sender, EventArgs e) { }
168 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 18:52:38 ] (´・ω・`)しらんがな
169 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:03:28 ] 恥をしのんで質問いたします。 初めてコンソールアプリを作ろうとしているのですが、 エクスプローラーからコマンドプロンプトにディレクトリパスをD&Dで使わせようと思っています。 そのとき、長いフォルダ名を含む場合、絶対パスを表す文字列がダブルクォーテーションで囲まれてしまいます。 そのため、"入力文字列補正処理"を入れるようにしましたが、なんだかスッキリしません。 皆様どうやってやってますか? 以下にソースを書きます。宜しくお願いいたします。
170 名前:169 mailto:sage [2008/01/15(火) 19:04:04 ] static void Main(string[] args) { string[] str; //検証用変数 string Input, Output; //フォルダパス Console.WriteLine("入力フォルダパスを入力して下さい"); //入力文字列補正 str = Console.ReadLine().Split(new char[] {'\"'}); if (str.Length == 3) { Input = str[1]; } else { Input = str[0]; } Console.WriteLine("出力フォルダパスを入力して下さい"); //入力文字列補正 str = Console.ReadLine().Split(new char[] { '\"' }); if (str.Length == 3) { Output = str[1]; } else { Output = str[0]; } if (Directory.Exists(Input) & Directory.Exists(Output)) { Console.WriteLine("valid"); Console.ReadLine(); } else { Console.WriteLine("invalid"); Console.ReadLine(); } }
171 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:07:37 ] >>167 form2でセットするんじゃなくて、form2はセットさせたい項目をpublicなプロパティで返すようにする form1でDialogResultをチェックしてform2のプロパティからセットするのが正解
172 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:07:40 ] Trim(char[])
173 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:18:45 ] >>167 個人で作ってるだけでプロパティ作るのが面倒くさかったら、 form2の該当の入力フィールド(textBoxとか)のModifiersをPublicにするのも手だけど
174 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:22:07 ] >>171 丁寧にありがとうございます。 >>セットさせたい項目をpublicなプロパティで返すようにする というのがいまいちわかりません。 ソース載せます。 //form1(Main) public partial class Main : Form { public Main(){ InitializeComponent(); } private void button_add_Click(object sender, EventArgs e) { Addition add = new Addition(); add.ShowDialog(); } } //form2(Additon) public partial class Addition : Form { public Addition() { InitializeComponent(); } private void button_OK_Click(object sender, EventArgs e) { //MessageBox.Show(textBox_name.Text+"\n"+ comboBox1.Text+"\n"+textBox1.Text); } }
175 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:24:50 ] public partial class Addition : Form { public string 結果 { return textBox_name.Text+"\n"+ comboBox1.Text+"\n"+textBox1.Text; } }