ふらっとC#,C♯,C#(初心者用) Part21
1 :
ななしぃ# :
2007/11/18(日) 15:53:41 このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
前スレ: ふらっとC♯, C#(初心者用) Part20
http://pc11.2ch.net/test/read.cgi/tech/1191036844/
乙
??演算子って、参照型の代入に使っても問題ありませんか? NULL許容型への代入専用だったりします? 一応コンパイルが通ってうごくみたいですが
問題ない
7 :
5 :2007/11/18(日) 17:26:13
XMLのDOM読み込みってのは文書構造(属性の名前とか)が事前に分かってないとダメなの?
意味が分からんが、文書構造が分からんXMLに何か意味があるのか?
11 :
デフォルトの名無しさん :2007/11/19(月) 00:18:32
>>9 わかって無くても問題ないけど、使い道がわからんな・・・
いえ、こんな風に"data"って直書きしてたので気になっただけです・・ string data = rootElement.GetAttribute("data");
やっぱり意味が分からん 何が気になったの? どうならいいの?
そもそも、文書構造がいらないならXml使わないでCSV使えばいいだろう。
文書構造が分かってないとDOMは使えないのか?ってことが気になっただけです。
16 :
デフォルトの名無しさん :2007/11/19(月) 00:54:46
質問です。 数百、数千のファイルの情報をDBに登録したいのですが、 ExecuteNonQuery()でINSERT文を発行する以外でいい方法ありますでしょうか?
また意味の分からんのが来たなw
DOMは文書構造わからなくても使えるが、シリアライズとデシリアライズで調べてみたら?
19 :
9 :2007/11/19(月) 01:24:14
すみません。XMLについて勉強してまして気軽に質問してしまいました。 XmlReaderが上からベタ読みで、DOMはそうじゃない との記述があったのに サンプルコードが何かベタ書きだったのであれ?と思いました。 DOM含めXML勉強して出直してきますm(_ _)m
べたってなんだよ
DOMのパーサがそうなだけで それを使うアプリなんか作り方によるだけ。
クラスのインスタンスをフィールドに含める時に、newって何時します? private ClassA a = new ClassA(); というように、宣言する時に同時にnewすることも、 コンストラクタの中でnewしてもどちらでも良いクラスがありますよね? 皆さん、どうしてます?
おれの場合はインスタンスを再利用する場合はコンストラクタ 使い捨ての場合はフィールドで行っているよ
宣言時にnewするってのはコンストラクタでnewするってことだよ つまり違いはない ただ前者の場合、引数に他のフィールドが使えないってだけ
26 :
デフォルトの名無しさん :2007/11/20(火) 12:45:44
long配列をdouble配列に変換したいのですが、一発でやる方法はないのでしょうか? 下記だとエラーが出てコンパイル出来ないのですが、一個一個ループで変換するしか無いのでしょうか? long[] x = new long[10]; double[] y = new double[10]; y = (double[])x;
long[] l = { 10, 10 }; double[] d = { 20, 20 }; object l2 = (object)l; d = (double[])l2;
28 :
デフォルトの名無しさん :2007/11/20(火) 13:19:18
>>27 指定されたキャストは有効ではありません
というエラーが出るのですが・・・
29 :
27 :2007/11/20(火) 13:26:36
間違えた。 キャストが有効なのはジェネリクスだけだった。 配列は構造体だからループが一番早いと思う。
アルファベットを順番に配列に格納したいのですがどうしたらよいでしょうか? string[] strWord = new String[26]; strWord[0] = "A"; strWord[1] = "B"; ... こんなやり方しか知らなくて・・・よろしくお願いします。
((char)('A' + i)).ToString()
32 :
30 :2007/11/20(火) 15:44:04
ConvertAllでいいだろ多分。
byte[] bytesData = System.Text.Encoding.UTF8.GetBytes("A"); string[] str = new string[26]; for (int i = 0; i < 26; i++) { bytesData[0] + i; str[i] = System.Text.Encoding.UTF8.GetString(bytesData); }
なんつーことを…
まさに外道
byte[] bytesData = System.Text.Encoding.UTF8.GetBytes("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); string[] str = new string[26]; for (int i = 0; i < 26; i++) { str[i] = System.Text.Encoding.UTF8.GetString(bytesData[i]); }
冗談はこの辺にして。 string[] strWord = { "A","B","C"};
>>26 それがなぜエラーになるか、わかれば少しレベルアップできますよ。
40 :
デフォルトの名無しさん :2007/11/21(水) 10:53:34
ACB→YAZのようにずらして表示させたいんですけど どうやったらできますかね?
どうずらすの?
GetByte か アルファベット全体の配列を持つ
string ShiftLeft2( string str ) { const char DEF = (char)( 'Z' - 'A' + 1 ); const char def = (char)( 'z' - 'a' + 1 ); StringBuilder sb = new StringBuilder( str.Length ); for( int i = 0; i < str.Length; i++ ) { char ch = str[i]; if( 'A' <= ch && ch <= 'Z' ) { ch = (char)( ch - 2 ); if( ch < 'A' ) ch = (char)( ch + DEF ); } else if( 'a' <= ch && ch <= 'z' ) { ch = (char)( ch - 2 ); if( ch < 'a' ) ch = (char)( ch + def ); } sb.Append( ch ); } return sb.ToString(); }
44 :
40 :2007/11/21(水) 11:25:23
ありがとうございます やってみます
enumをintにするには、ただ単にintでキャストして、(int)Enum.Instanceとするだけで、 0から順番にintに出来ると思うのですが、逆は簡単に出来るのでしょうか? swich(num)で場合分けしてintからenumの文字列を得るしかないのでしょうか?
>>46 どうも有り難うございます〜。お手数お掛けしてすみませんでした。
Enum.GetName(typeof(enum), int);
(num as enum).ToString()
逆も普通に列挙体の型にキャストするだけだけど なんで文字列とかそういう話になるの?
あひょっとして((enum)num).ToString()じゃないと駄目だったかな?
>>48 はコンパイル通らないけど
参照型でも普通
>>48 みたいなasの使い方はしないよ
asはnullチェックとセットじゃないと意味がない
失敗したときわかりにくいし
>>48 それは、最初、直感的にやってみてエラーになったんですが、できるんでしょうか?
asオペレータは参照型で使用してくださいとなります。
enumは値型ですから駄目?
短く書きたかっただけ、ちょっと勘違い(値型でもいけたかなと思ったけど、やっぱりで
>>50 )。
フォーム上に配置されたコンポーネント(Component派生クラス)の内部から、 自分が配置されているフォームを取得することはできないでしょうか。 どうしても無理なら、カスタムデザイナを使って、フォームに配置されたときに 自動的にプロパティを設定するようなやり方にしようかと思っているのですが。
FindForm こんなVBっぽい機能使うなよw
ComponentにFindFormなんてないだろ
それは違う。 全然違うw
59 :
デフォルトの名無しさん :2007/11/22(木) 11:17:27
string[] str = new string[50]; 文字列配列が50個あって、これをカンマで全部つなげて文字列にしたいんだが、 string value = str[0] + ',' + str[1] + ',' + str[2] + ',' + str[3] + ・・・・・ これしか思いつかないんだorz もうちょっとスッキリした書き方って何かありますか?
string value = string.Join(",", str);
61 :
59 :2007/11/22(木) 11:27:11
>>60 ありがとう、おかげさまでスッキリ書けました。大感謝です!!
Join知らなくても、せめてforループくらい思いつかないと、配列の意味無いじゃん。
FizzBuzzやらせたら面白いことになりそうだな。
foreach(string st in str) {
+= じゃなくて StringBuilder を使ってくれるといいんだが。
文字列だけの連結なら、StringBuilderより+演算子を使う方が速い。 必要なだけの文字列の長さを計算して、1回のピープ確保で済む。
>>66 string value = "";
foreach (string s in str) {
value += s;
}
は、まずいだろ。
>>67 たぶん
>>66 は
string value = str[0] + ',' + str[1] + ',' + str[2] + ',' + str[3] + ・・・・・
これが高速だと言いたかったんだろ。
forループ回して+=で結合するのや
StringBuilder インスタンスのロスなどを考えても
今回の配列50個程度の文字列結合だと、
速度の点で言えばどの方法でも大差なさそうだけどね。
>>59 の
string value = str[0] + ',' + str[1] + ',' + str[2] + ',' + str[3] + ・・・・・
見た目はカコワルイが、これが一番高速ってことかなwww
joinでも変わらんだろ大して。
総合的に一番ベストな回答はjoinだろ。 将来配列の個数が増えたときも対応が利くし +=よりは速い。 そして何よりもスマートに記述できる。
>これしか思いつかないんだ すまんすまん、60=62だが、ここに突っ込んだんだよw
一時StringBuilderより+利用時の暗黙の配列の方が重かったりしてw
タブコントロール内にタブページが3ページあります。 3ページ目の中にはDataGridViewがあります。 タブページ外のボタン(タブコントロールと同じフォーム内)を クリックしたときに、3ページ目のコピーを4ページ目として、 新たにタブページを作成するメソッドって何かありませんか?
74 :
73 :2007/11/22(木) 16:11:41
ちょっと聞き方に問題ありました、すみません。 >新たにタブページを作成するメソッドって何かありませんか? 新たにタブページを作成するスマートな方法をご存知ないですか? に訂正します。
DataGridView にどんなデータが入ってるか知らんから
データ舐めて新規につくれとしか
>>66 ,ィ⊃ , -- 、
,r─-、 ,. ' / ,/ } ち
{ ヽ / ∠ 、___/ |
署 ヽ. V-─- 、 , ',_ヽ / ,' ょ
ヽ ヾ、 ',ニ、 ヽ_/ rュ、 ゙、 /
ま \ l トこ,! {`-'} Y っ
ヽj 'ー'' ⊆) '⌒` !
で , 、 l ヘ‐--‐ケ } と
ヽ ヽ. _ .ヽ. ゙<‐y′ /
来 } >'´.-!、 ゝ、_ ~ ___,ノ
| −! \` ー一'´丿 \
い ノ ,二!\ \___/ /`丶、
/\ / \ /~ト、 / l \
76 :
73 :2007/11/22(木) 17:26:01
>>75 すんません、説明不足でした。
DataGridViewのデータはコピーできなくてOKです。
3ページ目のDataGridViewの列タイトル・列幅など
プロパティのコピーができれば充分です。
何とかなりませんかね?
78 :
73 :2007/11/22(木) 18:13:03
自己解決しますた。 DataGridView dgv = dgvLog; ← dgvLog:3ページ目のDataGridView tabPage4.Controls.Add(dgv); たぶんこれで問題ないと思われます。
79 :
73 :2007/11/22(木) 18:18:44
↑78で解決できたと思ったんですが、 DataGridView dgv = dgvLog; tabPage4.Controls.Add(dgv); これを実行するとナゼか 3ページ目のDataGridViewが消えるorz
>>79 当たり前w
試しに、
DataGridView dgv = new DataGridView();
して、それをAdd してみ。
>>80 DataGridView dgv = new DataGridView();
DataGridView dgv = dgvLog;
tabPage4.Controls.Add(dgv);
このようにやっても3ページ目が消えます;;
どうやらdgvLogそのものをコピーするのは無理っぽいですね。。。
クマー
それコンパイルできんの?w
84 :
73 :2007/11/22(木) 19:24:25
一応デバッグモードで動いてますが。。。 これって何かヤバい記述なのでしょうか? 超初心者ですみません;;
C#のバージョンと.Netランタイムのバージョンの関係を教えてください。 C#3.0で開発するとクライアントでは.net3.0/3.5が必要なの? .net2.0の開発にC#3.0は使えないんですか?
LINQ使えないんじゃないの
>>85 C# 3.0というかVisual Studio 2008で書くと、常に.NET 2.0 SP1を想定してコンパイルする点は注意。
.NET 2.0→2.0 SP1でいくつか互換性が無くなる変更が行われているので、
それらの型やメソッドに依存してるプログラムは互換しない。
例
1) .NET 2.0にのみに存在し、SP1で無くなったメソッドを使っている
→.NET 2.0 SP1環境で動かない、Visual Studio 2008ではコンパイルが通らない
2) .NET 2.0 SP1で追加されたメソッドを使っている
→.NET 2.0無印環境で動かない、Visual Studio 2008ではコンパイルが通る
構造体とクラスに関連してスタックとピープについて詳しいサイトありませんか、
>>89 ,ィ⊃ , -- 、
,r─-、 ,. ' / ,/ } だ
{ ヽ / ∠ 、___/ |
署 ヽ. V-─- 、 , ',_ヽ / ,' か
ヽ ヾ、 ',ニ、 ヽ_/ rュ、 ゙、 /
ま \ l トこ,! {`-'} Y ら
ヽj 'ー'' ⊆) '⌒` !
で , 、 l ヘ‐--‐ケ }
ヽ ヽ. _ .ヽ. ゙<‐y′ /
来 } >'´.-!、 ゝ、_ ~ ___,ノ
| −! \` ー一'´丿 \
い ノ ,二!\ \___/ /`丶、
/\ / \ /~ト、 / l \
っ
て
おめぇはすっこんでろピー公
SP1の変更点一覧てどこにあるのん?
ところで、最近はヒープのことをピープって言うのが流行ってるのか?
ビープ
96 :
デフォルトの名無しさん :2007/11/23(金) 03:51:10
他スレでレスが付かなかったのですみませんが ここのスレで質問させて下さい。 C#で下記VB6の処理と同じ事をしたいのですが、 VB6+DAO接続のようにうまくいきません。 (Oracleの社員マスタをmdbにインポートする) Dim db1 As Database 'DSN接続文字列 Const DSN As String = _ "ODBC;DSN=abc;SRVR=orcl;UID=USER;PWD=Admin;" 'DAOでOracleに接続 Set db1 = Workspaces(0).OpenDatabase("", True, False, DSN) Dim strSQL As String ’社員マスタのインポート strSQL = "SELECT * INTO USER_SHAIN " & _ "IN '" & "C:\abc.mdb' from SHAIN" db1.Execute strSQL mdbにODBCでOracleにリンクして上記SQLを発行すれば うまくいきそうなんですが 空のabc.mdbに直接Oracleのデータをインポートするには C#+ADO.NETではやはり無理なのでしょうか? VB+DAOでできてC#+ADO.NETではできないのは 何か悔しいです。
>>96 そういうDAOべったりのことをしたいなら、C#からDAO使えばいいじゃね
99 :
デフォルトの名無しさん :2007/11/23(金) 11:30:52
>>96 多種DB間での単一SQLって・・・
プログラム的には接続を別に持って
DB1からObjectとして取得
DB2へ取得Objectをインサート
がスマートなんじゃね?
IEを監視してアクセスしたURLを取得したいのですが、どうアプローチすればいいでしょうか?
Fiddler でも参考にしたら
>>101 レスありがとうございます。
そのような感じではなくロガー用途で使いたいのです
ttp://mixlogger.the-ninja.jp/ このような感じです。
情報を小出しにしてしまい申し訳ありません。
プログラムは常駐していて、IEでなにかサイトにアクセスすると
URL、あとタイトルとアクセス時間をログにして出力すると考えています。
プロキシかませれば?
>>96 何が上手くいかないか書いていない。
c#上のコーディングミスの可能性があるのにソースが貼ってない。
それにもかかわらず
>C#+ADO.NETではやはり無理なのでしょうか?
なんだそれ?
ゆとり?
いいえ、ケフィアです。
106 :
デフォルトの名無しさん :2007/11/23(金) 20:41:21
俺には中学生のセンスにしか思えないけど。 まあプログラマって笑いのツボ(に限らないけど)が中学生な奴が多いのかもな。
高二病患者乙
string aとstring bがあってそれぞれ同一ドライブのディレクトリへの絶対パスが入っています。 aとbは親子の場合もあるしそうでないときもあります。 これをaからbへの相対パスに変更する簡単な方法はありますか?
111 :
デフォルトの名無しさん :2007/11/23(金) 23:09:04
C# 相対パス でググればいくらでもでてくるだろうに。 Uri.MakeRelativeUri
ほとんどの文字列操作は大抵にAPIにあるし、 無くてもアルゴリズムを自作できる程度のものが多い。
>>111 どうもありがとうございます。
Uriクラスとは気が付きませんでした・・
シリアル通信の3ch同時受信のプログラムを組んでるのですが RS232Cの通信というのはかなりのCPU負荷をかけるものなのでしょうか? 1chでの受信ではデータの取りこぼしもほとんどなく転送速度もそこそこ出ているのですが 3chでのプログラムではPentium MのPCでは動作が不安定になってしまいました。 Core 2 DuoのPCでは普通に動くのでCPUパワーの問題かなと思ったのですが・・・。 Serialportクラスを3つ並べてそれぞれをDataReceivedイベントで監視するという 安直な考えで組んだプログラムですのでプログラムにも問題があるのでしょうが 純粋にCPU負荷がかかる処理であることが原因なのでしょうか?
>>114 同期、非同期から勉強することをお勧めする。
>>114 イベント内でファイル開いたりしてないよね?
>>114 >DataReceivedイベントで監視する
通信のプロトコルが分からないので断定はできないが、
たぶん設計としてここがまずいと思う。
必ずしもフリースレッドでやる必要はないんだけど、定期的にバッファをポーリングする
やり方の方がほとんどの場合適合的じゃないのかな。
C#のWindowsアプリから、Excelで申請書を出力するアプリを作ろうとしています。 VS2005で、VSTOは持っていません。Excelは2003です。 あらかじめ、申請書のフォーマットのxlsファイルを用意し、そこに作成するWindowsアプリで COMでExcelを操作して申請者の氏名などの情報を書き込んで、xlsを別名で保存するつもりです。 困っているのが、申請書に、Excelのフォームコントロール(チェックボックス、コンボボックス、 ラジオボックス)があり、これらをC#から操作(選択)する方法がわからないことです。 現在、VS上でどのオブジェクトを操作したらいいのかもわからない状態です。 ご存じの方がいらっしゃったら、お教えいただけないでしょうか。
マクロにデータ与えて操作
>>119 たぶん正攻法じゃないとは思うけど、
VBA側の処理で特定のセルの値とコントロールの状態をリンクするコードを書いておけば、
C#のコードからはその特定のセルの値を操作すれば間接的にコントロールを操作できるんじゃないの?
122 :
119 :2007/11/24(土) 18:30:01
>>120 ,121
ありがとうございます。
マクロを組み合わせる方法がよさそうですね。
申請書の変更にも対応しやすそうですし。
123 :
デフォルトの名無しさん :2007/11/24(土) 19:11:25
URLからそのページのTITLEを取得する方法 あれば教えていただけないでしょうか? フレームワーク2.0です。
手っ取り早くサイトのページダウンロードして正規表現か何かでtitle抜き出せば?
>>122 VBAより、用意したWSHのスクリプトを呼び出す方がかっこよくね?
126 :
123 :2007/11/24(土) 19:37:55
>>124 ありがとうございます。
うまいことクラスが用意されてる感じではなさそうってことですね。
最終的に方法が見つからなければその方法でいきたいと思います。
どんなけ人頼みなんだよw
128 :
デフォルトの名無しさん :2007/11/24(土) 22:37:31
内の会社はリフレクションでExcelのCOMを操作するライブラリ作ってやってる。最低限の機能しかないけど、Excelのバージョンに関わらず動くから便利。 ただ大量に出力する時はCOM経由は遅いのがネックだね
それください
ネット上にファイルが存在するかどうかを調べる為には System.Net.WebClientクラスのDownloadFileメソッド等で 例外処理をする以外の方法はありませんか?
リストビューの詳細表示でアイコン表示しないときでも、1行当たりの高さを広げて 間隔よく表示したいのですけれども、方法ありますか?
>>130 普通にGETかHEAD投げてステータスコード見ろよ
>>126 webBrowserコントロールに読み込んで
webBrowser1.DocumentTitleでOKっぽいよ
134 :
122 :2007/11/25(日) 01:16:09
>>125 ありがとうございます。
VBScriptを直に使えるみたいですね。
完成したxlsファイルにはマクロを残したくないので、プログラム中でマクロを除去しようと考えていましたが、
WSHを使う方がスマートですね。
テキストボックスとボタンを配置したForm2をShowDialog()で表示して、 Form2のボタンをクリックしたときFontDialogを表示します。 しかし、FontDialogを閉じたらForm2も一緒に閉じてしまいます。 狙いとしては、FontDialogで選択したフォントをForm2に配置してある テキストボックスのFontプロパティに入れたいのです。 何か解決策はあるのでしょうか?
139 :
135 :2007/11/25(日) 14:47:07
Form2のボタンクリックのイベントハンドラで FontDialog fd = new FontDialog(); if (fd.ShowDialog() == DialogResult.OK) {} this.DialogResult = DialogResult.None; こんな感じでフォームが閉じないように出来たのですが、これで良いのでしょうか? というか、わざわざ最後の行を書かないといけないのが釈然としません。
釈然としないならボタンのDialogResultプロパティを疑えよJK
what is "JK" ?
>>140 ボタンのDialogResult?
イミワカランwwww
143 :
135 :2007/11/25(日) 15:46:14
>>140 なぜFontDialogのDialogResultがFom2のDialgResultになるのか
その動作と理由が全く分かりません・・・。
後学のためにももう少し一連の動作の説明をお願いします。
>>143 >>140 は寝言だから忘れていいと思う。
想像だけど、原因はたぶんForm2に存在するボタンが、デザイナで
Form2のAcceptButtonになってるんじゃないの?
ButtonクラスにDialogResultというプロパティがあって、それをNone以外に設定していると、ボタンが押されたとき自動的にダイアログが閉じられる。 Form.AcceptButtonではそうはならない。 寝言とか言う前にMSDNライブラリくらい読んどけボケ
ちょっと基本的な部分で悩んでおります。 環境は.NET Compact Framework 2.0上で以下 class From1 : Form { public Form1() }
>>145 >ButtonクラスにDialogResultというプロパティがあって、
そんなプロパティーないってw
>>148 それは分かったから、FontDialogのDialogResultとForm2のDialogResultとの因果関係は?
Clickイベントが発生してから、DialogResultに従ったフォームを閉じる動作が行われる。
>>150 Form2をShow()で呼べばFontDialogを閉じてもForm2は閉じないことを確認しました。
つまりはそういうことなんですね。
変なの沸いてんな
やべーなこのレベルはww
そのためのふらっと 相談室に来るレベルじゃないってこと
charからint、intからcharの変換ってこれの他に方法あったっけ。 値のチェックとかしてないけど。 private const int prefixDigits = 48; public static int ToInt32(this char c){ return (int)c - prefixDigits; } public static char ToChar(this int n){ return (char)(n + prefixDigits); }
ちょ待
変数名や 48 より、 '0' のがわかりやすい。
ParseやToStringやその類を使えと言ったらダメなんですか
だめだろどう見ても。
じゃないわ勘違いw
Int32.Parse(c.ToString()) (char)n.ToString() 一旦stringのインスタンス作ってるのが気持ち悪いYO
>>160 ’A' とかの文字が入ったときはどうすんの?
>値のチェックとかしてないけど。
int.TryParseを使った方が例外処理がいらないから楽だろうな。
>>156 それはcharからint、intからcharの変換とは言わない。
範囲が正しいってわかってるならわざわざメソッド化しなくてもc - '0'でいいしねえ。 範囲チェックして例外投げるのを主な目的にするならメソッド化する意味もあるだろうけど。 あとToInt32やToCharみたいな名前を使うのは混乱するのでやめていただきたい。
君には影響ないから心配いらないよ
うるせー馬鹿
Disposeとデストラクタのどっちに終了処理かけばええんすかね
内容によるが、デストラクタに書くことはほとんどない
むしろデストラクタ書くな たぶん使い方間違ってるから
ていうか、あれをデストラクタだと思ってはいけないような気がする。
だな、ってかデストラクタって呼び方やめただろ、紛らわしいから。
しかしフォームから呼んだフォントダイアログのダイアログリザルトの値が フォームに送られてフォームが閉じるって仕様の意味が分からんな。 通常のウィンドウ操作じゃあり得ないし、何を思ってこういう仕様にしたのだろうか。
それは勘違いを基にした情報だろう
ファイナライザっていうとコナミのガンダムもどきゲームを思い出して
おいおいwwwまだいたのかよResult君ww
ためした。 普通のプログラムでは何の問題もない。 多分こうなってるだけ。 DialogResult = fontDialog1.ShowDialog(); みなおせ。
ワロス 馬鹿ばっか
エスパーの俺からすると結論は、
>>183 のように子フォームのダイアログリザルトを
親フォームのダイアログリザルトに設定している
186 :
183 :2007/11/27(火) 22:41:16
エスパーの割にはたいしたことかいてないな… 憶測だけど DialogResult = fontDialog1.ShowDialog(); は、 DialogResult dr = fontDialog1.ShowDialog(); あたりの書き間違いじゃないかな? if(dr == DialogResult.OK) {} else if(dr == DialogResult.…) 憶測の域を出ない。
そんな立派なもんじゃなくてなんとなくそう書いただけじゃないか? なんとなく書く奴って意外なほど多いぞ。 理解できないが。
ただ悩むまでも無く、ソッコー気付くはずなんですが・・・
まあ世の中色々な人がいる。
普通はこう書かないか? if(fontDialog1.ShowDialog() == DialogResult.OK){ // }
俺は switch 派だな
列挙体の判定はswitchの方がシンプルになるからなー
Form2 f2 = new Form2(); f2.ShowDialog(); Form2で if(DialogResult.OK == FontDialog.ShowDialog()){...} で帰ってきたDialogResultがForm2に送られてForm2も閉じる
もう、あきた
ToolStripProgressBarってデフォルトだと鮮やかな緑なんですが、 プロパティとかで簡単に黄色とか赤に変更できたりしないのでしょうか? カスタムコントロールから作らないと駄目ですか?
ForeColor
ForeColorじゃ_
プログレス程度なら自分で作れるだろ?
Vistaのビジュアルに似せて作るのは少し面倒じゃね? なんかグラデーション動いてるし角が丸っこいし 似せなくてもいいならいいけど
202 :
デフォルトの名無しさん :2007/11/28(水) 15:37:29
Paintイベントにプロパティでswitchさせて描画させるだけだろ? グラデーションやクリッピングなんてそんな難しくないだろ?
頼んだ。
Vistaのバーを見て言ってる? つーかこれ、貼り付けてるときからてかりが動いてるなw
上の端掴んでぐりぐりサイズ変更すると動きのスピードが変わるな
>>201 Theme APIで描かせればそういう風になるんじゃないの?
やったことなくて憶測だけど。
変数の値が変化した時に起こるイベントを作る事はできますか?
Theme APIで描画=VisualStyleRendererで描画 つまり現在のビジュアルスタイルの色と形で描画されるんでしょ 質問者はその色を変えたいと。単純に色変えたいなら自前描画、 ただビジュアルスタイル風でかつ色を変えるのは不可能っしょ
>>207 変数を直接外部からは(内部でも?)触らないようにしてプロパティでラップ
setterでイベントを起こせばそれらしくなるんじゃ
Observer パターン?
set { if (this.hoge != value) { this.hoge = value; this.OnHogeChanged(EventArgs.Empty); } } ただこれだけのこと ○○Changedはこんな感じで実装するのが普通
>>194 いい加減つりはやめろ。
その前に見た瞬間に動かないとわかるコードを貼るのはやめろ。
>>211 PropertyChangedをつかおう
分かってなかった時代に(今も分かってないけど)書いたコードで、 ToolStripMenuItemを実行したときの引数として構造体を使ってしまった。 今クラスにしとけばよかったと激しく後悔してるんですが、 構造体って相互運用以外で使い道ってあるんですか?
bool int double DateTime … 冗談だスマン
構造体は参照を使いたくないときに使うだけ。
DB(DataSet)が変更した時にスグに、DataGridViewに表示させたいんんだけど、無理かなあ
218 :
207 :2007/11/29(木) 07:12:18
勉強になりましたm(_ _)m
テキストファイルを行単位で読み込んでいくときに、先頭行から全て読むなら 以下の感じになると思うのですが、途中の行から最後まで読みたい場合には、 どうしたら良いのでしょうか? srを途中まで進めてからwhileループに入れば良いような気がしますが、 StreamReaderを任意の希望の位置まで進めるメソッドってあるのでしょうか? StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("UTF-8")); string line; while ((line = sr.ReadLine()) != null) {
Stream.PositionをいじってからStreamReader作ればいいが、 [n行目以降]ならStreamReaderで読み捨て
>>220 どうも勉強になりました。有難うございます。
あまり速度に影響しないようなので、この場合、読み捨てにします。
222 :
デフォルトの名無しさん :2007/11/29(木) 17:58:35
Bitmapオブジェクトを24ビット形式のBMP形式で保存したいのですが 自動的に32ビット形式になってしまい困っています。 以下のプログラムのどこをどうしたら良いのでしょうか? よろしくお願いします。 // 24ビットBMP形式のファイルを読み込む Bitmap bmp = new Bitmap(@"before.bmp"); // 保存するとなぜか32ビットになっている bmp.Save(@"after.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
3引数のSave使いなよ。
224 :
デフォルトの名無しさん :2007/11/29(木) 18:23:22
>>223 3引数のSave、今はじめて知ったので調べてみました。
今ヘルプ見てるんですが、ImageCodecInfoとEncoderParametersに
何を設定するのか全然書いてないのよ;;
具体的にどのような値を記述するのか分からないです;;
225 :
デフォルトの名無しさん :2007/11/29(木) 18:46:33
3引数のSaveについて調べていたところ これってjpegで保存するときの圧縮率などの質を指定して saveするパラメータだということがわかりました。 bmp形式には使えないので、引き続き24ビットBMP形式で 保存する方法をご存知の方、よろしくお願いします。
>>225 Bitmapオブジェクトを24bitRGBで作ってからSaveで24bitにならんかな?
P/Invokeに関してちょっと自信がないので確認させてください。 関数のアンマネージシグネチャがvoid UnmanagedFunction(STRUCT*)、 P/Invokeのシグネチャがvoid UnmanagedFunction(IntPtr) だとして、 スタックに置かれた構造体に対して STRUCT st; UnmanagedFunction(new IntPtr(&st)); という風にポインタを直接渡すことは安全ですよね?
直接ではないのではないのかな?
229 :
227 :2007/11/29(木) 22:23:34
>>228 言葉足らずだったかも。
ここでいう直接っていうのは、HGlobalなどのアンマネージな領域に再確保することなく
マネージスタック上のアドレスを直接アンマネージ関数に渡す、という意味です。
向こうで変なことしてなければ
231 :
227 :2007/11/29(木) 22:30:40
>>230 どうもありがとうございます。安心しました。
>>231 あっちが非同期な関数だと死ぬるよ?
普通にref STRUCTでマーシャラにおまかせしないのかい?
234 :
227 :2007/11/29(木) 23:49:49
>>233 refにしないのは場合によってNULLを渡す必要があるためです。
というか非同期だったらref渡しでもまずいことになるような?
ちなみに、MSDN の「コピーと固定」を読んどくといいよ
236 :
227 :2007/11/30(金) 00:33:54
>>235 どうもありがとうございます。読んどきます。
Listでジェネリックを使ってisExistsを実装するやり方がいまいちよく分かりません。 List<string> list; //listに要素を入れる list.Exists( delegate( string value ) { return list.IndexOf( value ) >= 0; } ) のように、IndexOfで引っかかるかどうかという判定にしているのですが、 意図した動作をしません。 おそらくみんなこう書くという、典型的な実装があるのではと思っているのですが、 ちょっと教えていただけませんでしょうか。
意味が分からん。Containsを求めてるのか? Existsは例えばList<string>内に「**で始まる文字列が存在するか」調べるとかそんなんだが。 ていうか実装?
IndexOfで存在は確認できると思うけど?
引数が string で 戻り値 bool の関数作って bool b = aaa.Exists(new System.Predicate<string>(function1)); こんな感じでいいみたいだぞ
listの要素のひとつひとつがそのlistに含まれるかどうかをテストしてるわけで なかなか哲学的だ。
>>240 デリゲートの暗黙のインスタンス使ったほうが
コンパイラが良きにはからってくれて効率良かったりする
>>242 え、例えばどんなとき?
暗黙だろうが明示だろうが生成される型は同じだから変わらない気がするけど。
もしかして匿名デリゲートのことを言ってるのかな?
それにしてもどういう風に最適化しうるのか気になる。
>>242 効率ってのは実行効率?コーディングの効率?
型推論するだけじゃなくてILも変わるの?
namespaceの効果とか機能がよくわからないのですが ソースを大きく括って見やすくするためと思っていいですか?
>>246 同じ名前の宣言を複数実装できるからやないん?
ポリモーフィズムの延長線かもしれんけど
>>246 例えば、
System.Drawing.Image と
System.Web.UI.WebControls.Image を
区別できるようにするため。
249 :
242 :2007/11/30(金) 17:06:47
すまん
>>242 は記憶違いだった
匿名メソッドの場合はキャッシュされるんだけどそれとごっちゃになってた
>>238 わあああ
Containsがあるううう
∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄  ̄
DataGridViewの一列目がディレクトリ、二列目がファイル名になっていて、 foreach ( DataGridViewRow row in grid.Rows ) { MessageBox.show( row.Cells[ "Directory" ].ToString() ); MessageBox.show( row.Cells[ "File" ].ToString() ); } このように各行のそれぞれの値を見ようとしています。 Formで表に表示されている値はちゃんとディレクトリとファイル名が表示されているのですが、 上記コードで値を取り出すと、 DataGridViewTextBoxCell { ColumnIndex=0, RowIndex=0 } DataGridViewTextBoxCell { ColumnIndex=1, RowIndex=0 } のような値が取得されてしまいます。 これは何が悪く、どのように書くのが正しいんでしょうか。
値を取得するのだから、そのものズバリValueプロパティを使う。 ToString()は値を取得するためのメソッドじゃないし、そういう形式の文字列を返すとドキュメントにも明記されてるだろ。
あ、そうかValueか すいませんアホでした
DockStyle.Rightで複数のボタンを右詰めに表示しているのですが、 これらのボタン間の空白を設定するにはどうすればよいでしょうか? MSDNを読むとMarginプロパティがそれらしいと思ったんですが、どうも影響しないようです。
>>255 TableLayoutPanel使うか、
Panel に Button いれて
Panel の Padding を設定して
Panel の Dock を Right
Buttonの Dock は Fill
>>256 ありがとうございます。
んーどっちもなんだか微妙ですね。
大したロジックでもないので手動でレイアウトすることにします。
ちょっと教えてください。
System.Collections.GenericのLinkedListとLinkedListNodeを使って、
ダブルリンクリストを作り、データ追加イベントが発生すると、ある所
からデータを抜き出してリンクリストに追加、データ削除イベントが発
生すると、リンクリストから削除って感じのクラスを作ろうとしてます。
http://msdn2.microsoft.com/ja-jp/library/ahf4c754 (VS.80).aspx
のサンプルを見たのですが、今いちどうすれば良いのか分からなく困
っております。と云うのは、データの追加と削除を行う場合、サンプル
では行き成りLinkedListNodeに実データを入れて、次にLinkedList作っ
て作ったLinkedListにLinkedListNodeを追加となってます。
LinkedListNode<String> lln = new LinkedListNode<String>( "orange" );
LinkedList<String> ll = new LinkedList<String>();
ll.AddLast( lln );
ダブルリンクリストを作る場合とかって最初に空のノード作って、作った
ノードに対してデータを追加して行く、下のようなイメージを持ってました。
LinkedListNode<String> lln = new LinkedListNode<String>();
LinkedList<String> ll = new LinkedList<String>("HOGE");
lln.AddLast( ll );
動的に発生するデータを追加して行きたいのですが、どの様に実装すべ
きでしょうか?
http://sonic64.com/2006-05-03.html これを参考に、ほぼ同じ作りで動画を再生しようとしています。
再生する動画はファイルパスをリストで持っておき、停止イベントから
PlayVideoClip()を呼び出して数珠つなぎに再生します。
こちらの例とは異なり、フルスクリーンで再生します。
で、困っていることなんですが、音量を調整+ミュートにできるようにしたいと思い、
とりあえずミュートを実装しようとしたところ、
videoClip.Audio.Volume = 0; // Video videoClip
としても音量が変わらず、さらに再生が終わって停止した時に
停止イベントが呼ばれなくなってしまいました。
正しく音量調整するにはどうすればいいのでしょうか。
>>259 に追記です。
ミュート自体は
videoClip.Audio.Volume = -10000;
とすることで実装できました。0は最大音量らしいです。
停止イベントが呼ばれず連続再生できなくなる件について、アドバイスをいただけると助かります。
>>260 ほぼ同じ作りったってコードみなきゃ話にならない
>>258 なにがしたいのかよくわからんけど
そのサンプルは、こうしたらこんな風に状態が変わるよっていうだけのことで大した意味は無いだろ
LinkedListが自動的にリンクリストを作ってくれるから
余計なこと考えずに素直に使えばいい
264 :
263 :2007/12/01(土) 21:30:01
誤解を招く書き方だったかも そのサンプル通りに使えば自動的にリンクリストが作られる 要素をリンクしていくのはLinkedListの仕事だから余計なこと考えなくていい
>>264 サンプル通りにやればリンクリスト作られるのは分かるんですが、
最初入れるデータが無い状態で、LinkedListNodeのインスタンス
が作れないので困ってます。
サンプルだと、
LinkedListNode<String> lln = new LinkedListNode<String>( "orange" );
"orange"を最初に入れてますけど、
LinkedListNode<String> lln = new LinkedListNode<String>();
こうするとエラーになる点と、
LinkedListNode<String> lln = new LinkedListNode<String>( "orange" );
LinkedList<String> ll = new LinkedList<String>();
ll.AddLast( lln );
最初の1回目だけLinkedListにLinkedListNode入れて、2回目以降
の処理では。
ll.AddFirst( "red" );
ll.AddLast( "yellow" );
と直接データをLinkedListに入れてるので、1回目と2回目以降で処
理を分割させないと駄目なので、1回目と2回目を外見から見た時に
同じ操作でリンクさせて行くようなクラスを作りたいんですが、その
作り方が分からないのです。
Facadeデザインパターンを実装すればいいじゃん。
>>258 LinkedList<T>はノード全体を管理しているのだから、
そのイメージのような空のノードなんて作る必要はなく、
LinkedList<T>のインスタンスに直接AddLastすればいいぞ。
そもそもLinkedListNodeなんて要素を追加するときにいちいち作るもんじゃないと思う。
>>267 今MSDNでLinkedListとLinkedListNodeをもう一度見てた所ですが、
ちょっと頭混乱して来ました…_| ̄|○
なんか見てると、264氏や267氏の言われるようにLinkedListに直接
突っ込んで行けば良いのは分かってきましたが、LinkedListNodeと
LinkedListとの関係が分からなくなってしまいました。
> そもそもLinkedListNodeなんて要素を追加するときにいちいち作るもんじゃないと思う。
私の言いたいのも正にそこでして、自クラスのコンストラクターで空
のノードを用意出来れば良いと思ってたので、
LinkedListNode<String> lln = new LinkedListNode<String>();
としたかった訳ですが、これだとコンパイルエラーとなります。
リストにデータを入れて行く場合は良いのですが、リストからデータ
を読む場合や消す場合、LinkedListNodeのPrev/Nextが必要になる
と思うのですが、その場合どの様にすれば良いでしょうか?
>>268 LinkedListからLinkedListNodeを取り出したければ、
LinkedListのFirst/Lastプロパティ。ほかFind/FindLastメソッドも。
こっちからLinkedListNodeを作る必要はない。
LinkedListの要素をなめたいだけならforeachにも突っ込める。
クラスってもんを勉強しなさい。 そもそも内部構造の詳細を意識しなくても利用できる、 内部構造の違いにかかわらず操作できる、 ようにするためにコレクションのクラスがあるんだから。 LinkedListNodeは構造を意識した直接的な操作も サポートするために使えるようになってるだけで コレクションを表すのはあくまでLinkedListの方、使うのも普通はこっち。
初期化は LinkedListNode<string> lln = new LinkedListNode<string>(null); としておくか、アイテムなければ = new LinkedListNode<string>(null); するかでいいんじゃね?
訂正 としておくか、アイテムがなければ = new LinkedListNode<string>(1つ目のアイテム); するかでいいんじゃね?
いや別にLinkedListNode作る必要ないから LinkedList<string> ll = new LinkedList(); だけでおk
ご解答戴いた皆さんありがとうございました。やっと理解出来ました。 LinkedListNode自体がデータを含んでいる実体な訳ですね。 で各LinkedListNodeをLinkedListで繋いでいると。 LinkedListNodeとLinkedListの機能を逆の意味にとられえてたので混乱 してました。 リスト構造の頭と尻尾を自前で管理しようと思って、HeadNode/TailNode 見たいなのを作る為に、LinkedListNodeが存在してる物と思ってたんで すが、LinkedListのFirst/Lastがその役割をもっててLinkedListクラス内 で自動的に管理されてる訳ですね。 どうもお騒がせ致しました。
275 :
たろう :2007/12/02(日) 18:11:05
質問させてください。
現在googleの検索エンジンの機能をWindowsアプリで作成しようと
思っています。
作成すると言っても検索エンジンを1から作るのでは無く、
実際にはWindowsフォームのTextBoxに入力されたら(入力値を@とする。)
Google(
http://google.co.jp )画面内の入力エリア
に@をコピーし、Googleの検索ボタンを自動で押下し、
表示された検索一覧(データ)をWindowsフォーム内に表示したいと
考えています。
WEBページの内容を取得する方法は知っているのですが、
「Google等の検索エンジンに検索値を入力し検索ボタンを
自動で押下して検索データを取得する。」
という方法が分かりません。
何か参考になるサイト等ごございましたらお教え願います。
277 :
たろう :2007/12/02(日) 19:13:57
>>276 ありがとうございます。
因みに
"
http://www.google.co.jp/search?q= @"
といったWEBページのボタンを押した時にWEBサーバに送られる情報
はどの様にして調べているのでしょうか?
何か参考になるWEBサイトをご存知でしょうか?
例えば、Googleについては上記の方法で行ける事は分かったのですが
Yahoo / MSN Serch等も時間に余裕が出来たらチャレンジしてみたいと
思っています。
実際に検索してアドレス見ればわかるよw
がんばれたろう とりあえず文字列はUrlEncodeしなきゃだめよ
280 :
たろう :2007/12/02(日) 21:04:40
ちゃんと考えてURL円コードしないと駄目よ。
282 :
デフォルトの名無しさん :2007/12/02(日) 21:57:36
現在、2Gくらいの大きなファイルの、 バイナリをあれこれ弄って一つのファイルに書き出そうとしています。 出力時には元のファイルを100KBずつ読み込んで、FileStreamとBinaryWriter を使って、 順次書き出ししようと考えているのですが、 BinaryWriter をCloseしないとファイルに何も書いてくれないという状況です。 どなたか、順次書き出しの手ほどき、よろしくお願いします。
よくわからんがFlushすりゃいいんじゃないの?
Flushのことか?
質問です 埋め込まれたリソースとして動画ファイル(.aviファイル)を埋め込んだのですが、このファイルを再生するにはどうしたらよいのでしょうか? .wavファイルや.jpgなどはGetManifestResourceStreamでストリームを取得した後、コンストラクタに入れてやれば再生できたのですが 動画クラスって見つからなかったので、どうやって再生したらよいのでしょうか? MediaPlayerやDirectShowはどうやらファイル名を指定して再生するようで今回のようにストリームから再生することができませんでした。
最近thisを記述しなくなったのですが つけなければアクセスに時間がかかるとか何か不都合がありますか?
無いけど付けた方が良い。
無いからつけなくてもいい
気分
どっちがいいなんて正解はない。 状況も聞かずに無条件につけるべきなんていう奴は知らない。
拡張メソッドはthisつけないと呼び出せない 拡張メソッドと分けて見やすくする目的だとthisはつけないほうがいい
this.を付けないならインスタンスメンバにはプレフィックスを付けることにしたほうがいいと思う
m_とか? きめえ プレフィックスはインテリセンスの利きを悪くするし可読性も落ちるだろ
_だろ。 IronPythonのコードがそうなってる。
MSの中でも_が多いみたいだよ C++な人が多いからとか、VB.NETではつけないとプロパティ名と被りやすいから それに合わせてるとかきっとそういうことだろうけど
C#の話をしようぜ どっちにしろインテリセンスの利きは悪くなる 可読性は_ならたいして落ちないだろうけど C#の標準命名規則にはそんなんないのだ
MS公式のガイドラインがあるのはアセンブリ外から見える名前についてだけだよ
とりあえずprivateフィールドは小文字で始めますって書いてなかったか
インテリセンスの危機が悪いってのはどういうこと?
プレフィックスがあると一文字入力しても全然絞れない
>>300 公式には無いよ
「C#コーディング標準」ではプリフィックス付けてもいいとされてるし、
大文字小文字を区別した名前を付けるなとあるから、それを守るんであれば
何か付けないとプロパティと被る
あるwebサイトのデータを数秒間隔で取得してフォームに表示したいのですが sleepで数秒寝かせて無限ループで取得という方法でいいんでしょうか?
一定だと怪しまれるからランダムを入れた方がいいかもね
>>305 でもその方法だとなぜか重すぎてキャンセルとか受け付けてくれないんですよ
>>306 どうせ0秒から3秒くらいのランダムとかして平均1.5秒でアクセスしてるんだろう。
つーかメインのスレッドでスリープしてるんだろうw
>>308 mainのなかでwhile使って無限ループさせてるんでそうだと思います
guiのプログラミングって何が何だかわからない
guiはメインが全部終了しないと動き出さない
311 :
デフォルトの名無しさん :2007/12/03(月) 15:12:18
ジェネレートってどうゆう意味ですか? 教えてくださいお願いします。
イタリア風のアイスだよ
313 :
デフォルトの名無しさん :2007/12/03(月) 15:51:42
string data = "M-SEARCH * HTTP/1.1\r\nMX: 3\r\nHOST: 239.255.255.250:1900\r\nMAN: \"ssdp:discover\"\r\nST: urn:schemas-upnp-org:service:WANIPConnection:1\r\n\r\n" もたいな文字列が在る場合。↓みたいな感じで表示するにはどうすれば良いですか? M-SEARCH * HTTP/1.1\r\n MX: 3\r\n HOST: 239.255.255.250:1900\r\n MAN: "ssdp:discover"\r\n ST: urn:schemas-upnp-org:service:WANIPConnection:1\r\n \r\n
\r\n→\\r\\n\r\n
316 :
デフォルトの名無しさん :2007/12/03(月) 19:24:06
>>309 夢幻ループ化。
処理をWindowsに返さないといけないんです。
Windowsから仕事しロッテ言われてから動けばいいんです。
自分から動きたい場合は、そのタイミングで呼び出してもらえるように約束を取り付けておけばいいんです。
>>309 GUI関係ないだろ・・・
Timer使え
すいません質問です。 名前空間は、団体名. 技術名. 分野と記述するのが推奨だと始めて知ったのですが、 普通はこの形式で名前空間定義をしているのでしょうか?
そうです。
そうでもないよ。
楽しいか? しかし、どこのスレも下らん馴れ合いで嬉しくなっちゃう単細胞な馬鹿が多いな。
アンマネージdllはdllimportで呼べるそうですが、これを使えばいちおう理論的には全てのdllを呼べる、というわけでもないんでしょうか? ググるといろんなサイトや掲示板で、Cなどで作ったdllのimportに苦労してる人がけっこう見つかります。 でも、アドバイスしてる人も“難しい”とは言いますが“不可能”と言ってる人は見かけません。 理論的に不可能ではないが、非常に難しい場合もある、ということでしょうか?
>>322 Cのdllなら基本的に難しいことはないと思うが・・・。
C++のクラスライブラリをインポートするのは不可能。
324 :
322 :2007/12/04(火) 01:13:57
>>323 引数が構造体だったりすると大変にならないですか?
実は以前、他所様のCで書かれたdllを使おうと試みたんですが、
引数の構造体の中身が分からなくて断念したことがあります・・・
私の能力が至らないだけで、本当はできるんでしょうか?
>C++のクラスライブラリをインポートするのは不可能。
え、そうなんですか?すいません、どうして不可能なのか簡単に教えて頂けないでしょうか?
C#のここで質問していいか迷うけど C#でプログラミングしてるからここに。 TcpClient使ってネットワークストリームから出力すると レスポンスヘッダと内容自体がいっしょくたになるけど これをレスポンスヘッダと内容を効率よく分解する方法ってない? TcpClient以外を使うっていうのは無しで。
>>324 構造体なんて定義すればいいだけだよ
C同士だって構造体の中身がわからなければ何もできないでしょ
328 :
322 :2007/12/04(火) 02:51:26
>>326 アンマネージなC++クラスライブラリだと駄目ってことでしょうか?
やるとしたら、マネージなのに作り直すか、クラスを使わないようにする、という認識で合ってますか
あってる もちろんクラスをマネージコードとやりとりしなければいいのであって、DLL内だけで使用する分には問題ないよ。
C++/CLIでラップすればいいんじゃねえの
C++クラスのDLLをC#から直接呼び出すのは、 DllImportのCallingConvention.ThisCallを使えばできるが、 ファクトリや開放用のメソッドが必要になったりで 正直おすすめしない。
332 :
322 :2007/12/04(火) 06:09:38
>>327 いや、中身が分からないんです。非公開というか勝手に使ってるだけなので。
で、もう一度トライしてみたらできました!朝までかかってしまいましたが・・・
dll内の関数の引数や返り血が構造体のポインタなのですが、C#のほうで適当に
struct hoge{};
と空っぽの構造体を作ってしまいました。とりあえず正常に動きました!(´∀`)ヤッター
でも、何故これで動くのかあんまりよく分かってないのですが、このまま使って大丈夫でしょうか??
unsafeでやってるので少し不安です・・・
>>329 探したら↓などを見つけました。
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20010&forum=7 COMを使えばクラスライブラリも呼べるようですが、茨の道みたいですね
>>330 無理してコードを変えるより、そのままC++/CLIでラップするほうが楽だし安全、ということでしょうか。
・・・というか、これ使えば何でもできるんじゃ?もしかして相当すごい機能?
>>331 すいません、まだそういうことできるレベルじゃないです。。
もう寝ます。皆様お付きあい頂いて、ありがとうございました。
333 :
デフォルトの名無しさん :2007/12/04(火) 10:47:07
フォーム上のボタンを押したらMonthCalendarコントロールが表示するようにしたいのですが、 このMonthCalendarコントロールを表示した際にフォーム内からはみ出た部分が表示され ないのですが、回避するにはどうしたらよいのでしょうか?
別のフォームに作れば
フォームにラベルを複数置いたのですが これらを配列として扱うには下記の方法でよろしいでしょうか? label1〜label4がフォームに置いたラベルです Label[] lblArr = new Label[4]; lblArr[0] = label1; lblArr[1] = label2; lblArr[2] = label3; lblArr[3] = label4; 考え方がよくなかったりしたら教えてください
>>333 あらかじめ貼っておくか、追加するときに場所と大きさ計算してフォームのサイズを調整したら
>>335 いいよ
Label[] lblArr = new Label[]{ label1, label2, label3, label4 };
でもいい
337 :
335 :2007/12/04(火) 13:15:21
>>336 数が少ないなら宣言時に入れたほうがすっきりするんですね
そうするようにします。
ありがとうございました。
for(int i=0;i<4;i++){lblArr[i]=(Label)this.Controls["label"+i];}
一応こういうのもある
>>335-336 の方が好ましいのでできればやめた方がいいけど
339 :
デフォルトの名無しさん :2007/12/04(火) 15:05:32
コンソールアプリなのですが、キーボードステータスを読み取るにはどうすればよいのでしょうか。
340 :
339 :2007/12/04(火) 15:10:04
(続き) タイマーイベントのハンドラの中で、現在押下されているキーをすべて取得するといった内容で考えております。
いつもお世話になっております。ご相談させてください。 UDPポートをbindして、クライアントから一方的にudpデータが 送られてくる状況で、パケットの取りこぼしが発生してしまいます。 クライアントから送られてくるデータの、先頭2バイトをインクリメントデータの シーケンス番号としておりまして、これを連続して取り出したところ 最大で10パケットほどごっそり抜けるといった現象が発生しています。 以下がプログラムの流れです。 1.ソケット作成 2.Socket.BeginReceiveFrom〜で非同期受信開始 3.コールバックメソッドで、先頭2バイトを読み出してシーケンス番号を確認。 4. 3.のシーケンス番号を保存して、再びSocket.BeginReceiveFrom〜を呼び出し。 5.再度のコールバックメソッドで、4.で保存したシーケンス番号と 新しいシーケンス番号に2以上の差があるときがある。(おおよそ2〜10程度) UDP自体は信頼性のないネットワークなのは十分承知しているのですが、 クライアントからのデータはCore2DuoのPCでデータを受信しているので、 CPUパワーからして本当に取りこぼすのか疑問に思っております。 Wiresharkでパケットをキャプチャするとネットワークライン上には 正しくデータは流れているので、Windowsは取りこぼしていないが、 アプリケーションの段階で取りこぼしているのかなと想像はしているのですが……。 どなたか同じような症状の方おりませんでしょうか。 またわかる方がいればご教示願えませんでしょうか。 orz
>>341 1パケットに複数まとまってるんでない?
343 :
デフォルトの名無しさん :2007/12/04(火) 15:20:32
初歩的な質問ですみません。 C#の文法規則の意味について教えてください。 C++は理解しており、メンバーに対するアクセス指定は理解できるのですが クラスに対するアクセス指定の意味がわかりません。 名前空間内でクラス宣言を行うときにクラス自体にpublicかinternalの アクセス指定ができますが、これらは何を意味するのでしょうか? 理解していること ・名前空間内で指定可能なアクセス指定子はpublicかinternalのみ ・省略するとinternalとなる
>>340 GetAsyncKeyState()等のAPI 使うとかでどうか
346 :
339 :2007/12/04(火) 16:02:59
>>344 ビンゴでした。THANKS!
http://www.cam.hi-ho.ne.jp/oishi/tips.html#keystate を参考に、GetKeyStateで出来ました。
[DllImport("user32.dll")]
private extern static Int16 GetKeyState(VirtualKeyStates nVirtKey);
private enum VirtualKeyStates : int
{
VK_LBUTTON = 0x01,
VK_RBUTTON = 0x02,
}
public void OnTimedEvent(Object sender, ElapsedEventArgs e)
{
bool fLeftPressed = (GetKeyState(VirtualKeyStates.VK_LEFT) & 0x8000) != 0;
bool fRightPressed = (GetKeyState(VirtualKeyStates.VK_RIGHT) & 0x8000) != 0;
}
347 :
339 :2007/12/04(火) 16:16:20
おっと失礼 private enum VirtualKeyStates : int { VK_LEFT = 0x25, VK_RIGHT = 0x27, } 必要な定義はこちらでした。
348 :
デフォルトの名無しさん :2007/12/04(火) 16:51:16
>>345 ありがとうございます。
『public と宣言された型には、他のすべての型がアクセスできます。
internal と宣言された型には、同じアセンブリに所属する型だけが
アクセスできます。』
とあるのですが、ここでいうアセンブリとはソースファイルという理解
で正しいでしょうか?
349 :
348 :2007/12/04(火) 16:55:18
アセンブリとはDLLやEXEのことでした。 ということは、internal指定のクラスの場合は同一DLL, EXE からしか参照できなくて、public指定のクラスの場合は 別のDLLやEXEから参照できるということですね。
おおかた合ってる。
P/Invokeでは[DllImport("kernel32.dll")]などと指定しますが、 kernel32.dllやuser32.dllなどといったものは64ビットWindowsにも存在するのでしょうか? またこれらに64ビットポインタを渡しても問題ないのでしょうか? 手元に64ビット環境がないので、よろしくお願いします。
存在する 64bitのAPIも同名DLL WoW64で動くかどうかでどっちを使うか自動判断 明示したけりゃ/platform
>>353 どうもありがとうございます。
特別な理由がなければ何も考えずに書けばいいんですね。
もう一つ質問があるのですが、32用と64ビット用の二つのdllがある場合、
P/Invokeで実行環境に適したdllを読み込むことはできますか?
356 :
352 :2007/12/04(火) 23:38:07
>>355 どういうことです?
WOW64上で動作させて32ビット用を読み込めということですか?
ちなみにこの場合のdllはシステムにあるものではなく、自作のdllという意味です。
IntPtr.Sizeみて分岐
自動判断って書いてあるように見えるけど?
system32/syswow64に入らないのなら自動呼び分けはないんじゃないかな シングルトンで実装させれば使う側は気にしなくてすむようになるけど DLL検索パスを利用してうまいことやればdll名だけ違うDllImportとか書かなくてもなんとかなるかな
ま、正しいのはやはり/platformでターゲットを明示すること
361 :
352 :2007/12/04(火) 23:56:03
>>357 最悪そうせざるをえないですね。
>>359 実行時に検索パスを設定するorアーキテクチャによって変更するってできるんですかね?
できたらかなりすっきり書けそうですが。
>>360 そうしたら実行環境が限られてしまうんじゃないですか?
ラッパかぶせてその中で分岐しとけばごちゃごちゃしたりはしないだろう
IntPtr.Size PATH > そうしたら実行環境が限られてしまうんじゃないですか? 限られるんじゃなくて限らせるの。 x86とx64両方つくりゃいいだけ。
>>363 それはちょっと保守の手間が増えるので避けたいです。
>>362 そうですね。とりあえずその方法でいきたいと思います。
どうもありがとうございました。
365 :
352 :2007/12/05(水) 00:08:48
名前忘れました。>364=>352
366 :
デフォルトの名無しさん :2007/12/05(水) 00:30:28
色々なクラスで使うメソッドを、ユーティリティクラスを作ってstaticメソッドで呼び出すのと 継承を使って派生させて使うのとどっちがいいのでしょうか? 今までベースクラスに汎用メソッドを書いていたのですが、 Xmlの操作とか、クラスの本質に関係のない部分はユーティリティクラスのほうがいいのかな と最近思うようになってきました。 HttpUtility.UrlEncodeみたいに、.NETでもユーティリティクラスの存在そのもの を禁止されているわけではないですよね・・・
ユーティリティクラスあるだろ Mathとか
どっちがいいといってもことそれぞれとしか
まあユーティリティクラス作る方が標準的じゃないか
370 :
デフォルトの名無しさん :2007/12/05(水) 01:11:47
GoogleMapsAPIを利用してて自分もこういうWebAPIというものを 作ってみたいと思いました。 WebAPIを作るにあたり必要なスキルは何でしょうか? またWebAPIの開発の参考書などがあればご紹介ください。 WebAPIを利用するための参考書じゃなくて自分でWebAPIを開発する参考書です。
371 :
デフォルトの名無しさん :2007/12/05(水) 01:27:34
>>367-369 レスありがとうございます。
staticメソッドを計算の代用とか気軽な目的で自体は
問題なさそうですね・・・。
継承でやる方が邪道だよ大抵は。 まあユーティリティと言ってるものの内容にもよるけど。
Sin()やSqrt()がSystem.Doubleのインスタンスメンバだったりしたら煩わしいことこの上ないよな。
375 :
285 :2007/12/05(水) 12:48:53
ユーティリティクラスはクラス名短くしないと読むのが困難になりがち
C#で始めてプログラミング始めたんですけどお勧めの書籍とかサイトってありますか?
@ITのC#入門はガチですとも
他の言語の経験があるなら、ホントに@ITのC#入門読むだけですむよな。
オラはオライリーのプログラミングC#で覚えた。 ガイジン特有の変な例えのせいでデリゲートが全然理解できなかったが。
うちは標準C#入門っていう、いかにもな本だった。 なかなか読みやすかったのを覚えてる。
LINQのおかげでdelegateの意味は全然変わっちゃったしな
384 :
335 :2007/12/05(水) 18:07:26
正直デリゲートはわかってないけど やばいかな
385 :
335 :2007/12/05(水) 18:08:05
@IT逝ってきます
LINQ使えばわかる
イベント使えば分かる。 いや分からんかも…
100レススルーされてる
>>285 がやや気の毒だがわからない
でも動画なんて埋め込みたいとは思わないな俺は
イベントはdelegate分かってなくてもIDEが勝手に書いてくれるからな
>>285 か。
メモリに読めば何とかなるのなら、APIでリソースから直接読むのは可能。
>>390 メモリにあるものをどうやって再生するかって話じゃないの?
テンポラリフォルダにでも展開しちゃえばいいんじゃないかと思うが
>>379-380 川俣氏のやつですよね
以前2chで叩かれてるところに本人降臨してたスレがありましたが、中身はガチと思っていいんですかね?
>>392 内容は悪くないというか、簡潔でいいと思うけど、
あれで習得できるのは「ミニマムリクワイアメント」に過ぎないね。
話題になったのはVBネタの記事とかか あの人どうも筆が走りすぎる感があるな C#入門とかあの辺はよく書けてるんだけど
>>394 俺が思うに、川俣の文体に反発する人間っていうのはたぶんあまり読書経験がないというか、
文芸的な文章を読まないタイプの人でしょ。
あれはああいう文体で、あんなものベタにとって反発するってどんだけオボコいんだよ、
と俺なんか思っちゃうけど。
ライターなら多少走り気味なくらいがちょうどいいんじゃないの?
叩きをするようなねらーによしあしなどわかってたまるか
まあおまえらおちつけ ここは初心者用質問スレだ
なんかカワマタさんが来ましたよ
401 :
デフォルトの名無しさん :2007/12/06(木) 00:33:01
asmxファイルで開発してる人いる?
Xファイルなら
あるプロトコルでチャットに接続し、ユーザはIEの画面を通して発言したり 他者の発言を取得して画面を更新したりするプログラムを作りたいと思っています。 以下のような構造になるのかなと考えています。 【ユーザ】←HTTP→【画面側プログラム@】←なんらかの方法→【プログラムA】←→インターネット @: ASPで、他者の発言の取得はn秒ごとにポーリングを行う。 (サーバプッシュ型にできればなお良い) A: EXEにしてサービス化?ともかく常時起動しており、チャットには繋がりっぱなしにする。 @の状態には依存しない。 ASPにして@と同化させると、ユーザが画面を開くたびにインスタンスが新しくなってしまうのと ユーザが画面を開かなければインスタンスを作れないので分ける必要がある(と思っている) そこでよく分からないんですが、まず、IISの起動と終了のイベントを拾って プログラムを動かすことができるのでしょうか。 可能なら、@とAを一緒くたにして、IIS起動でチャット接続して、その状態をstaticメンバにして 全インスタンスで共有し、終了で切断するということでASP一本にできると思ってます。 これは可能でしょうか。 もう一つ、分ける場合には@とAで情報のやりとりをする必要があります。 Aでインタフェースを提供し、@はそれを呼び出すだけという形にしたいです。 @から見たときに利用を簡単にしたいので、できればWebサービスとしてインタフェースを 提供できないかなと思うのですが、AがASPじゃなく普通のEXEの時に、AでWebサービスを 実装するにはどのようにすればいいのでしょうか。 (AがASPなら、IISが良きに計らってくれますが…) また、Webサービスが無理ならどういう方法で通信するのがベターでしょうか。プロセス間通信とか? 妄想段階なので曖昧な点が多いのですが、アドバイスをいただければ幸いです。 よろしくお願いします。
パスワードを保存するファイルに暗号化をかけたいな〜と思ったんですが、 その暗号化キーをどこに保存しようか悩んでいます。 Firefox のマスタパスワードみたいに毎回問い合わせるのは最終手段にしたいと思ってまして、 じゃあどこにどうやって保存しようかな……という話です。
>>395 なんじゃそりゃ?
まあ反発してたってのがどんなんかしらんから何とも言えんけど、
誤解を招きやすい文章だと思ったことは何回かある。
保存先ならIsolatedStorageでもどう
>>403 ASPスレで聞いたほうがよい
たぶんセッションで出来る
VC#2005EEを使い始めたのですが、ツールバーに使うアイコンをWindows標準のもの(新規作成とか上書き保存とか)を使いたいのですが、Windowsフォルダとかから探してくるしかないんでしょうか? また、そういうったアイコンは勝手に使ってもいいんでしょうか?
NewWindowイベントをキャンセルしたいのですが、 private void webBrowser1_NewWindow(object sender, CancelEventArgs e) { e.Cancel = true; } では上手くいきません。 どのようにしたら良いのか教えてください
411 :
デフォルトの名無しさん :2007/12/06(木) 17:30:21
下記のソースを実行すると1のところでエラーが発生してしまいます。 どうやったら解消されるか教えてください。 目的は、csvファイルからデータを読み込んで、2番目のデータを配列に 挿入することです。 class FileRead2 { public int[] data; public void fileRead() { string[] list; string line; int k = 0; StreamReader r = new StreamReader("data.csv",Encoding.Default); while ((line = r.ReadLine()) != null) { list = line.Split(','); /*1*/ data[k] = Convert.ToInt32(list[1]); k++; } r.Close(); } }
>>411 空文字なんじゃねーの?
Console.writeline(list[1] == string.Empty);
/*1*/ data[k] = Convert.ToInt32(list[1]);
でやってみれ
listの要素数を確認せずに[1]にアクセスするなよ
>エラーが発生してしまいます。 なんでエラーの内容を書かないかな。 list[1]がないか、Parseに失敗してるかのどちらかだろうけど。
415 :
411 :2007/12/06(木) 18:43:07
エラー内容は オブジェクト参照がオブジェクト インスタンスに設定されていません。 というものです。 エラー発生時のlistの中身を確認してみると6番目までデータが 入っているので、どうやらparseに失敗しているようです。
>>415 そりはもしかして public int[] data; のdataを初期化してないのでは?
なんでこれでヌルポが出るんだ 配列の境界を越えてるとかなら分かるが
A.Hoge(){}; B.Hoge(){}; using A; using B; public static void Main{ Hoge(); } この場合どっらのHoge()が呼び出されんですか?
コンパイルエラーになる
わかりました。
明らかに
>>416 が正解だろ。
ファイルの行数が決まってないから初期化できない、というならList<string>を使え。
C#ってLinuxに移植されないの?
MONO Silverlight
426 :
411 :2007/12/06(木) 20:03:15
皆さんご助言ありがとうございました。 配列を初期化していないことが原因でした。 無事解決できて良かったです。
>>409 遅くなりましたがありがとうございました。
EEを使ってる人は標準のアイコンすらないんですね;
>>427 ToolStripやMenuStripなら「標準項目の挿入」でいくつかアイコンがつくね。
そいつをなんとか保存しといて使い回したら? ちっこいけど。
429 :
デフォルトの名無しさん :2007/12/06(木) 23:16:30
これマジでつまらない質問なんですが インスタンスが理解できません だれかわかりやすく説明してください
(どこかで)newしたもの
使ってりゃ分かる
定番の クラス…社員 インスタンス…平社員の山本 みたいなのって余計混乱させるだけだと思う
オブジェクト指向とか継承とかの説明って大嘘だしな 使ってりゃ分かる
>>428 「標準項目の挿入」というのはどこにあるんですか??
435 :
デフォルトの名無しさん :2007/12/07(金) 01:46:15
質問です。 半角英文で書かれたWord文書を読み込んでXMLに出力するプログラムをC#(VS2003)で作成しています。 問題なのは、Word文書中に半角の「μ(みゅー)」や「π(ぱい)」が存在する場合で、読み込んでstring変数に格納した時点で「(」のような文字に変わってしまいます。 化けずにうまく読み込む方法はありますでしょうか? ちなみに、半角の「μ」や「π」は、Wordの「挿入−記号と特殊文字」 メニューから挿入したものです。 よろしくお願いします。
>>434 ポトペタしたあと、そいつをクリックするとそいつの右上あたりに矢印がでて、
そいつクリックすると出るウィンドウの中。
>>435 コンソール出力だけど普通に化けなかったよ?
なんか情報出てないんじゃない?
>>437 トレースで出力してみましたが、文字化けしています。
全角なら問題ないのですが...。
>>439 どう化けるの?
実際に出力してるコードは16進でダンプしてみた?
表示のフォントはどれにしてるの?
>>440 string変数の中身はセミコロンのような文字になっています。
フォントは、Wordはセンチュリーで、VSの出力ウィンドウのフォントもセンチュリーに変更したら、こちらは正しく表示されました。
ListViewItemのTagに自作の構造体を入れてるんだけど、この構造体は ListViewItemを削除した時点で破棄されるのですか?
Delete時に破棄する、というコードを入れてないのなら破棄されない
ってここC#だったすまん。 でも削除した時点、ではないかな。
そのうちGCが回収してくれるので楽観的でもいいってことでしょうか?
おまじないかもしれないが、明示的Disposeしたりnullをセットしたほうが無難なきがする
>>445 その構造体が、アンマネージドリソースを確保していないが入りにはそれでOK。
前から思ってたんですが、楽観的って言葉の定義がすごい曖昧な気がするであります。 マネージコードである限り、どんなに無茶苦茶なコード書いてもBSODみたいな 破壊は原理的に起きないんでしょうか? 本当にこの辺理解しようと思ったら.netをきちんと勉強しないと駄目ですよね
マネージコードでもたとえばDllImportしてる関数を適当に呼んだら死ぬ。
>>448 マネージドコードでかつ、マネージドリソースにしかアクセスしない限りは
BSOD 起こす前に OutOfMemoryException が起こる。
でも、結局、ライブラリ中とかでも Win32API を色々 PInvoke してて、
あんま楽観もできないかも。
まあ、多分、ドライバとかみたいに OS に深く食い込むものでもなければ
ブルースクリーンは拝めないと思う。
451 :
448 :2007/12/07(金) 15:45:45
やっぱりそうですよね
つまり、マネージな世界で閉じてる限り、何があろうともBSODのような被害は起こりえないってことですね
ある意味初心者が使うには打ってつけの言語ですね
ところで
>>447 さんの
>確保していないが入りにはそれでOK。
は
>確保していない限りにはそれでOK。
という意味でしょうか?
構造体がアンマネージリソース確保しちゃダメだろ
そんな事あんまねーし
454 :
デフォルトの名無しさん :2007/12/07(金) 19:25:38
C#でErr.Numberのようなシステムの吐き出すエラーコードを知るにはどうしたらいいでしょう catchの中でどうしても取りたいです クラス名とかエラー文字列とかいらないです
そんなものはない。
エラーを番号で表すのが不便でしょうがないから エラー通達の方法自体を変えたのに。
C#のデストラクタって役に立つんですか?
Dispose()の呼び忘れ防止とか……
とかっていうかそれだけだな
半角の「μ(みゅー)」や「π(ぱい)」ってあるんだね。 しらんかった。 つーかないだろ?
Windows以外でC#使ってる人いるの? やっぱC#の人はWinアプリ開発なのかな?
うんにゃ 言語論争につかうだけ。
いるよ
万一Silverlightが流行ることがあれば…
でもvista以降のOSが普及すれば一気に流行るんだろうね LLなんて軟派な言語は要らないんだぜ?
>>460 Symbol フォントでμとかπ出すためのコードじゃないか?
Symbol フォントのμ、πってそれぞれ m と p に対応してた気はするけど。
467 :
デフォルトの名無しさん :2007/12/07(金) 23:02:39
配列のプロパティについて詳しく説明しているHPはありますか? 宣言の仕方と使い方の例を参照したいです。
そりゃMSDN2
469 :
デフォルトの名無しさん :2007/12/07(金) 23:55:34
.net frameworkのクラス階層が複雑すぎて疲れました… c#のせいじゃないと分かってますが…
そうなったら引退ですね
あれが複雑てw
Javaの方が酷い
複雑なんじゃなくて量が多いだけ 一部のよく使うものだけ覚えておけばあとは必要に応じて調べればいい
何の言語でもライブラリ覚えるのが一番大変だ
475 :
デフォルトの名無しさん :2007/12/08(土) 01:19:52
.NETのクラスライブラリなんて無茶苦茶使いやすいじゃん その昔MFCなるものがあって、最悪だったぞ。
こいつ引退どころかプログラマになってすらいないだろうな
なんか色々話聞きますよね・・・>MFCやSTL これから入る初心者にとっては、昔に比べて相当恵まれた環境なんですかね、やっぱ?
もう、恵まれてるなんてものじゃない。 10年も昔と比べたら、何十倍も何百倍も生産性高いんじゃなかろうか。
IDEがタダなんて考えられんかったしなぁ・・・
話ぶった切ってスマソ。質問です。 windows mobile6でファイルを同期させるプログラムをC#で書いているのですが、 ファイルの作成日や最終書き込み日時を変更させるには どうしたら良いでしょうか? FileInfoやFileクラスだと、LastWriteTimeプロパティが読み取り専用で使えずハマってる現状です。 File.copy(string path)を使ってファイルをコピーすると、何故かファイルのミリ秒部分が 切り捨て、もしくは切り上げされているようで、書き込み日時が1秒ずれてしまうのを直したいのです。
ExpressEditionみたいのをもっと早く出しておけば他のIDEへの流出は食い止められたのに IDEの儲けなんて全体で見れば大したことないんでしょ?
>>480 へ?File.SetLastWriteTimeは?
483 :
480 :2007/12/08(土) 03:09:28
GetLastWriteTime はwindows mobileでもサポートされてるんですが、 何故かSetLastWriteTimeの方はサポートされていないようなんです。
>>480 CreationTime/LastWriteTime/LastWriteTimeはCE系はRead Onlyやね。
違ってるかも知れんけど多分Compact Framework上からは無理臭い希ガス。
まずWin32APIで出来るか確認して出来るようならDllImportする位かな。
漏れも今CE5.0+CFMで開発やってるけど、結構良く使いそうなメソッドや
プロパティーが端折られてて困る事が多々(つд`)
Win32API自体がサブセットな実装だからしゃーないんだろうけど。
486 :
485 :2007/12/08(土) 09:46:11
>>484 こんなんあるのか。ちょと見て見よ。
質問主じゃないけど参考になりましたわ。
そもそもミリ秒単位の情報って持てるの?
488 :
デフォルトの名無しさん :2007/12/08(土) 14:01:28
持てるよ
バイト配列AとBがあって、配列Aの中から配列Bを検索するにはどうしたらよいですか? byte[] A = byte[0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07] byte[] B = byte[0x03, 0x04, 0x05] だとしたら、3を返してほしいのですが…
A.Intersect(B).First()
そんなんあったっけ? っていうかそれ目的違うんじゃねーの? 普通に考えて。
byte[] A = new byte[] {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; byte[] B = new byte[] {0x03, 0x04, 0x05}; string a = System.Text.Encoding.ASCII.GetString(A); string b = System.Text.Encoding.ASCII.GetString(B); a.IndexOf(b) Encoding.ASCIIで、バイト列がそのまま文字列になるなら、これでいけると思うけど。 だめなら、素直にforでまわすとか。
493 :
489 :2007/12/08(土) 15:32:38
>>492 ありがとうございます。
早速試してみます。
試すなよそんな方法w
495 :
489 :2007/12/08(土) 15:42:44
ダメでしたw StringBuilderで1バイトずつ連結して、stringのIndexOf使うことにします。
えー。素直に二重ループじゃだめなのか? int indexOf(byte[] A, byte[] B) { for (int i = 0; i <= A.Length - B.Length; ++i) { int j; for (j = 0; j < B.Length; ++j) if (B[j] != A[i + j]) break; if (j == B.Length) return i; } return -1; }
16進数文字列化して検索ってしたことならあるな、手抜きのために。
498 :
489 :2007/12/08(土) 16:00:36
>>496 二重ループのが簡単そうですね。
希望通りの結果が得られました。
ありがとうございました。
素直にLINQ使えよ
ちょっと教えてください。 class A { public class A { public uint uiId; public StringBuilder sbSTR; public byte[] bData; } public static List<A> Alist = new List<A>(); public staitc SetData() { A _A = new A(); _Aにデータ詰める Alist.Add(_A); } } このクラスAはFrom1等から呼び出して使う感じなんですが、ここでAlistに入れたデータはFrom1の生存 期間中はずっとデータを保持してて欲しい為、AlistとSetData()をstaticで宣言しております。 しかしデータを詰める為のテンポラリー領域として_Aをnewしてリストに突っ込んでます。この_Aの生存期 間てどうなるのでしょうか?また_Aの生存期間が過ぎた時にAlistに追加されてる_Aも当然消えるのでしょ うか?
>>501 > このクラスAはFrom1等から呼び出して使う感じなんですが、ここでAlistに入れたデータはFrom1の生存
> 期間中はずっとデータを保持してて欲しい為、AlistとSetData()をstaticで宣言しております。
意味わかんね。FormAがAのインスタンス保持すりゃすむ話。
生存期間とか別に気にしなくていい 誰かが使ってる(使える状況にある)限りは絶対消えない
>>502 んとA内にはDllImportして使う他のメソッドも定義されてて全部staticで定義
されてるので、Form1側でAのインスタンス作ろうとするとエラーになるのです。
>>503 なるほどです。ちなみに色々本読んだりして探してるのですが、newした変数
/インスタンスの生存期間とか詳しく説明された物って全然見かけないのは、
気にしなくて良いからなんでしょうか?
どうしてもCの考えで、auto/static/mallocした領域に照らして考えてしまうの
で、この変数消えるんじゃね?と思える状況に多々遭遇しております。まぁク
ラスの設計がヘボなんですけど…。
こう言うメモリ回りの話しが詳しく書かれた物て何か無いのでしょうか?
そういうことをいちいち気にしなくて済むようにするためのGC 他から参照されてないオブジェクトはそのうちGCに消される。それだけ。
オブジェクトは到達可能ならば消えないし 到達不可能になると消える それがGC
507 :
501 :2007/12/08(土) 19:26:42
なるほど、そういう文化と言う事ですか。 ありがとうございました。
文化じゃねないよ。仕様だよ。
Cになれてるなら、 どこからも参照されなくなったら勝手にfreeされるmallocだと思っとけ。
GCされる頻度って調整できるんですか? この辺はパフォーマンスに大きく影響する部分ですよね
自分でGC.Collect呼べば 構造体をうまく使えば
GCは必要になったら起動される。 無理やり起動することはできるがお勧めしない。 よって直接的な調整の余地はあまり無い。 大量にインスタンスを生成して参照しなくなれば頻度は上がるし、 あまりインスタンスを作成しないなら下がる。 細かい話はいろいろあるけど、まずはそれだけ。
ゲームなど、シビアなインタラクションが要求されるような場合は別だが、 多くの場合は細かく気にする必要は無い。 インスタンスを無駄に生成しないようにある程度注意するくらい。
大抵の場合自分がやるよりうまいことやってくれるよ
確かに3Dゲーム系では.net避ける人多いですね
MDX2.0が立ち消えになっちまったからなあ
つXNA
あんなもの使えるかよ
マネージドDirectXでいいじゃない
あんなもん自分でラッパー書いたらしまいや
522 :
デフォルトの名無しさん :2007/12/09(日) 00:38:30
string modosu = this.Sample_List.SelectedItem.ToString(); modosu = "@\"" + "C:\\test\\" + modosu + ".txt\""; this.textBox1.Text = modosu; StreamReader sr = new StreamReader(modosu, Encoding.GetEncoding("Shift_JIS")); パスを変数化して、StreamReaderの第一引数に入れているのですが、接続されません。 ちなみに変数"modosu"の中身を直接書き込むと接続されます。 @"C:\test\時間集計.txt" 何が原因なのでしょうか?
523 :
デフォルトの名無しさん :2007/12/09(日) 00:40:23
@と¥がいらなそう
.txt\"";
すいません質問があります。 あるクラスAを継承したクラスBがあるとして、 クラスBのインスタンスからはAのpublicメンバを使用できないようにすることは出来るでしょうか? 例えばFormクラスを継承したMyFormクラスを作ったが、Myformインスタンスでは勝手にクライアントサイズなどを変えてほしくない、などです。
できません
>>528 出来そうと思いましたが、そうでしたか。ありがとうございました。
530 :
480 :2007/12/09(日) 02:56:59
>>484 >>485 レス有難うございます。
IntPtrってなんぞ、、、ってところから始まって、DllImportを初めて使ってみるまでに一日かかりました。ウヒー。
とりあえず日付は更新できるようになったものの、本当にこの書き方でよいのか激しく不安です。
添削していただけると有難いです。
[DllImport("coredll.dll")]
private static extern IntPtr CreateFile(String lpFileName, UInt32 dwDesiredAccess, UInt32 dwShareMode, IntPtr lpSecurityAttributes,
UInt32 dwCreationDisposition, UInt32 dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("coredll.dll")]
private static extern bool CloseHandle(IntPtr hObject);
[DllImport("coredll.dll")]
private static extern bool GetFileTime(IntPtr handle, ref FILETIME lpCreationTime, ref FILETIME lpLastAccessTime, ref FILETIME lpLastWriteTime);
[DllImport("coredll.dll")]
unsafe private static extern bool SetFileTime(IntPtr handle, FILETIME *lpCreationTime, FILETIME *lpLastAccessTime, FILETIME *lpLastWriteTime);
public struct FILETIME{
public UInt32 dwLowDateTime;
public UInt32 dwHighDateTime;
}
public struct FileTimes{
public FILETIME CreationTime;
public FILETIME LastAccessTime;
public FILETIME LastWriteTime;
}
unsafe static public bool SetFileTimeStamps(string path, FileTimes fileTimes){
IntPtr handle = CreateFile(path, 0x80000000, 0x00000001, IntPtr.Zero, 3, 0x00000080, IntPtr.Zero);
bool re = SetFileTime(handle, &fileTimes.CreationTime, &fileTimes.LastAccessTime, &fileTimes.LastWriteTime);
CloseHandle(handle);
return re;
}
>>529 フォームの中の使うメンバだけを公開したクラスを作ってフォームにかぶせる
>>527 newで書き換えちゃえば呼んでも変更されないってのは出来るけど・・・お勧めはしない
public partial class Form1 : ExForm {
public Form1() {
InitializeComponent();
this.Size = new Size(500, 500);
}
}
public class ExForm : Form {
public new Size Size {
set { }
get { return base.Size; }
}
}
例外投げればいんじゃね。
534 :
485 :2007/12/09(日) 05:07:01
>>530 API周りはMSDNと見比べたけど型の設定とかは間違ってないね。
ちょっと思ったのは、FILETIMEとFileTimesの実装かな。
両方publicで外出ししてるけど、クラス内に隠蔽して、メソッドの引数は
DateTime型で貰って内部で変換した方が呼び出し元から使うのは楽な
んではないかなと。
まぁ呼び出し側で日時をどういう形式で扱ってるかによるから好きな方
法で良いとは思うけど。
535 :
480 :2007/12/09(日) 05:46:26
>>534 なるほど、確かにFILETIMEは毎回ビットシフトしてlong型に直す処理を外でしていたので
DateTime型で受けて内部で処理させた方がスッキリしますね。
有難うございます。
DllImportを覚えると、一気に出来ることが増えて、まさに世界が広がった感じがします。
楽しくなってきました(´∀`)
536 :
デフォルトの名無しさん :2007/12/09(日) 11:04:24
Wsdl.exeで登録したXMLWebサービスを削除するにはどうしたら良いの?
Regexクラスで質問です。 あるファイルに変換前と変換後のデータが格納してあり、 文字列をその内容に従って変換したいのですが、\r\nの扱いがうまくいきません。 Regex rex = new Regex(strBefore); strData = rex.Replace(strData, strAfter ); aaabbb → aaa\r\nbbb (strBefore) (strAfter) としたい場合、CRLFではなく、文字列として"\r\n"に変換されてしまいます。 エスケープシーケンスのオプションみたいなのがあるのでしょうか?
ファイルから読み込むときに@"\r\n"を"\r\n"に変換しろ
>>538 ありがとうございます。
うまく行きました。
ツールチップの描画に使用されるフォント(デスクトップのプロパティのデザイン→詳細設定→ヒントで設定される奴です)を取得したいのですが、何か方法はないでしょうか。
抽象クラスで、フィールドとコンストラクタを継承することはできないんでしょうか?
意味が分からない 無理に抽象的に書かなくていいから具体的にどうしたいのか書いて
abstract class A { (略) } class B : A { (略) } class C : A { (略) } ↑でクラスBとクラスCで同じようなフィールドを使って、さらにそれを同じ値で初期化するとき クラスAのフィールドとコンストラクタが継承できたら楽だと思うんですが、できないんでしょうか?
ベースクラスのフィールドにアクセスしたり、ベースクラスのコンストラクタを明示的に呼びたいってことか? それならできる
あるプログラムA(EXE、すでに起動して無限ループで待機中)でメソッドを提供し、 別のプログラムB(ASP)でこれを呼び出したいのですが、何かうまい仕組みが提供されてたりしますか? プロセス間通信を自前で実装するくらいしか思いつかないのですが…。
それ具象やん
フィールドのアクセス修飾子をprivateではなくprotectedにすれば、派生クラスからもアクセスできるようになる。 ベースクラスのコンストラクタを呼びたければ派生クラスのコンストラクタを public B() : base() { } のように書けばいい
>>545 すいません、同じ違いでした。
型名やフィールド名が"同じという意味です。
B.x
B.y
C.x
C.y
これらを一つ一つ宣言するより、親クラスから継承して
例えば全てに0等を入れて初期化する場合、コンストラクタも一緒に継承できると便利だと思うんですが……
>>549 A.xとB.xは同じフィールドじゃなくて、たまたま名前が同じだけってこと?
protected void init(ref int x, ref int y);
みたいなの定義しといて、各コンストラクタから呼び出すとか
553 :
552 :2007/12/09(日) 22:26:08
定義しといて→Aに定義しといて
多分
>>544 は
>>552 みたいに複雑なことをやろうとしてるんじゃなくて、
継承とインスタンスがどのように挙動するかわかってないだけだと思うのだが・・・
protectedの意味が分かれば終了だろ
と、いうわけでアクセス修飾子の話でも。 public 何処からでもアクセス可能(アクセスレベルが低いと表現) ↑ protected 派生クラスはアクセス可能 ↓ private 自分しか無理。(アクセスレベルが高い) クラスAにposX、posY、graphic、というフィールドがあれば、 クラスAを継承したクラスBも、そのフィールドを持つ。 それらのフィールドのアクセスレベルをprotectedにしておけば、派生クラスでもフィールドに自由に代入・取り出しできる。 もしprivateだと、それぞれフィールドは存在するのに一切派生クラスからはアクセスできない、ということになる。 この場合はプロパティを基本クラスで作っておけばすれば解決できる。(というかgetとsetのアクセスレベルを分けるから大抵はこっち?かな)
フィールドをprotectedにしちゃうのはお勧めできない 初期化はたいてい基底クラスのコンストラクタを呼べば済む
558 :
デフォルトの名無しさん :2007/12/10(月) 00:07:18
継承なんてすんなよ。
てか、フィールドをprotectedにするのは禁止じゃなかったか。 プロパティなら良い。
誰が?
オレオレ
とある機器からUDPでHTTP1.1なデータを送ってくるのですが 受信と解析するようなクラスはありますか?
563 :
↑ :2007/12/10(月) 11:28:01
受信だけはUdpClientでできるんですけど
WebClient
例外が起こる前にifで避けるのと、起こってからtry-catchで対応するのとどっちがいいですか? こういう時はtry-catchを使うという判断基準ってあるのでしょうか?
モノによるけど私はifで避けれることはifで避けるようにしてる。 try-catchでしか回避できない仕様なら仕方なしに使う感じ
例外をキャッチするとわけわかんなくなるから ifで出来るものはifでやった方がいいよな ArgumentExceptionとか例外が投げられること自体がバグの証明であるようなのは どんどん投げるべき そしてキャッチさせないべき そのためにtryで囲ませないべき tryで囲ませると往々にしてバグまで握りつぶしてしまう
569 :
566 :2007/12/10(月) 15:57:42
事前に避けられそうな奴は避けるべきなんですね。 早速コード直してみます。 ありがとうございました。
570 :
デフォルトの名無しさん :2007/12/10(月) 16:12:28
教えてください。 WebBrowserコントロールで、 Internet Explorer の [ファイル] メニューの [名前を付けて保存] メニュー オプションのような 機能を実装しようとしているのですが、 以下のようなコードですとエラーがでます。 どうすればいいんでしょう。。。 AxWebBrowser3.ExecWB( ShDocVw.OLECMDID_SAVEAS, ShDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT);ですと 'ShDocVw' は現在のコンテキスト内に存在しません。 とエラーがでてしまったのですが。。。
using ShDocVw;
OLECMDID.OLECMDID_SAVEAS
573 :
デフォルトの名無しさん :2007/12/10(月) 18:29:19
using ShDocVw;を追加したのですが以下のエラーが出ました。 型または名前空間名 'ShDocVw' が見つかりませんでした。 using ディレクティブまたはアセンブリ参照が不足しています。
コントロールを削除してもソースにイベントハンドラが残るんですけど手動で削除するしかないんですか?
勝手に消えても困るだろ?
ほかから参照されていないとかの条件なら消すかどうかの選択肢はあってもいいかもね
>>573 shdocvw.dll参照にいれたんじゃなくてWebBrowserコントロールか。
ShowSaveAsDialog ってメソッドがあるでしょ。
578 :
デフォルトの名無しさん :2007/12/10(月) 21:18:12
ShowSaveAsDialog();は、AxWebBrowserにはないみたいです。 shdocvw.dllは、参照にいれる必要ないんですか?
どっちかの質問取り下げろやハゲ
WebBrowserコントロールと書いておきながらaxWebBrowserなのか?
>>566 おれはめちゃくちゃcatchしまくってるよ。
おかげでエラーチェックのifが少なくなって、ロジックが超すっきり。
ifやめてcatchにする方が どう繋がってるのか分かりにくい
catchの方がコスト高いでしょ?
たとえば、CSVを読み込んで、DBに入れるコードを書くとして、 TryPerse() でなくて、Prese()で、intに変換。 FormatExceptionが飛んだら、このCSVは不正ですって言って、処理終了。 これでなんにも問題ありません。
まあ終了する時は例外ほど便利なものはない
趣味グラマか
エラーコードはまだいいけど null返してきたりスルーしやがるメソッドはうざい
nullを返すのとbool TryHoge(out result)と例外返すのとどれがいい
s@;w@mee;@s4ezdwh;
例外
TryParseよりParseがいいってか
メソッドが不可避な例外を投げる場合、キャッチしなければバグになるわけだ そしてそれがバグであるかどうかはドキュメントをよく読まないと分からない TryHogeならばifで囲まれていない時点でバグであることが見た瞬間に分かる どっちがいいかは分かりきっている
というか、これは自分の想像だから間違ってたらただして欲しいんだけど、 昔のCの、intでエラーコードを返すタイプの関数から、 今の、voidでエラーが起きたときは例外を投げるタイプのメソッドに推移というか、 後者が主になったのは、なんらかの理由があるからじゃないの? TryParseとかはその流れに逆行してるように感じたんだけど…
そりゃ、TryParseのほうがタイプ量少なくて済むからな。軽いし。 ただし、boolを返すTryXxxを作るときは、例外を投げるXxxも用意することになってる。
例外には2種類あって、ArgumentExceptionのように投げられること自体が呼び出し側の ミスによるものであり、除去すべきバグであることが明らかなものと、 ネットワークのサーバがダウンしている、ファイルが存在しないといった 正しい呼び出し方をしたとしても起こりうるエラーがある 大半は前者だ。バグだから直さなきゃいけないというのを通知するのには例外は適している 失敗の可能性が不可避なメソッドならば、例外を用いずによりわかりやすいTry〜のような 形を用いるべきだ Tryの形式なら一目でバグと分かるのに、わざわざ例外を使って バグと分かりにくいコードを書かせる必要なんか皆無だ どちらにもいえることだが、例外はキャッチするものでは無い
要するにポリシーとしては、使い方に因らないエラーが発生する場合は例外を投げ、 使い方に因ってエラーが発生する場合は戻り値で返せということですかね?
正しい呼び出しをしてない場合は例外を投げ 正しい呼び出しをしてもエラーが不可避である場合はboolかなんかを返せということを俺はいいたい
君C#向いてないよ
Try形式だと基本bool値しか返ってこないけど
エラーに関してもっと詳しい情報を渡したい時には
>>596 のスタンス的にはどういう方法をとるの?
戻り値?引数?
>>601 outでエラーの詳しい情報をobjectにして戻すのがいいと思っているが
それこそ例外をoutで返したらいい
.NetFrameworkでそういった作りになってる物があるかな。
投げずに渡す、か 正直それは考えた事なかったな
.NET FrameworkにはTryParseのような一部のものしかそういう設計をとっていない それは誤りだが今さら変えられない .NET Frameworkで例外を返すのが使い物になるのはそれが共通であり プログラマなら大抵そのクラスの動作を知っているからだ 自作のクラスでそれをやるのは死亡フラグそのものだ
日本語でおk
文字列をint型にキャストするには int.Parse(hogehoge) 等の方法でやっていますが、 変換する型そのものを文字列等で指定する方法がありますでしょうか?
結局Win32のカオス具合をなぞってるだけだな
>>608 それはキャストじゃなくて型変換(Convert)だろ。
TypeConverter/TypeDescriptor でも使えば?
>>606 TryParseは2.0になって利便性のために新たに付け加えられたのであって、
決して「誤り」ではないよ。
outで返すとC#でしか使えないことないか? パラノイア的に統一性に拘らないのであれば(というのは、これに病的に固執する奴っているからね) 値を返さないメソッドに関してだけ例外を返すようにする(返値が必要なのは普通に例外投げる) というやり方の方が俺は好きだな。
613 :
611 :2007/12/11(火) 12:28:47
>>612 outが嫌なら戻り値用の構造体を作ったっていい
>>613 パフォーマンス上の理由なんてのは的外れだ
その例外がめったに起こらなければ起こらないほど
例外のキャッチし忘れは深刻なバグになる
起こるか起こらないか分からないようなエラーが起こるものが
通常のメソッドと見た目全く同じに用意されていて
エラーにそなえてtryで囲めというのは間違い探しをしろといっているようなものだ
単に無駄だ
バグであることが分かりやすくなるように設計するべきだ
平日の昼間っから暇なんだなあ
なんでここは3行にまとめられない奴ばっかりなんだろ
例外のキャッチし忘れはむしろ深刻にはならない。
めったにないことだけどある環境では100回に1回ぐらい例外が投げられることがある catchしてないのにテストをすり抜けてパッケージソフトとして出荷されてしまった どうなる?
例外は絶対投げちゃダメ!とかTryParseは誤り!とか言う事が極端だな 共有すべき普遍的な知識と自分だけの信念は区別しないと
そんな事言ってる人居たっけ
>>619 TryParseは正しい
正しく呼び出してもエラーが起こりうる場合例外は投げるべきじゃない
とは言った
ちなみにTry〜を使うべきだと俺が考えるものには メソッドが成功するかどうかが自分のプログラムの状態以外の要因で決まるもの(ハードディスクとかNetworkとか)と それが正しい呼び出しであるかをテストする機能も正しい使い方のうちに含むもの(TryParse)と二通りある
ここふらっとスレなんだけど。
だからだろ
>>618 キャッチし忘れのバグの方がキャッチもしくは例外をかわした場合のバグより
深刻にはならないって言ってるだけだよ。
ある環境では100回に一回発生する例外を 常にちゃんと認識しててきっちり対処出来るんなら別だけどな。 あくまでバグがあった場合の話で、 バグがないならその方がいいに決まってる。
>>626 しかしある種の例外は確率は低いけど不可避なわけだ
>>622 の前者のようなのはそうだ
>>625 間違ってるのにエラーを返さない、例外を投げない
それはただのバグだが防ぐのは難しい
しかし例外のキャッチし忘れは簡単に防げる
防げるものは防いだほうがいいし、それが深刻になる場合だってある
今時戻り値だの構造体だのでエラー情報ずらずら返されたら どうしようかと思うよ。
じゃあメソッドの頭にTryとつけるだけでもいい エラーが不可避ならばそれを分かりやすく示すべきだ tryで囲んでないのが一目でバグと分かるように
しかし例外の型は何が飛んでくるかわからないからな バージョンアップで新しい例外が投げられるようになってキャッチできない可能性もあるし outなり構造体なりで返ってくれば不可避な例外の基本クラスは分かるから それを投げれば、バグによる例外を含まずにキャッチできる とにかくcatch{}やcatch(Exception)だけはやってはいけないんだ
catch(Exception ex) { ログ保存(ex); throw ex; } は時々やる。
だからね、例外が深刻な状況につながることはあまりなくて、 むしろキャッチした上でのバグが深刻な状況につながるんだといってる
深刻って何だろう
>>633 それやるとデバッガが例外が起きた瞬間でブレイクしてくれないだろ
例外のメッセージの何十倍もその瞬間のブレイクの方が有用だし
ケースバイケース
>>634 何が言いたいのかよく分からん
それでどうするべきだと言ってるんだ?
デバッガの使い方をまず身につけろよ。 最終的にはまず大抵どっかでキャッチするんだから キャッチしたらアウトなんてのは使い物なならんだろ。 ただ、あえてやってるんじゃないなら throw e; はやめとけ。 throw; でいい。
とにかくキャッチすべき、キャッチしないバグは深刻 っていってるみたいだから、 キャッチするバグの方が大抵深刻だよっていってるだけ。
ああちょっとちがうか… キャッチしないバグは、深刻度は比較的低いってこと。
何が起きてるか分からない、例外が飛んでこないバグに比べたらね。
誰か例外関係のガイドライン書いてちょうだい
>>639 大抵どっかでキャッチする時点でデバッガの使い方を間違えている
少なくとも開発中はバグによる例外はキャッチすべきではない
ブレイクすべきだ
キャッチするのはバグを握りつぶす効果しかない
バグでない不可避な例外の場合はキャッチして処理しなきゃならない
その場合でも不可避な例外の基本クラスを設けるとか、必要な処理はやらなきゃならない
漫然と例外を使うとひどいことになる
特にどっかでキャッチされるなんてのは最低の使い方だ
>>640 全然違う
俺はキャッチすべきでないといってる
確率的に低い不可避の例外をキャッチしないことは深刻なバグに繋がる
なら最初からboolを返すなりメソッドシグネチャに書いておくべきだ
正直、言ってる事よくわかりませんけど。。。
>>596 をまず読んでくれ
いろいろ誤解されてるような気がするが
俺はこれを繰り返し言っているだけだ
いややっぱりよう分からんぞw 前半は当たり前杉。 後半は何言ってるか意味不明。 特に、 >どちらにもいえることだが、例外はキャッチするものでは無い なんだよこれw
お前の例外をキャッチして腹ン中がパンパンだぜ
>>647 どれが分からないんだ?
正しく呼び出したとしても例外を投げることが不可避であり、必ず対応しなければ破綻する
メソッドが、通常のメソッドと見た目が何も変わらなければ、キャッチし忘れることがありうる
一つ一つのメソッドについて例外が不可避かどうか調べるのは時間の無駄なので、
そういうメソッドは見た瞬間にそれと分かるようにするべきだといっている
具体的にはTry〜にしてboolを返すようにするとか、単に命名規則に含めるとかだ
不可避の例外ってのがようわからん。 挙げられてるケースだとただ単にエラーチェックしてないだけだが。
不可避の例外については
>>622 に書いたが何かおかしいか?
>>649 あのーお言葉ですけどねえ、
外的な、つまり呼び出し側以外の理由で例外が起こるような処理っていうのはむしろ
文字通り「例外的」なわけで、そういうのは(むろん上手に抽象化ができてさえすれば、
という前提条件つきではあるが・・・)むしろメソッドの意味を見れば
例外が起こりうるかどうかは一目瞭然なんじゃないの?
例えばディスクにアクセスするメソッドならディスクが物理的にお陀仏になったれ例外投げるしかないことは
猿でも分かるでしょw
653 :
652 :2007/12/11(火) 19:47:00
あ、でもドトネトのファイルストリームはそういう実装になってないんだっけかw あれって書き込み中のUSBドライブ抜いても何の例外も投げないのなw
>>652 そうはいってもプログラムは適当に書かれることがあり
try,catchは往々にして忘れられる
さらにいえば、どのメソッドがどんな例外を投げるかきちんと把握しているのか
どの例外が不可避で、どの例外がバグによるものか
キャッチしていい物としてはならないものはどう見分けるのか
不可避の例外の基本クラスを作り、outでその例外クラスを返すようにすれば
帰ってくる不可避の例外がそのクラスを継承したものであることが保障される
バグであればそれ以外のクラスから派生した例外が飛んでくることになる
バグの例外はキャッチすべきでないから、try,catchで囲む必要すらなくなる
必要とあらばoutで返ってきた例外を飛ばし、基本クラスでcatchすることで
将来返って来る例外が増えたときにも対応できる
655 :
335 :2007/12/11(火) 20:03:11
try { Aaa(p1); } catch (HogeException e) { Console.WriteLine("{0} HogeException caught.", e); } catch { throw; } こんなふうに投げちゃいかんの? メソッドやクラス内で処理する分はcatchしてそれ以外は上に投げる 投げ先が制御できないなら共通エラー処理クラス使えばいいと思うんだけど 初めて1週間なんでハズしてたら教えて欲しいです
そろそろ隔離スレへいってくんない
>>655 デバッガはthrow;のところで止まって例外が投げられた瞬間の情報が失われるけど
それでいいなら
それを避けたければデバッグ→例外を選んで投げた瞬間にブレイクしてほしい
例外にチェックをつけてもいい
つまりSystem.IO下の関数には全てTryを付けた方が良いということだな。
そうだ全部にHRESULTを返すようにしようぜ
もう全部Debug.Failで
S_OK
>>658 確かにHDが一杯とかになったら何か処理はしなきゃならないから
ほとんどにTryがいるかもな
Tryってついてないから忘れがちだが
ま〜趣味の人は何でもいいんでないの 俺なんかの扱ってる仕事は止まるとニュースになるようなのばっかりだが
なんというマイクロソフト信者 そんなミッションクリティカルな用途にC#使うなんて、 普通の人間には命がいくつあっても出来ない。
>>656 諦めな
もし隔離スレを埋めたいのであればそっちにネタ投下すればいい
>>663 どうせCOBOLでやるような糞仕事をリプレースしただけだろ
規模の大きいところほど、技術的には保守的だったりだすからね。
捨て台詞を吐いて背を向けた犬をいつまでもいたぶるな。
C#で学んだことって他の.NET言語でも役に立ちますか?
はい
たつ
わかりました。
C#できればVB.NETは一日触れば使える
必要だから例外なんて物ができたんじゃないのか? それを使うなって┐(´д`)┌
>>675 バグを通知するためにはものすごく必要だ
エラーで分岐するにはそのままでは不適切な仕組みだ
適切に使わないといけない
リストビューのColumnWidthChangingイベントが拾えません!!
678 :
デフォルトの名無しさん :2007/12/12(水) 00:27:11
VC#2008betaでアプリを作るとき、WindowsフォームアプリとWPFアプリが選択できるけど、 今から始めるなら当然WPFアプリが良いんだよね?
ご自由に
680 :
デフォルトの名無しさん :2007/12/12(水) 00:36:29
例外ってのはコンピュータの内部ではどんな状態になってるの?
他の場所でチェック済みのオブジェクトを渡したりする以外では必ずtry-catch使ってる。 例外で処理分岐する場合もあれば、戻り値でも処理分岐する場合あるし臨機応変
682 :
デフォルトの名無しさん :2007/12/12(水) 00:51:15
>>680 例外ハンドラが見つかるまで積まれたスタックフレームをすっとばす。
683 :
デフォルトの名無しさん :2007/12/12(水) 00:53:32
皆細かくやってんだね。 俺なんか自分で作ったクラスは try catchでcatchしたらthrowだよ。 でaspx.csで例外を受け取ったらRedirectでエラーページに遷移させる。 社内システムなんでそんなもんだぜ。
>>681 それは臨機応変じゃなくて規約がなくその都度注意力をもって判断せねばならず
バグかどうかがドキュメントを参照しないと分からないということだろう
最悪の方法だ
開発完了したシステムなら例外を一番上で全キャッチして 必要なエラーメッセージを出すようにすればいいさ しかし開発中はバグの例外はキャッチしちゃいかんのだ
>>674 VB.NET使う必要も技術的利益も無いんだがな・・・
なんでVB.NET選ぶかね・・・
デバッガ慣れすると必要なログすら入れない奴が出てくる。 エラーメッセージ無視して「デバッガで追おうとしたけど再現しません」とかいう奴すら・・・
なんせ例外が起こった瞬間のブレイクほど便利なものはないからな エラーメッセージなんて例外で適切にブレイクできてりゃ最小限でいいんだ
開発中にcatch無しってのは当たり前の話で、 エラーかどうかは殆どの場合ドキュメント見るんじゃないの?
出来ることは違いないので、VB使うってのはその人の選択肢だね。文法の慣れとか。
呼び出し側のミスでない例外ならばこの基本クラスを継承した例外を投げます と決めておけば、それをキャッチしておけばいい 例外がキャッチできずすり抜けていったら呼び出し側のミスだ 向こう側が間違ってるのかもしれないがその時はドキュメントをよく読んで質問するしかない
割り込みますがループ中の処理などの場合はどうなるのですか 例外だと中断されるのですよね?こんな場合は戻り血とかで判断するのですか
>>655 そういえば正しい方法を言ってなかった気がする
catch
{
throw;
}
これはいらないからなくすべき
例外が投げられた瞬間の情報が失われるから
例外って「これ以上処理を続けられるとマズイ」っていうときに投げるもんじゃないの?
俺も読んでくる
もうオイラはスローして寝ます
throw spoon;
投げたらアカン
>他の場所でチェック済みのオブジェクトを渡したりする以外では必ずtry-catch使ってる。 必ずってどのレベルで必ずなの? メソッド呼び出し全部? catchしてその場でどうにかできるのなんて一部な気がするんだが。 まあラップして投げなおしはあるかもしれんが。 そうでなくみんな戻り値とかでエラー返して上位に通知してるなら それこそ単純に例外ですむ話し出しってか上位への通知を細かに書かなくてすむ ってのが例外のメリットのひとつだと思うんだが、 多分そういうことではないんだよね?
業務アプリなんかだと、業務実装者にはほとんど例外処理なんて書かせないしな。 その場で処理してしまうような例外は別だけど。
業務アプリやパッケージで実行時エラーが出るのはやばいよな? なのでcatchしてログ&メッセージ出して問い合わせ促してるけど catchしないって人はリリース後に実行時エラー発生したらどうやって対応すんの?
データの喪失も破壊も甘んじて受け入れる
アプリケーションの一番高いレベル、つまりMainに近いあたりでキャッチして ログやメッセージ出してアプリを中断が常套。MSのガイドラインでもこうなってるな。
.NETのクラスライブラリの出す例外の扱いの話と、 その上に構築するアプリケーションにおける例外のデザインの話は 分けて考えないと論点がはっきりしない気がするな。
ProfessionalColors.ImageMarginRevealedGradientBegin と ProfessionalColors.ImageMarginGradientBegin の違いって何ですか? ImageMarginRevealedGradientBeginは、どういう場合に使われますか?
すり抜けも何も、ハンドルしてない〜Exceptionが発生したら.、NET側でダイアログ出して勝手に止めるだろ。
>>693 そういうのはヒトに向かって書いている場合もあるんでしょ。
「俺様はちゃんとここで例外が起こりうることを認識してコードかいてるよ」
って明示するために。
必ずしも処理上必要だから書いてるわけじゃないんだよ。
あ、いつも常にそうだとは言ってないから勘違いしないでね。
711 :
デフォルトの名無しさん :2007/12/12(水) 09:01:46
>>710 キャッチって多段で追跡できちゃったりするの?
できないならダメだろ。
独自の例外定義はMainでキャッチ、それをスローする例外は イベントに追加してキャッチさせるのが常識。
ここは「よくわからない日本語のサンプル」を投稿するスレじゃないよ
開発中はキャッチするなといっていた者だが 開発完了したら、一番上でキャッチしてメッセージを出して終了するようにする まあ使われないのが理想だが
>>710 問題は、デバッガがthrow;でブレークして、
例外が投げられた瞬間のブレークが失われることだ
例外が投げられた瞬間のブレークがあれば何が間違っていたか大抵全部分かる
それを捨てる理由になると思うか?
何行目で初回例外が発生したか調べてそこに赤丸付ければいいだろ。
>>717 その作業は無駄だし
例外が起きなくてもその行で毎回止まるぞ
BitmapImage image1 = new BitmapImage(); BitmapImage image2 = new BitmapImage(); ... ... ... . って一つずつ書くのが面倒なんですが、まとめて書ける方法ってありますか?
720 :
デフォルトの名無しさん :2007/12/12(水) 15:44:55
結局したほうがいいの?しないほうがいいの?
>>721 自分で考えられないやつは2chなんか使うな
catch{}のなかで正常に戻せた場合にそのまま進むにはどうすればいいの?
そのまま進むとは?
通常進行で
そのまま進め
例外を投げたメソッドの実行を続けるということ? 続行できないから例外投げてるのに戻してどうすんの だいたいなんで正常に戻せたってわかるの? クラスやメソッドの実装によるだろそんなの
catchの中で正常に戻せる意味が分からない それはもともと例外を投げるべきではなかったんじゃないか
っ ソフトを再起動してもらう
復活の呪文
ぴぴる ぴる ぴ(ry
try { ケーブルが抜けていたとか ディスクの入れ忘れとか 電源入れ忘れとか } catch { えらー表示した 対処された } そんな感じの場合なんだけど
じゃあそのまま進めばいいだろ とりあえずキャッチしておけば実行停止することはないんだからあとは君の判断で
while (true) { try { 例外の起きる処理; break; // 完了 } catch ( .. ) { if ( ! Retry ) break; } }
例外は有害だから使うべきではない。
while(true) { try { やってみる(); break; } catch(デバイス見つからないException) { if(ShowDialog("デバイス見つからないよ") == Result.Cancel)) throw new CancelException("実行はキャンセルされました"); } catch(ディスク入ってないException) { if(ShowDialog("ディスク入ってないよ") == Result.Candel)) throw new CancelException("実行はキャンセルされました"); } }
try { ケーブルが抜けていたとか ディスクの入れ忘れとか 電源入れ忘れとか } catch { ケーブルを挿すとか ディスクを入れるとか 電源を入れるとか }
リトライとかはcatch内じゃなくてもっと上の仕事じゃないか?
その場で出来るものはその場でやらないとわけわからなくなると思うが
>>740 リトライが必要な処理群としてまとめておいて呼び出し側で再呼び出しした方がイクナイ?
つまりTryGetValueか
GetLastError() 有り得ない値返し エラーコード返し BOOL返し HRESULT返し C++の例外 .netの例外 構造化例外 が入り乱れるVCよりましじゃないか。
再利用してソースが分かりやすくなるならいいんだけどな 分岐では分かりにくくなることが往々にしてある
t6rs4:s.td@84s4:s.tfvsc;c@;d@'uetu
VBのソースで悪いけど。 dim reader as IDbReader = command.ExecReader() while reader.Read() aa = DirectCast(reader("aa"), string) bb = DirectCast(reader("bb"), Integer) : : End While DBから読み込むコードで、ISAMライクなウンコなテーブル設計で、whileの中のコードが数十行続いてるとします。 項目はNOT NULL制約が設定されてないから、reader("・・") で DBNull が帰って来ることもあります。 こういうときは、一行ずつifでDBNullか判定しますか? それとも、try でくくって、一括してcatchしますか?
まず public static T Get<T>(this IDbReader reader, string name) { object item = reader(name); if(item == DBNull) throw new DBNullException(name + "がDBNullです"); return (T)item; } こんなんを作って、DBNullExceptionだけキャッチすればいいんじゃねえの 何がしたいのかよくわからんけど
>>748 object型をstringやらintegerにキャストするとき、DBNullだったら、例外がでるので、
そういうのはなくても大丈夫です。
if reader("・・") <> DBNull.Value then
aa = DirectCast(reader("・・"),・・・)
else
なんかエラー処理
end if
みたいに一行ずつ判定するか、
try
aa = DirectCast(reader("・・"),・・・)
bb = DirectCast(reader("・・"),・・・)
:
catch ex as キャストの例外
:
End Try
みたいにまとめてキャッチするかってことです。
>>749 InvalidCastExceptionをそのまま捕まえるのはいただけない
catchするのはバグによる例外でないことが明らかなものにするべきだ
エラー処理に何をするのか、DBNullが帰ってくる頻度がどのくらいで
例外がパフォーマンスに影響するのかによって変わってくる
>>750 たしかに、NULLが入ってるデータが多いと使い物にならないくらい遅くなりますね。
それでは、基本的にNULLは入ってないデータだけど、NOT NULL制約がないので「NULLもありえる」という
程度で。
例外は
>>748 みたいなラッパーで、独自のものを投げるという状況で。
ifでチェックしたほうがいいか、まとめて例外で処理したほうがいいか。
お前ら例外が好きだな
public static bool SetMember(this IDbReader reader, string name, Action<object> setMember) { object item = reader(name); if(item == DBNull.Value) return false; setMember(item); return true; } Func<bool>[] setMembers = new Func<bool>[]{ () => reader.SetMember("aa", obj => aa = (string)obj), () => reader.SetMember("bb", obj => bb = (int)obj), ... }; foreach(var setMember in setMembers) { if(setMember() == false){ エラー処理 } } 例外がパフォーマンスを脅かすならこうかな
横から失礼 例外投げるとパフォーマンスを脅かすってのはなんで? 例外クラスのインスタンスを生成するから? それとも別のもっと大きな要因があるのかな
URIを返す関数で、失敗した場合の理由を return new Uri("error://imifumei/"); みたいな感じで返すのはありですか?
間違った public static bool SetMember<T>(this IDbReader reader, string name, ref T member) { object item = reader(name); if(item == DBNull.Value) return false; member = (T)item; return true; } Func<bool>[] setMembers = new Func<bool>[]{ () => reader.SetMember("aa", ref aa), () => reader.SetMember("bb", ref bb), ... }; foreach(var setMember in setMembers) { if(setMember() == false){ エラー処理 } } こうでした
見たか これがC# 3.0の力だ 早く乗り換えたまえ
>>755 なしです
例外またはTry〜を使いなさい
>>759 個人的には、名前の末尾にOrNullをつけないとなしと考えている
つければあり
やっぱなしですか。
100%なしです
例外使わないって人はリリース後のバグどうするんだ? それにテスト後にmainにtry〜catch追加したらテストやり直しだろ 異常系のテストエビデンスに再現性無くなるじゃん 個人作成やパッケージ等すべて自分達で責任取れるものならいいけどさ
OrNullってどういうこと。 見たことも聞いたこともない命名規則だな。
GetValueOrNull どっちだよw
nullable
ヌーブラ
>>763 バグじゃなくて仕様の中に処理するって書いてある例外は開発中ももちろんキャッチする
問題はそれ以外だ
それ以外が飛んできたらバグだ
これは開発完了したときには飛んでくることがないのが理想だけど
そうもいってられないのでcatch(Exception)で捕まえる文を開発完了後に付け加える
で、謝罪文を表示して終了すればいい
これをテストする必要は別にない
うわー首が飛ぶよ
LINQでは First FirstOrDefault といった感じでデフォルト値が返りうる場合はOrDefaultをつける OrNullって書いてなきゃ絶対にnulのチェックを忘れるから俺はOrNullと書くべきだと考えている
>>768 多分噛み合ってないんだけど
納品先のあるプログラムでテスト後にソース改変は一切NGだろ?
バイナリのタイムスタンプとCRCが一致しないテスト結果でもOKってなら
何も言えないな
>>771 じゃあ付け加えなきゃいい
万一の場合に備えて例外のメッセージを丁寧語にすることを心がけなきゃならんが
ちゃんと出来てるならほんとはcatch(Exception)なんていらん
エラーかもね。 たぶんお前らのミスな。 [OK]
>>772 >ちゃんと出来てるならほんとはcatch(Exception)なんていらん
これはマじゃない予感・・・
>>772 また噛み合ってないが、バグ0にはできない。現実的に。
だから「ちゃんとできている」って言うのは実現困難
当然メソッド単位にtry〜catch入れた上での単体テストを通してるし
mainにも付け加えないんじゃ無くて最初から入れてる
たとえプログラムが原因じゃなくてもトラップできる例外はすべて
プログラムの管理しているエラー処理+ログで処理する
それを元に障害対応しないと対応できない
リリース後に 「プログラムのせいかどうかわからんがエラー終了する」
なんて状況になったら誰が対応するの?
自分達のプログラムが原因じゃない証明をする際にも証拠は必要だし
チャンネル争いしてる時にyozuca出てきたけどあんなに可愛いのか 今度イベントあったら絶対見に行くわ
>>775 出来ました、テストしてください、という段階でmainにcatch(Exception)を付け加える
それじゃダメなのか?
走行距離100kmか。 普通試乗で自分向きじゃないとか気づくだろ。
前から見たらZじゃんw
想定される例外は全て処理せよ的な規約を掲げた開発が うまく行ってるのを見たことがない。 現実の開発要員は思いのほかレベルが低いもんだよ。 保守や改造でもどんどん壊れて行くしね。 十分な費用がかけられる開発ならいいんだけどね〜
ちゃんとキャッチする例外としない例外を分けなきゃダメだっての 全て処理せよってのはどういうこっちゃ
それをどうやってはっきり定義するの?
正しく呼び出さなかったときの例外→キャッチするべきではない 正しく呼び出したとしても起こる例外→キャッチしなければならない
↓の文字列が正しいHTTPの応答かチェックして
http://192.168.0.1:2869/gatedesc.xml の部分だけ抜き出すにはどうすればいいですか?
HTTP/1.1 200 OK\r\n
CACHE-CONTROL: max-age=1800\r\n
DATE: Wed, 12 Dec 2007 13:51:16 GMT\r\n
EXT:\r\n
LOCATION:
http://192.168.0.1:2869/gatedesc.xml\r\n SERVER: Linux/2.4.18_mvl30-ixdp425 UPnP/1.0 Intel UPnP SDK/1.0\r\n
ST: urn:schemas-upnp-org:service:WANIPConnection:1\r\n
USN: uuid:UUID-NTTEW-DUMMY::urn:schemas-upnp-org:service:WANIPConnection:1\r\n
\r\n
例えば指定されたファイルを読む処理があるとき、 有るはずのファイルが読めなければ キャッチする必要があるのだろうが、 渡された引数がそもそも間違ってた場合は キャッチしちゃダメだってことだなw
ArgumentExceptionとかInvalidOperationExceptionとか キャスト失敗とか配列の外側を読んだとかぬるぽとか そういうのは全部キャッチしちゃダメ
そうなるとその判断は引数が決まる元になる位置まで さかのぼらざるを得ないが、そんなのを全体で完全に 矛盾なく出来るとは思えない。 一体誰がそれを決めるの? せれともそんなのは関係なく、 例えばArgumentExeption系以外はキャッチするとかになるの?
引数が悪いのか環境的な本当の例外かなんて 結局分からんてことだろ?
メソッドの正しい呼び出し方はメソッド作成者が決める 違反してたら例外が投げられる それはキャッチしちゃいけない 正しい呼び出しの時に失敗したならばそれとは違う例外が投げられる それはキャッチしなきゃならん
意図的にnull渡したのか、 γ線でメモリが化けたのか分からない。
null渡していいとこは引数名にOrNullってつけてくれ じゃないとわからん
キャッチしてどう処理するのかもよく分からない。 結局回復できない場合も多いから、戻り値とかで返さざるを得ないの? UI層レベルでは想定されるものはキャッチするだろうけど もっと下層ではいかんともしがたい気がする。
コントロールのプロパティってフォームデザイナで編集したり コード中で直接設定したりする方法があるのですがどういう風に使い分ければいいんですか?
それがバグじゃなくて想定内のものなら キャッチしてエラーメッセージを出して入力待ちに戻れ
OrNullつけても結局仕様確認はいるんだから ドキュメントコメントでいい気もする。 あ、レビューはやりにくいかな…
>>796 んなこと出来るのはUI層ぐらいだろう。
もっと下層ではどうすんの?
>>797 null入れていいかどうか、nullが返るかどうかなんて一回見たってどうせ忘れる
OrNullって書いてあればソース見ただけでnullチェックして無いのが一発でバグって分かる
下層じゃ呼ぶ側の問題なのか本当の例外事象なのかなんて分からないんだぜ?
>>795 特に理由がなければデザイナを使う
動的(例:ボタンを押したら〜する)にコントロールを作ったり、プロパティを変更したいときはコードで
>>798 自分のメソッドの仕様に書いてある通りの例外に編み変えて再スローする
あえ?呼ばれる側でのnullチェックの話か?
>>803 呼ばれる側もそうだし呼ぶ側もそうだ
OrNullって書くようにしてからnullチェックし忘れは消えた
>>802 まあそうなるんだけど
言いたかったのはそんだけちゃんとやっても呼び出し側のバグに対しては効果ないよねってこと。
nullチェックし忘れって nullチェックはどっちの場合でも要るんじゃ…
>>801 なるほど、初期設定はデザイナでして実行中の変更はコードでするみたいな感じですね。
>>805 呼び出し側の引数かなんかの違反なら
呼び出し側の違反ですよってわかる例外を投げる
正しく呼び出したときの例外ならそれと分かる例外を投げる
さらに下のメソッドから飛んでくる例外がそこをきちんと分けていれば
自分も判断できる
結局、呼び出し側の要因であっても何であっても エラー発生時の対処は必要なんだから全て例外処理が 必要ってことおk?
非null引数なら入ってくるときにnullをはじけばいいのだが nullを受け入れて変数に入れた場合は、その変数を使うたびにnullチェックが要る 変数名にOrNullって書いてあればチェックし忘れはなくなる
そもそも引数でnull渡すケースってあるの?
>>809 呼び出し側の要因である場合必要な処置というのは
バグを認識させ直させることだ
キャッチしなければそれが最もよく果たせる
例外が投げられた瞬間でデバッガがブレイクし何が間違っていたかが分かる
>>813 マウスポインタおいたら変数の値がぱっとわかり
呼び出し履歴をずずっと辿っていくこともできるようなトレースならな
>>786 MatchCollection mc = Regex.Matches(hoge.ToLower(), @"(http/1.[0-1] 200)|(https?://.*\.xml)");
if (mc.Count < 2)
{
// 異常
}
バグ対処には例外処理せず.NETの例外画面で・・・なんて人は趣味グラマーなんだよ そんな画面出しても済ませられる程度のAPなんだ
>>808 それが呼ばれる側では判断できないって話じゃないのか?
>>816 多分、昨日からずっとそのこと言ってる人いますね
819 :
デフォルトの名無しさん :2007/12/12(水) 23:49:45
お前ら本当に例外が好きだなw
判断できるなら分岐処理でいいので例外は不必要でしょう
821 :
デフォルトの名無しさん :2007/12/12(水) 23:50:55
俺は例外で、この話題飽きたお 早く次のネタ投下して欲しいお
すみません!リストビューの行の高さは変えられますか?
>>817 なんで判断できないんだ?
メソッドの正しい呼び出し方を決めるのは自分だぞ
ファイルが見つからない例外が発生したとき、 それがバグなのかそうでないのかなんて判断できない。
>>824 呼び出し方自体はあってるなら
FileNotFoundExceptionを投げればいい
パス文字列として正しくないならInvalidPathExceptionかなんかを投げればいい
メソッド作成者が、パス文字列として正しくない文字列を渡すのが違反だと考えるなら
ArgumentExceptionにしてもいい
もちろんパス文字列として正しいかどうかを判断する方法は別途用意しなきゃならないし
それを判断してから呼び出すのは無駄だから普通は
パス文字列として正しくないものも違反とは考えないという設計にするだろうが
呼び出し側はパス文字列として正しくないのが渡されるのがバグである場合はキャッチしなければいいし
ユーザーが入力したのをそのまま渡すとかするならキャッチしなきゃいけない
ファイルが存在しないときにArgumentExceptionを投げる関数もあるので、 ArgumentExceptionは一概に呼び出し側の要因とは言えない。 エラーチェックしろって話だが。
それってぁいるはんどるつくるときにかってにかえってこないか?
>>827 どれだよ
正しくない呼び出しと区別できないんだったらそれはただの設計ミスだ
FileSystemWatcher.Pathだ、まいったかこの野郎。 まぁファイルの存在確認もしない奴は死んだ方が良いけど。
呼び出し側が正しいけどファイルがないときと 呼び出し側が間違っててファイルがないときがあるだろ。 そんなの呼び出される側じゃ分からない。 結局同じ例外なり返さざるを得ない。
>>830 そりゃパスを入れるプロパティにパスじゃないものが入ったらArgumentExceptionだろ
そりゃ違反だ
どっちにしてもtryは全て必要ってことで
Tryは有害
>>831 そりゃそうだな
メソッドに出来るのは自分が決めたルールに違反を犯したかどうかを通知するだけだ
有名どころですら統一見解だせないものをここでぐだぐだ議論してもね。
tryはしてもいいが全てをキャッチするのは誤りだ キャッチしていいものと、しちゃいけないものがある
>>832 パスが不正かどうかはファイルが存在するしないに関係しないだろ。
こういうのはDirectoryNotFoundExceptionを返すケース。
おろ?うちのMSDNにはこうあるけど。 >指定されたパスが存在しないか、見つかりませんでした。 >または >指定したパスにワイルドカード文字が含まれています。 >または >指定したパスに無効なパス文字が含まれています。
>>841 パスが無効とNot Foundとnullとは
分けた方がいいと思うんだがなあ
まあそんなに困るケースは思いつかないが
catchしないで実行時エラー出るようなプログラムは駄目だろ
>>843 完成版には一番上にcatch(Exception)入れなきゃいかんだろうが
開発中はいれちゃいかんという話だ
想定外の例外が来たら安全に実行が続けられるかなんて分からんのだから
終了するしかない
障害系の単体テスト結果はどうするの?
例外祭り終了
>>845 どういう意味か分からんが
単体テストなら正しい例外が返ってくるかcatchして調べる
想定外の例外が返ってきたらバグだからそれはcatchしない
もう余所でやってくれ 質問者がスルーされまくってるだろ どれが質問者から分からないくらいに
849 :
デフォルトの名無しさん :2007/12/13(木) 04:31:09
エスケープシーケンス文字ってどうして%とか\とか{}つかうの? もっと存在しない記号にすれば良いのに
いちばいと
存在しない記号って例えば?
₩とか
そういや、韓国語版DOSのプロンプトは、C:₩ だったなw
イギリス人って £include <stdio.h> とか書いてたの?
dとかj みたいに
w←みたいでうける
エスケープ文字よりもC++は記号の使いまわしすぎだろ
101キーボードで打てないといけないからね。
トライグラフ もあるけどなーw
みなさん、C#を使って作るのは やっぱりWinアプリですか?
Mono
863 :
デフォルトの名無しさん :2007/12/13(木) 14:23:18
webbrowserでサイトを表示するとテンポラリフォルダに勝手にファイルが溜まっていくんですが、 プログラム終了時にフォルダ内全削除してから終了させるのってどうやるんでしょうか?
おいお例外が終わったら過疎ったじゃないか
デリゲートとカスタム属性に泣きそうになってるC++プログラマです・・・。 誰か慰めてください><
>>865 犬にでも噛まれたと思ってあきらめなさい。
>>830 ファイルの存在確認からOpenまでの間にファイルが消えることがあるだろ
並列処理してたらそういうことはよくある
確認用メソッドと取得用メソッドは分けてはいけない
>確認用メソッドと取得用メソッドは分けてはいけない そういう問題かよ
872 :
デフォルトの名無しさん :2007/12/13(木) 22:17:46
ActiveDirectoryに存在している全てのプライマリグループを取得するには どうすればいいかな?
ListViewの仮想モードがよく分からないのですが、表示件数が変わるときは 常にVirtualListSizeを操作するのでしょうか? また、一般的な使用方法とかはList<ListViewItem>みたいなリストを保持して、 RetrieveVirtualItemで処理するのでしょうか?
今C#の勉強がてら別アプリケーションのキャプションを取得したりする物を作っています 現在の処理の流れとしては Process.GetProcessesByNameでプロセス取得 ↓ 取得したプロセス.Threadsをforeachでまわして Win32APIのEnumThreadWindowsを使ってウィンドハンドル取得 ↓ EnumThreadWindowsの中でEnumChildWindowsを使って全部の子ウィンドを取得 ↓ GetWindowTextを使用してキャプション取得 こんな感じで処理してます。ここで質問なのですが 1.他のアプリケーションウィンドウのキャプション取得するのって Win32APIを使う以外に処理する方法ってありますか? 2.特定のウィンドウのキャプションが変更された時に 何らかのメソッドを実行したいのですができますか?
メインウィンドウならProcess.MainWindowTitle それ以外はなし あとGetWindowText使うな タイマでポーリングしてりゃ良いんじゃね
>>874 >1.他のアプリケーションウィンドウのキャプション取得するのって〜〜
確かできなかったはず。IntPtr を取る Control のコンストラクタもあるっぽいが、
昔試したときに他のアプリケーションのウィンドウやコントロールに関して有益な情報が得られなかったと記憶してる。
>2.特定のウィンドウのキャプションが変更された時に〜〜
Win32 API を使う方法になるけど、メッセージフックがある。
SetWindowsHookEx などの関数で調べてみるといいかも。
877 :
874 :2007/12/14(金) 02:34:30
878 :
デフォルトの名無しさん :2007/12/14(金) 02:44:27
誰かスルーしないで親切丁寧に分かりやすくテンポフォルダのキャッシュの消し方教えておー
879 :
デフォルトの名無しさん :2007/12/14(金) 02:47:56
フォルダを開く→Ctrl+a→Delete→OK
StringBuilderにClearがないのはなぜだろう
>>881 Length = 0 で代用できるのと、十分に軽量にしているから
使いまわしせずに必要になったら作り直せというお達しだと思う。
883 :
708 :2007/12/14(金) 10:28:42
どなたか・・・
>>883 ToolStripDropDownMenuのチェックとかアイコンの枠を描画するときじゃね
Refectorで追いかけてみればどうよ
885 :
デフォルトの名無しさん :2007/12/14(金) 12:58:42
>>879 >>880 やり方知らねーなら素直に分かりませんって書けやカス
ほんと役立たずのゴミしかいねーなここ
こんな低脳の溜まり場なんかで聞いた俺が馬鹿だったわw
>>885 そういうときに使える有名なレスを授けよう。
「知らないんだったらレスしないで下さい!!」
VC++とVC#をアンインストールしようと手動でやったんだけど、それがまずかった アンインストール用のソフトがあるんだね。これ使ってればよかったのに 手順が間違っていたのか、アンインストールもインストールもできなくなった どうすればいいんでしょうか?
TextBoxでListBoxのように行を追加・挿入・削除することはできないのでしょうか?
糞じゃん
>>889 即レス感謝します
なんとかインストールはできるようになりました
あとは、もう一度アンインストールしてうまくいくかどうか・・
他のアプリのリストビューのデータを取得したりすることは可能でしょうか? APIとかいうのを使うしか無理?
両方yes
>>893 他アプリ(非.NET)のデータを取得するのはc#でもできるということですか?
APIつかWin32APIは大抵の言語で扱える もちろんC#でも
ということはやっぱり、.NETの言語だけでは無理ということですね API使うとメモリリークとかを意識しないとだめなんですよね
897 :
デフォルトの名無しさん :2007/12/14(金) 20:21:44
たとえばVSのデバッガでList<Dicrionary<string,string>> の中身を [ { col1 => "val", col2 => "val" }, { col1 => "val", col2 => "val" } ] 上記のような表示形式で見たいのですが方法はありますか?
何を格納するコレクションなんだそれは……
900 :
897 :2007/12/14(金) 21:40:28
すみませんDicrionaryではなくDictionaryです。
List<Dictionary<string,string>>
>>898 おお。まだちゃんと調べてないけどこれでちょっといけそうな気がします。
ありがとうございます。
Javaだと構造が一発でみれて楽なんだけどなぁ・・・
自分でデバッガビジュアライザ作れば
Javaだと構造が一発でみれて楽なんだけどなぁ・・・
Javaとか.NETとかそういう問題なのか
デバッガの仕様の問題だろ VSは基本的にはToStringを表示するだけだし
ビジュアライザだったら簡単に作れるお
>>906 オブジェクトをファイルとかに保存できるようにデータ列に変換すること。
ファイルに保存=永続化って考えちゃえば良い。
ここに魔法の小箱があります。名前は「シリアライザ」。 Serializableなインスタンスをここに入れると、 バイナリデータになったりXMLデータになったりします。 ネットで転送したり、ファイルに書き込めますね。 こんどはそのバイナリデータやXMLデータをいれて、横にある「デシリアライズ」というボタンを押すと、 あら不思議、もとのインスタンスがフィールドデータとかそのままで復元します。
ファイルなりデータベースなりにオブジェクトの状態を保存して、 アプリが終了した後も永続的に状態が残るようにすること。 要するに、アプリ設定のセーブ/ロードとかに使う。
ちょっと教えて下さい。.NET Compact Framwork上で動作させる物を作っております。 ウィンドウにButtonを2個配置した場合、カーソルキーの左右でボタン1と2の間でフォ ーカスが移動しますが、これと同じ動作をPictureBoxに対しても行いたいと考えており ます。 PictureBox.TabIndexプロパティで何とかなるかとも思ったのですが、CFMのPictureBox はTabIndexプロパティが実装されておりません。 当初ははPictureBoxでなくButtonで行いたかったのですが、Button上にイメージを貼り 付けたいのですが、Button.Imageがサポートされておらず、PictureBoxにした次第です。 PictureBoxにフォーカスを当てる方法か、Button上にイメージを貼る方法どちらか実現 出来ないでしょうか?
912 :
910 :2007/12/15(土) 04:30:45
>>911 氏
情報ありがとうございます。
ちょっと試してみます。
913 :
デフォルトの名無しさん :2007/12/15(土) 08:01:29
C#を勉強し始めた者で、オブジェクト指向言語なるものは初めてなのですが 勉強していくうちに理解できることかも知れないけど質問させてください。 クラス、名前空間など処理を分ける(?)概念は 処理のグループ化、階層化などによって作成、管理、修正、解読などを しやすくする狙いがある(または狙いのひとつである)のでしょうか。 Cは授業で基礎を習った程度の知識と経験がありますが、 その初段階で教わった「プログラムの構造化」を 言語自体の持つ性格としてより明確に打ち出されているものと考えてよいでしょうか。
>>913 簡単にいうとネームが競合しないようにするためだね
*クラス
人が「歩く」
犬が「歩く」
同じ「歩く」でも歩き方などが違うわけで、「人が歩く」というクラス名にしてもいいけど
長くなるので同じクラス名でも別の機能を持たせたいのでクラスという概念ができた
*名前空間
田中さんが作った「人が歩く」プログラム
山田さんが作った「人が歩く」プログラム
同じ「人が歩く」プログラムでもプログラマによって歩かせ方が違うわけで
「田中さんが作った人が歩く」というクラス名にしてもいいけど
長くなるので同じクラス名でも別の機能を持たせたいので名前空間という概念ができた
>>907 >>908 >>909 目的はよくわかりました。
たとえば、
class Widget {
public int x = 10;
public int y = 20;
}
のようなクラスのインスタンスを
シリアライズ化してファイルに保存
する場合、何が保存されるのでしょうか?
class obj = new Widget();
シリアライズ化
ファイルに保存
逆シリアライズ化
xとyを参照すると正しく10と20が読める。
こんな感じですか?
そんな感じ つか自分でやってみろよ
>>913 違います
言語を使ってみる前にこういうものかと言葉で理解しようとするのは誤りです
C#の文法は一通り勉強しました。 .NETも含めてより深く理解するために Windowsアプリに応用しようかと思う のですが、自作クラスを作成しない簡単な フォームアプリでもdelegateととかは使われる ものですか?
クラスのないC#ってなんだ?
Form派生させないのは結構面倒だぞ
まず間違いなく使われる。 気づかないだろうけど。
デリゲートってもともとGUIのために作られたようなもんだし
Form1からして既に自作クラスです。
おまえらしょうもないなw
マジでここは素人に毛が生えた程度だな まともに答えず話の方向ずらすだけ
gooとかはてなとかに行けば、えらそうに質問してもやさしく教えてもらえる。 説教がましく言ってくるやつがいても、言い返せばOK。
プログラミング初心者です Aという処理の○○msec後にBという処理を行う ということをTimerより高精度で行いたいのですがどうすればいいのでしょう? QueryPerformanceCounterを使うといいよと言われたのですが、 ぐぐっても実行時間の計測方法しかわからなくて困ってます・・・
C#でAPIを使う場合、取得したハンドルを格納する変数を メモリ開放しないとだめなのでしょうか? c#は自動でメモリ開放してくれるのでしなくてもいいのでしょうか? もしダメならなぜなのでしょうか? 今作っているプログラムはクラス内にAPIを使っていますが メモリ開放をしなくても何も問題は起きていないです。 自動で開放できているということでしょうか?
>>929 API って何? Win32API?
普通はハンドルは最後に解放するよ。それは C# でも C++ でも一緒。
>>929 なんのハンドルか知らないけど
呼び出し側が解放するように指定されてるAPIなら解放しとけ
>>928 System.Threading.TimerかSystem.Timers.Timerは?
934 :
928 :2007/12/15(土) 22:06:18
実験に使いたいので、1msecレベルの精度が欲しいです・・・
>>934 まずは、C#を捨てるところから始めましょう。
timeBeginPeriod?
>>926 恥ずかしいからやめとけよ。
まともに答えてるのもわからんのなら。
わかるのなら答えてやれよ。
C#じゃ無理だな GCが動いたら軽く吹っ飛ぶ
939 :
928 :2007/12/15(土) 22:21:37
うぅ、なんかやっぱり勉強不足感があるので出直してきます・・・
>>928 >>934 何の実験かは知らんがWindowsをその用途に使うの多分向いてないよ。
仮に1msec以下の精度で時刻が分かっても
スレッドスケジューラが問答無用で実行権を奪っていくこともあるし
行儀の悪いドライバが長時間CPUを離さないと、
その間ユーザモードのプロセスは原理上なんもできん。
QueryPerformanceCounterとかStopwatchクラスでポーリングすれば、
100回のうち何十回とかは要件を満たせるかもしれんが、
一回のミスも許されないような用途ならそもそもWindowsを選ぶべきじゃない。
C#じゃなくてC++なら可能とかそういうレベルですらない。
FPGAとか使った方がいいんでは? と目的も聞かずに適当アドバイス。
windowsというかデスクトップOSを使うべきではない
別なハードウェアでいったん受けて、Windows でデータの集計するのが普通なのかな?
処理の内容分らんのにアドバイスのしようが無いだろ
>>930 APIを呼び出しているクラス内の最後にclose(hwnd)みたいな感じやるということですか?
でも、hwndがメソッド外でフィールド?で定義していた場合
クラス自体を終了しなければ解放されないですよね?
で、クラスならいちいち解放しなくてもガベージコレクションで自動で開放されるから
わざわざしなくてもいいと思うんですがどうなんでしょうか?
>>931 他のプロセスのハンドルです
VirtualAllocExで仮想メモリを割り当てて、開放しなかったけれども
何も異常が起きないんですが、このクラスを呼び出す別クラスのメソッドが
終了すれば、自動で開放されているということかな?
単にリークするだけさ
Stopwatchって、タイムスタンプの取得に 2マイクロ秒くらい(これは俺の環境の場合だが) かかるんだが、これってQueryPerformanceCounterの速度か それともアンマネージ呼び出しなんかのオーバーヘッドかどっち?
>>944 GCがハンドル開放してくれるわけないだろ。
まあ普通はハンドル自体はSafeHandleでラップして、
さらにDisposableなクラスでラップするけどね。
ハンドルはスタックで、インスタンスはヒープ だよね?
参照型変数はスタックに確保されて、参照型変数が指すオブジェクトはヒープ に確保されるんだよね?
質問です。 DirectoryInfo()にパス名を引数として渡す場合、 C#では@"c:\temp"のように先頭に@マークをつけるのは 何故ですか?VC++やVBでは付けないみたいですが。
\
953 :
デフォルトの名無しさん :2007/12/15(土) 23:08:31
画面上にテキストボックスを表示させるということを aspx.csでやりたいのですが、これはTextBoxオブジェクトをインスタンス化して 表示するということは可能でしょうか? Response.Writeでタグを吐けば表示可能ですが、この方法以外でやりたいのです。 なぜデザイナでタグをペチペチ配置しないかというと 例えばURLのパラメータによってテキストボックスの数が異なるからです。 なので、動的に生成する方法を知りたいのです。 よろしくお願いします。
SafeHandleでラップしたらもはやそれはクラスだよ。 ハンドルそのものは値型で保持されるけど ローカル変数じゃないからスタックとか関係ないよ。
>>944 意味わかんね
プロセスハンドルをどうやって解放するつもりか
>VirtualAllocExで仮想メモリを割り当てて、開放しなかったけれども
解放しなかったのはメモリなのか?
>>951 @をつけると\がエスケープ文字でなくなる。
VBはエスケープ文字がないし、C++は"c:\\temp"と\を重ねることでエスケープ文字でなくす。
>>955 ありがとうございます。
会社の環境はVS2005なのですが、ちゃんと
aspx
aspx.cs
designer.cs
とワンセットで表示されるのですが、家の環境はWebDevelopperで
designer.csがソリューションエクスプローラに表示されません。
aspxなどの場所にdesigner.csファイルもありません。
これはどうやって表示させるのでしょうか?
WebDevelopperはソリューションファイルやプロジェクトファイルも無いんですよ(^^;
なので、いつもファイルをダブルクリックして立ち上げるのではなく
WebDevelopperを開いて、スターと画面から最近実行したソリューションの一覧から選択してる・・・
>>956 メモリもプロセスハンドルも両方です
VirtualFreeしていないということです
>>958 そんな初歩的なことを聞くな
会社で聞いたら一言で済む
今趣味でエロゲを作っているんだけど、ソースを晒せば プログラミング構造に問題があるか、簡単なアドバイスをもらえたりするんでしょうか? 趣味で自分専用にやっているだけなので動けばいいんだけど 一人で黙々とやっているだけなのでだめなところに気づきにくい
>>960 会社じゃあWebDevelopperなんて使ってないもんで誰もわからないと思われまする。。
>>962 とにかく見てくれと言っても反応は得られにくいよ
965 :
デフォルトの名無しさん :2007/12/15(土) 23:44:01
>>962 ,l、::::::::::::::::::::::::::::::::::|:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:l
,ハ::`丶、:::::::::::::::::::::::|:;:;:;:;:;:;:;:;:;:;_,, -‐:〈
{;;;;ヽ、:::::`丶、:::::::::::::l:;:;:;:;:;:; ィ";:;:;:;:;:;:;:}
,l;;;;;;;;;シ丶、:::::::`:`:ー'‐::'':"::::::::_, ィ"´;;l
fうl;;;ミミ、 ``丶 、::::::::,: - ''"´ リ;;;;;;f-、
{ l l;;;;;ッ=` (三> `^´ (三シ ム;;;;;;ソl}
t !;;;リ _,,...,,_ _,,..,,_ l;;;//
゙l ヾ;l :'ィテヘ9ンミ ,: ',シヒ9ン、 l;//
`ーll! `''==ヲ' l:.:^''==彡'" ,!リノ
ll ` '' " l:.:.:` '' " ,i;;l´
li, ,r .: :.ヽ、 ,:,り
t、 / ゙ー、 ,r '゙ヽ /,K′
ゝ、 ,:' :~: } // /ヽ、
/{lヽ ,ィ==ニニ==,ノ,ノ7 /:.:.:.:ヾニヽ
, ィ/:.:い ヽ `` ー一 ''"/,/,/:.:.:.:.:.:.:.:ソ }- 、、
/ /:.:.:.:ヽヽ `' ー‐ -- '"//:.:.:.:.:.:.:/ / ` 丶、
,, - { ヾ:.:.:.:.ヽ丶 //:.:.:.:.:, -'" ,/ ` 丶 、
,, - ''" 丶、 `` ーゝ、ヽ.,_,,ィ"ェくユ- ''" , ィ"
>>962 ゲ製板とかに行った方がいい
C#ってそんなに特殊な言語じゃないからC#知らなくてもC++かJava知ってる人なら読めるはず
968 :
962 :2007/12/15(土) 23:51:36
>>964 そうですか・・・
オブジェクト指向でプログラミングできているのかよくわからないんですけど
私の1000行のソースが上級者なら500行ぐらいに簡潔に表せたりするのかな?
同じ機能をあらゆるメソッドで何度も使う場合、それらをクラスにするようにしていれば
一応オブジェクト指向プログラミングできているのかな
>>965 な・・・なんですか?w
そんなふうな不安を抱えていた時期が俺にもありました。 気楽に行こうぜ相棒
>同じ機能をあらゆるメソッドで何度も使う場合、それらをクラスにするようにしていれば >一応オブジェクト指向プログラミングできているのかな 。 。 / / ポーン! ( Д )
971 :
962 :2007/12/16(日) 00:28:51
w
何気ない会話も私には意味があるの あなただけ特別と思ってる 出会いは偶然で何処にでも在るとしても 二人なら永遠のストーリー
>>968 オブジェクト指向っていうのはあくまで「指向」つまり考え方なわけで
「これをやればオブジェクト指向だぜ!」という明確な決まりはありませんのよ
>>968 オブジェクト指向・・・
部品を作ってそれを組み合わせるって認識してるけど・・・どうなんだろう
エロゲなら例えば、
背景、画像、テキストなどの描画を管理するコンポジションクラス(レイヤー管理とか)
・背景、登場人物描画管理パーツクラス
・テキストボックス、テキスト描画管理パーツクラス
全体の動作・入力を管理するコンポジションクラス
・通常テキストの管理するパーツクラス
・選択肢発生・処理パーツクラス
・セーブ・ロード、オプションなどを管理するパーツクラス
描画・動作・入力対応を統括するクラス
登場人物のクラス(名前、画像、内部パラメータetc)
テキストをtxtファイルから読み込むクラス(後で修正を楽に行うため)
分岐情報やテキストの割り当て・管理を行うクラス
見たいにそれぞれの部品を作って、組み合わせるとか?
どういう風に部品分解するかは人それぞれだし、個人的には上記の例はさらにパーツクラスに分解されていき、
大体最大でも500行程度のクラスになると思う。(大体50〜200行程度になることが多いけど)
ジェネリックメソッドを書くときに、まだ<T>と書いてないときに 戻り値の型をTと書こうとすると、IntelliSenceが勝手にThreadStaticAttribute と入れてしまうのですが、うまい回避法はないですか? Escを押せば回避できるのはしってますが、もっとスマートな方法はないでしょうか
>>975 まったく関係ないが、初めてその属性を知った
こんなんあったんだ
質問させてください。 Visual C# 2005 EEを使っているのですが、 0x80042740 というエラーがでてデザイナが表示されなくなってしまいました。 デザイナが表示されないこと以外は何の問題もなく動作します。 調べてもいまいち分りませんでした。 直す方法があれば教えていただきたいです。よろしくお願いいたします。
エラーメッセージを端折らずに全部書きなよ
申し訳ありません。よろしくお願いします。 場所 EnvDTE.FileCodeModel.get_CodeElements() 場所 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomParser.Parse(TextReader codeStream) 場所 Microsoft.VisualStudio.Design.Serialization.CodeDom.MergedCodeDomParser.System.CodeDom.Compiler.ICodeParser.Parse(TextReader stream) 場所 System.CodeDom.Compiler.CodeDomProvider.Parse(TextReader codeStream) 場所 Microsoft.VisualStudio.Shell.Design.Serialization.CodeDom.CodeDomDocDataAdapter.get_CompileUnit() 場所 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager) 場所 System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host)
申し訳ありません、本当に・・・。これでいいのでしょうか・・・。 デザイナの読み込み時に 1 つ以上のエラーが発生しました。エラーは以下に一覧表示されます。コードの変更が必要なエラーもありますが、プロジェクトを再度ビルドすると解決できるエラーもあります。 HRESULT からの例外: 0x80042740 非表示 場所 EnvDTE.FileCodeModel.get_CodeElements() 場所 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomParser.Parse(TextReader codeStream) 場所 Microsoft.VisualStudio.Design.Serialization.CodeDom.MergedCodeDomParser.System.CodeDom.Compiler.ICodeParser.Parse(TextReader stream) 場所 System.CodeDom.Compiler.CodeDomProvider.Parse(TextReader codeStream) 場所 Microsoft.VisualStudio.Shell.Design.Serialization.CodeDom.CodeDomDocDataAdapter.get_CompileUnit() 場所 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager) 場所 System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host)
>>981 これは特定のフォームで出てるの?
もしそうならコンストラクタのInitializeComponent()の前後に追加したコードをコメントにしてみて。
何かがnullのままだったり描画に関係するフィールドが想定値域の範囲外だったりと 初期化がうまくいってない気がする コードうpすれば多分わかるけど
オブジェクト指向…それは擬人化。 クラスとは、萌えなのです。
アニサキス
986 :
962 :2007/12/16(日) 11:39:50
>>974 私のプログラムはそんなに綺麗に役割分担できてないかも・・・・
あらゆるクラスがあらゆることをやっている感じになって
非常に修正が難しいプログラムになってます・・
設計をもう一度見直そう・・・
あまり悩みすぎてもしょうがないよ 一番必要なのは経験だろうから ずっと経ってから初期の自分のコードを見直すと丸ごと直したくて仕方ない衝動に駆られたりするけど それはそういうものだと思う
最初から完璧を目指そうとすると 一歩も動けなくなるのさ
989 :
962 :2007/12/16(日) 12:36:31
やさしさに感動 もう少し力抜いてやります プログラムたのしー
>>977 ジェネリックメソッドのコードスニペット作れば
991 :
990 :2007/12/16(日) 14:04:32
スニペットを使う習慣を作るよりは T Esc と入れる習慣を作る方が楽なような
993 :
762 :2007/12/16(日) 14:42:26
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="
http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet ">
<CodeSnippet Format="1.0.0"><Header><Title>GenericMethod</Title>
<SnippetTypes><SnippetType>Expansion</SnippetType></SnippetTypes</Header>
<Snippet><Declarations><Literal Editable="true"><ID>methodName</ID>
<Default>MyMethod</Default></Literal><Literal Editable="true"><ID>args</ID>
</Literal></Declarations><Code Language="csharp"><![CDATA[T $methodName$<T>($args$)
{
$end$
}]]></Code></Snippet></CodeSnippet></CodeSnippets>
作ってみたけどたぶんT Escの方が早いよ
994 :
デフォルトの名無しさん :2007/12/16(日) 16:18:56
教えてください。 Repeaterにユーザコントロールファイルをセットして実行し、 ascx.csでRepeater.DataSourceに入っているデータレコードを取得したいのですが そんな事は可能でしょうか? this.rep.DataSource = dataTable; this.rep.ItemTemplate = Page.LoadTemplate("Test.ascx"); this.rep.DataBind(); Test.ascx.csでdataTableのレコードを取得したい。 ascxでは <%# DataBinder.Eval(((RepeaterItem)Container).DataItem, "name") %> で取得可能なのですが、これをascx.csでやりたい。 何でかと言うと、この値によって処理を変更したいからです。 お願いしますm(_ _)m
995 :
デフォルトの名無しさん :2007/12/16(日) 18:32:41
DataGridViewの1つのセルの中に複数のボタンを配置したいのですが、 どうやるのでしょうか? こんな感じにしたいのですが。 ---------------------------------------- | header1 |header2 | ---------------------------------------- |AAA | (ボタン1)(ボタン2)| | | (ボタン3)(ボタン4)| ---------------------------------------- |BBB | (ボタン1)(ボタン2)| | | (ボタン3)(ボタン4)| ----------------------------------------
Here is Japanese OK.
お前こそちゃんとした英語書けよw
ここには日本のOKがあります でっていう
1000 :
デフォルトの名無しさん :2007/12/16(日) 19:57:00
ぬるぽ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。