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

このエントリーをはてなブックマークに追加
1ななしぃ#
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

前スレ: ふらっとC♯, C#(初心者用) Part20
http://pc11.2ch.net/test/read.cgi/tech/1191036844/
2デフォルトの名無しさん:2007/11/18(日) 16:10:06
3デフォルトの名無しさん:2007/11/18(日) 16:12:34
C#, C♯, C#相談室 Part44
http://pc11.2ch.net/test/read.cgi/tech/1194956418/

C♯, C#相談室 Part34
http://pc11.2ch.net/test/read.cgi/tech/1162467959/

【新GUI FW】WPF(XAML,AVALON,.NET3.0)【重い?】
http://pc11.2ch.net/test/read.cgi/tech/1162950198/

Windows Live プログラミング
http://pc11.2ch.net/test/read.cgi/tech/1188112572/

初心者のためのプログラミング言語ガイド Part6
http://pc11.2ch.net/test/read.cgi/tech/1193132235/
4デフォルトの名無しさん:2007/11/18(日) 16:18:35
>>1は紙!!
5デフォルトの名無しさん:2007/11/18(日) 17:15:45
??演算子って、参照型の代入に使っても問題ありませんか?
NULL許容型への代入専用だったりします?
一応コンパイルが通ってうごくみたいですが
6デフォルトの名無しさん:2007/11/18(日) 17:17:03
問題ない
75:2007/11/18(日) 17:26:13
>>6
了解です。
ありがとうございました。
8デフォルトの名無しさん:2007/11/18(日) 18:21:42
前スレ>>1000は元気かのう

9デフォルトの名無しさん:2007/11/19(月) 00:15:21
XMLのDOM読み込みってのは文書構造(属性の名前とか)が事前に分かってないとダメなの?
10デフォルトの名無しさん:2007/11/19(月) 00:16:25
意味が分からんが、文書構造が分からんXMLに何か意味があるのか?
11デフォルトの名無しさん:2007/11/19(月) 00:18:32
>>9
わかって無くても問題ないけど、使い道がわからんな・・・
12デフォルトの名無しさん:2007/11/19(月) 00:34:50
いえ、こんな風に"data"って直書きしてたので気になっただけです・・
string data = rootElement.GetAttribute("data");
13デフォルトの名無しさん:2007/11/19(月) 00:39:25
やっぱり意味が分からん
何が気になったの? どうならいいの?
14デフォルトの名無しさん:2007/11/19(月) 00:47:05
そもそも、文書構造がいらないならXml使わないでCSV使えばいいだろう。
15デフォルトの名無しさん:2007/11/19(月) 00:48:24
文書構造が分かってないとDOMは使えないのか?ってことが気になっただけです。
16デフォルトの名無しさん:2007/11/19(月) 00:54:46
質問です。
数百、数千のファイルの情報をDBに登録したいのですが、
ExecuteNonQuery()でINSERT文を発行する以外でいい方法ありますでしょうか?
17デフォルトの名無しさん:2007/11/19(月) 01:05:47
また意味の分からんのが来たなw
18デフォルトの名無しさん:2007/11/19(月) 01:14:51
DOMは文書構造わからなくても使えるが、シリアライズとデシリアライズで調べてみたら?
199:2007/11/19(月) 01:24:14
すみません。XMLについて勉強してまして気軽に質問してしまいました。
XmlReaderが上からベタ読みで、DOMはそうじゃない との記述があったのに
サンプルコードが何かベタ書きだったのであれ?と思いました。
DOM含めXML勉強して出直してきますm(_ _)m
20デフォルトの名無しさん:2007/11/19(月) 01:55:46
べたってなんだよ
21デフォルトの名無しさん:2007/11/19(月) 23:16:07
>>19
どこにそんなことかいてある?
22デフォルトの名無しさん:2007/11/20(火) 09:25:02
DOMのパーサがそうなだけで
それを使うアプリなんか作り方によるだけ。
23デフォルトの名無しさん:2007/11/20(火) 10:59:00
クラスのインスタンスをフィールドに含める時に、newって何時します?

private ClassA a = new ClassA();
というように、宣言する時に同時にnewすることも、
コンストラクタの中でnewしてもどちらでも良いクラスがありますよね?
皆さん、どうしてます?
24デフォルトの名無しさん:2007/11/20(火) 11:33:05
おれの場合はインスタンスを再利用する場合はコンストラクタ
使い捨ての場合はフィールドで行っているよ
25デフォルトの名無しさん:2007/11/20(火) 12:12:15
宣言時にnewするってのはコンストラクタでnewするってことだよ
つまり違いはない
ただ前者の場合、引数に他のフィールドが使えないってだけ
26デフォルトの名無しさん:2007/11/20(火) 12:45:44
long配列をdouble配列に変換したいのですが、一発でやる方法はないのでしょうか?
下記だとエラーが出てコンパイル出来ないのですが、一個一個ループで変換するしか無いのでしょうか?
long[] x = new long[10];
double[] y = new double[10];
y = (double[])x;
27デフォルトの名無しさん:2007/11/20(火) 13:10:44
long[] l = { 10, 10 };
double[] d = { 20, 20 };

object l2 = (object)l;
d = (double[])l2;
28デフォルトの名無しさん:2007/11/20(火) 13:19:18
>>27
指定されたキャストは有効ではありません
というエラーが出るのですが・・・
2927:2007/11/20(火) 13:26:36
間違えた。
キャストが有効なのはジェネリクスだけだった。
配列は構造体だからループが一番早いと思う。
30デフォルトの名無しさん:2007/11/20(火) 14:26:48
アルファベットを順番に配列に格納したいのですがどうしたらよいでしょうか?

string[] strWord = new String[26];
strWord[0] = "A";
strWord[1] = "B";
...

こんなやり方しか知らなくて・・・よろしくお願いします。
31デフォルトの名無しさん:2007/11/20(火) 15:34:52
((char)('A' + i)).ToString()
3230:2007/11/20(火) 15:44:04
>>31
ありがとうございました
33デフォルトの名無しさん:2007/11/20(火) 16:16:05
ConvertAllでいいだろ多分。
34デフォルトの名無しさん:2007/11/20(火) 16:18:57
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);
}
35デフォルトの名無しさん:2007/11/20(火) 17:07:52
なんつーことを…
36デフォルトの名無しさん:2007/11/20(火) 18:52:16
まさに外道
37デフォルトの名無しさん:2007/11/20(火) 19:14:11
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]);
}
38デフォルトの名無しさん:2007/11/20(火) 19:16:46
冗談はこの辺にして。
string[] strWord = { "A","B","C"};
39デフォルトの名無しさん:2007/11/20(火) 22:08:50
>>26
それがなぜエラーになるか、わかれば少しレベルアップできますよ。
40デフォルトの名無しさん:2007/11/21(水) 10:53:34
ACB→YAZのようにずらして表示させたいんですけど
どうやったらできますかね?
41デフォルトの名無しさん:2007/11/21(水) 11:08:21
どうずらすの?
42デフォルトの名無しさん:2007/11/21(水) 11:09:27
GetByte か アルファベット全体の配列を持つ
43デフォルトの名無しさん:2007/11/21(水) 11:21:28
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();
}
4440:2007/11/21(水) 11:25:23
ありがとうございます
やってみます
45デフォルトの名無しさん:2007/11/21(水) 18:01:46
enumをintにするには、ただ単にintでキャストして、(int)Enum.Instanceとするだけで、
0から順番にintに出来ると思うのですが、逆は簡単に出来るのでしょうか?
swich(num)で場合分けしてintからenumの文字列を得るしかないのでしょうか?
46デフォルトの名無しさん:2007/11/21(水) 18:58:25
>>45
Enum.GetName()
47デフォルトの名無しさん:2007/11/21(水) 19:02:15
>>46
どうも有り難うございます〜。お手数お掛けしてすみませんでした。
Enum.GetName(typeof(enum), int);
48デフォルトの名無しさん:2007/11/21(水) 19:43:13
(num as enum).ToString()
49デフォルトの名無しさん:2007/11/21(水) 19:50:36
逆も普通に列挙体の型にキャストするだけだけど
なんで文字列とかそういう話になるの?
50デフォルトの名無しさん:2007/11/21(水) 19:51:55
あひょっとして((enum)num).ToString()じゃないと駄目だったかな?
51デフォルトの名無しさん:2007/11/21(水) 19:53:34
>>48はコンパイル通らないけど
参照型でも普通>>48みたいなasの使い方はしないよ
asはnullチェックとセットじゃないと意味がない
失敗したときわかりにくいし
52デフォルトの名無しさん:2007/11/21(水) 19:56:56
>>48
それは、最初、直感的にやってみてエラーになったんですが、できるんでしょうか?
asオペレータは参照型で使用してくださいとなります。
enumは値型ですから駄目?
53デフォルトの名無しさん:2007/11/21(水) 21:08:11
短く書きたかっただけ、ちょっと勘違い(値型でもいけたかなと思ったけど、やっぱりで>>50)。
54デフォルトの名無しさん:2007/11/21(水) 22:28:51
フォーム上に配置されたコンポーネント(Component派生クラス)の内部から、
自分が配置されているフォームを取得することはできないでしょうか。

どうしても無理なら、カスタムデザイナを使って、フォームに配置されたときに
自動的にプロパティを設定するようなやり方にしようかと思っているのですが。
55デフォルトの名無しさん:2007/11/21(水) 22:39:11
FindForm
こんなVBっぽい機能使うなよw
56デフォルトの名無しさん:2007/11/21(水) 22:50:59
ComponentにFindFormなんてないだろ
57デフォルトの名無しさん:2007/11/22(木) 02:16:54
こっちじゃないだろうか?
ttp://msdn2.microsoft.com/ja-jp/library/system.windows.forms.control.parent(VS.80).aspx
58デフォルトの名無しさん:2007/11/22(木) 09:59:40
それは違う。
全然違う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
もうちょっとスッキリした書き方って何かありますか?
60デフォルトの名無しさん:2007/11/22(木) 11:20:37
string value = string.Join(",", str);
6159:2007/11/22(木) 11:27:11
>>60
ありがとう、おかげさまでスッキリ書けました。大感謝です!!
62デフォルトの名無しさん:2007/11/22(木) 11:27:12
Join知らなくても、せめてforループくらい思いつかないと、配列の意味無いじゃん。
63デフォルトの名無しさん:2007/11/22(木) 13:06:58
FizzBuzzやらせたら面白いことになりそうだな。
64デフォルトの名無しさん:2007/11/22(木) 13:12:30
foreach(string st in str)
{
65デフォルトの名無しさん:2007/11/22(木) 13:22:35
+= じゃなくて StringBuilder を使ってくれるといいんだが。
66デフォルトの名無しさん:2007/11/22(木) 14:16:26
文字列だけの連結なら、StringBuilderより+演算子を使う方が速い。
必要なだけの文字列の長さを計算して、1回のピープ確保で済む。
67デフォルトの名無しさん:2007/11/22(木) 14:53:58
>>66
string value = "";
foreach (string s in str) {
  value += s;
}
は、まずいだろ。
68デフォルトの名無しさん:2007/11/22(木) 14:59:25
>>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
69デフォルトの名無しさん:2007/11/22(木) 15:10:11
joinでも変わらんだろ大して。
70デフォルトの名無しさん:2007/11/22(木) 15:14:33
総合的に一番ベストな回答はjoinだろ。
将来配列の個数が増えたときも対応が利くし
+=よりは速い。
そして何よりもスマートに記述できる。
71デフォルトの名無しさん:2007/11/22(木) 15:36:23
>これしか思いつかないんだ
すまんすまん、60=62だが、ここに突っ込んだんだよw
72デフォルトの名無しさん:2007/11/22(木) 15:45:35
一時StringBuilderより+利用時の暗黙の配列の方が重かったりしてw
73デフォルトの名無しさん:2007/11/22(木) 16:03:11
タブコントロール内にタブページが3ページあります。
3ページ目の中にはDataGridViewがあります。

タブページ外のボタン(タブコントロールと同じフォーム内)を
クリックしたときに、3ページ目のコピーを4ページ目として、
新たにタブページを作成するメソッドって何かありませんか?

7473:2007/11/22(木) 16:11:41
ちょっと聞き方に問題ありました、すみません。
>新たにタブページを作成するメソッドって何かありませんか?
新たにタブページを作成するスマートな方法をご存知ないですか?
に訂正します。
75デフォルトの名無しさん:2007/11/22(木) 17:13:26
DataGridView にどんなデータが入ってるか知らんから
データ舐めて新規につくれとしか


>>66
                    ,ィ⊃  , -- 、
          ,r─-、      ,. ' /   ,/     }     ち
          {     ヽ  / ∠ 、___/    |
   署     ヽ.      V-─- 、  , ',_ヽ /  ,'      ょ
           ヽ  ヾ、  ',ニ、 ヽ_/ rュ、 ゙、 /
   ま        \  l  トこ,!   {`-'}  Y        っ
             ヽj   'ー'' ⊆) '⌒`  !
   で    , 、      l     ヘ‐--‐ケ   }        と
        ヽ ヽ.  _ .ヽ.     ゙<‐y′   /
   来     }  >'´.-!、 ゝ、_  ~  ___,ノ
         |    −!   \` ー一'´丿 \
   い    ノ    ,二!\   \___/   /`丶、
        /\  /    \   /~ト、   /    l \
7673:2007/11/22(木) 17:26:01
>>75
すんません、説明不足でした。
DataGridViewのデータはコピーできなくてOKです。
3ページ目のDataGridViewの列タイトル・列幅など
プロパティのコピーができれば充分です。
何とかなりませんかね?
77デフォルトの名無しさん:2007/11/22(木) 17:52:25
>>75
それはピーポw
7873:2007/11/22(木) 18:13:03
自己解決しますた。
DataGridView dgv = dgvLog; ← dgvLog:3ページ目のDataGridView
tabPage4.Controls.Add(dgv);

たぶんこれで問題ないと思われます。
7973:2007/11/22(木) 18:18:44
↑78で解決できたと思ったんですが、
DataGridView dgv = dgvLog;
tabPage4.Controls.Add(dgv);
これを実行するとナゼか
3ページ目のDataGridViewが消えるorz
80デフォルトの名無しさん:2007/11/22(木) 18:45:22
>>79
当たり前w
試しに、
DataGridView dgv = new DataGridView();
して、それをAdd してみ。
81デフォルトの名無しさん:2007/11/22(木) 18:50:10
>>80
DataGridView dgv = new DataGridView();
DataGridView dgv = dgvLog;
tabPage4.Controls.Add(dgv);
このようにやっても3ページ目が消えます;;

どうやらdgvLogそのものをコピーするのは無理っぽいですね。。。
82デフォルトの名無しさん:2007/11/22(木) 19:03:58
クマー
83デフォルトの名無しさん:2007/11/22(木) 19:18:01
それコンパイルできんの?w
8473:2007/11/22(木) 19:24:25
一応デバッグモードで動いてますが。。。
これって何かヤバい記述なのでしょうか?
超初心者ですみません;;
85デフォルトの名無しさん:2007/11/22(木) 20:34:49
C#のバージョンと.Netランタイムのバージョンの関係を教えてください。

C#3.0で開発するとクライアントでは.net3.0/3.5が必要なの?
.net2.0の開発にC#3.0は使えないんですか?
86デフォルトの名無しさん:2007/11/22(木) 20:41:28
LINQ使えないんじゃないの
87デフォルトの名無しさん:2007/11/22(木) 20:48:24
>>85
3.0/3.5で追加されたライブラリを使わなければ、
C# 3.0で追加された言語仕様を使っても.NET Framework 2.0で動くはず。
86も言っている通りLinqはだめだな。

まあ、こういうことも不可能ではないみたいだけど。
http://d.hatena.ne.jp/NyaRuRu/20071121
88デフォルトの名無しさん:2007/11/22(木) 23:09:27
>>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デフォルトの名無しさん:2007/11/22(木) 23:34:22
構造体とクラスに関連してスタックとピープについて詳しいサイトありませんか、
90デフォルトの名無しさん:2007/11/22(木) 23:40:37
>>89
                    ,ィ⊃  , -- 、
          ,r─-、      ,. ' /   ,/     }     だ
          {     ヽ  / ∠ 、___/    |
   署     ヽ.      V-─- 、  , ',_ヽ /  ,'      か
           ヽ  ヾ、  ',ニ、 ヽ_/ rュ、 ゙、 /
   ま        \  l  トこ,!   {`-'}  Y       ら
             ヽj   'ー'' ⊆) '⌒`  !
   で    , 、      l     ヘ‐--‐ケ   } 
        ヽ ヽ.  _ .ヽ.     ゙<‐y′   /
   来     }  >'´.-!、 ゝ、_  ~  ___,ノ
         |    −!   \` ー一'´丿 \
   い    ノ    ,二!\   \___/   /`丶、
        /\  /    \   /~ト、   /    l \
   っ

   て
91デフォルトの名無しさん:2007/11/22(木) 23:49:13
おめぇはすっこんでろピー公
92デフォルトの名無しさん:2007/11/23(金) 00:14:57
SP1の変更点一覧てどこにあるのん?
93デフォルトの名無しさん:2007/11/23(金) 00:23:56
>>90
市ね糞が
94デフォルトの名無しさん:2007/11/23(金) 00:38:37
ところで、最近はヒープのことをピープって言うのが流行ってるのか?
95デフォルトの名無しさん:2007/11/23(金) 00:51:08
ビープ
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ではできないのは
何か悔しいです。



97デフォルトの名無しさん:2007/11/23(金) 06:54:06
>>96
そういうDAOべったりのことをしたいなら、C#からDAO使えばいいじゃね
98デフォルトの名無しさん:2007/11/23(金) 10:26:16
>>96
お前VB6のソース貼っただけで質問かよ


DAOでMDBへの接続ならこんなのがあった
http://park15.wakwak.com/~u-konko/denno/c_sample/ado.htm
99デフォルトの名無しさん:2007/11/23(金) 11:30:52
>>96
多種DB間での単一SQLって・・・
プログラム的には接続を別に持って
DB1からObjectとして取得
DB2へ取得Objectをインサート
がスマートなんじゃね?
100デフォルトの名無しさん:2007/11/23(金) 15:30:27
IEを監視してアクセスしたURLを取得したいのですが、どうアプローチすればいいでしょうか?

101デフォルトの名無しさん:2007/11/23(金) 15:39:20
Fiddler でも参考にしたら
102デフォルトの名無しさん:2007/11/23(金) 15:54:15
>>101
レスありがとうございます。
そのような感じではなくロガー用途で使いたいのです

ttp://mixlogger.the-ninja.jp/
このような感じです。

情報を小出しにしてしまい申し訳ありません。

プログラムは常駐していて、IEでなにかサイトにアクセスすると
URL、あとタイトルとアクセス時間をログにして出力すると考えています。
103デフォルトの名無しさん:2007/11/23(金) 19:19:55
プロキシかませれば?
104デフォルトの名無しさん:2007/11/23(金) 19:25:23
>>96
何が上手くいかないか書いていない。
c#上のコーディングミスの可能性があるのにソースが貼ってない。


それにもかかわらず
>C#+ADO.NETではやはり無理なのでしょうか?
なんだそれ?

ゆとり?
105デフォルトの名無しさん:2007/11/23(金) 20:09:47
いいえ、ケフィアです。
106デフォルトの名無しさん:2007/11/23(金) 20:41:21
>>105
この板で久しぶりにワラタwwwww
107デフォルトの名無しさん:2007/11/23(金) 22:32:59
俺には中学生のセンスにしか思えないけど。
まあプログラマって笑いのツボ(に限らないけど)が中学生な奴が多いのかもな。
108デフォルトの名無しさん:2007/11/23(金) 22:42:49
高二病患者乙
109デフォルトの名無しさん:2007/11/23(金) 23:02:54
string aとstring bがあってそれぞれ同一ドライブのディレクトリへの絶対パスが入っています。
aとbは親子の場合もあるしそうでないときもあります。

これをaからbへの相対パスに変更する簡単な方法はありますか?
110デフォルトの名無しさん:2007/11/23(金) 23:07:40
>>109
クイズ風に質問すな
111デフォルトの名無しさん:2007/11/23(金) 23:09:04
C# 相対パス
でググればいくらでもでてくるだろうに。
Uri.MakeRelativeUri
112デフォルトの名無しさん:2007/11/23(金) 23:23:06
ほとんどの文字列操作は大抵にAPIにあるし、
無くてもアルゴリズムを自作できる程度のものが多い。
113デフォルトの名無しさん:2007/11/23(金) 23:28:15
>>111
どうもありがとうございます。
Uriクラスとは気が付きませんでした・・
114デフォルトの名無しさん:2007/11/23(金) 23:33:41
シリアル通信の3ch同時受信のプログラムを組んでるのですが
RS232Cの通信というのはかなりのCPU負荷をかけるものなのでしょうか?
1chでの受信ではデータの取りこぼしもほとんどなく転送速度もそこそこ出ているのですが
3chでのプログラムではPentium MのPCでは動作が不安定になってしまいました。
Core 2 DuoのPCでは普通に動くのでCPUパワーの問題かなと思ったのですが・・・。
Serialportクラスを3つ並べてそれぞれをDataReceivedイベントで監視するという
安直な考えで組んだプログラムですのでプログラムにも問題があるのでしょうが
純粋にCPU負荷がかかる処理であることが原因なのでしょうか?
115デフォルトの名無しさん:2007/11/23(金) 23:42:36
>>110
ふいたw
116デフォルトの名無しさん:2007/11/23(金) 23:46:28
>>114

同期、非同期から勉強することをお勧めする。
117デフォルトの名無しさん:2007/11/24(土) 00:16:22
>>114
イベント内でファイル開いたりしてないよね?
118デフォルトの名無しさん:2007/11/24(土) 00:28:45
>>114
>DataReceivedイベントで監視する
通信のプロトコルが分からないので断定はできないが、
たぶん設計としてここがまずいと思う。

必ずしもフリースレッドでやる必要はないんだけど、定期的にバッファをポーリングする
やり方の方がほとんどの場合適合的じゃないのかな。
119デフォルトの名無しさん:2007/11/24(土) 14:14:11
C#のWindowsアプリから、Excelで申請書を出力するアプリを作ろうとしています。
VS2005で、VSTOは持っていません。Excelは2003です。

あらかじめ、申請書のフォーマットのxlsファイルを用意し、そこに作成するWindowsアプリで
COMでExcelを操作して申請者の氏名などの情報を書き込んで、xlsを別名で保存するつもりです。

困っているのが、申請書に、Excelのフォームコントロール(チェックボックス、コンボボックス、
ラジオボックス)があり、これらをC#から操作(選択)する方法がわからないことです。

現在、VS上でどのオブジェクトを操作したらいいのかもわからない状態です。
ご存じの方がいらっしゃったら、お教えいただけないでしょうか。
120デフォルトの名無しさん:2007/11/24(土) 16:55:30
マクロにデータ与えて操作
121デフォルトの名無しさん:2007/11/24(土) 17:39:56
>>119
たぶん正攻法じゃないとは思うけど、
VBA側の処理で特定のセルの値とコントロールの状態をリンクするコードを書いておけば、
C#のコードからはその特定のセルの値を操作すれば間接的にコントロールを操作できるんじゃないの?
122119:2007/11/24(土) 18:30:01
>>120,121

ありがとうございます。

マクロを組み合わせる方法がよさそうですね。
申請書の変更にも対応しやすそうですし。
123デフォルトの名無しさん:2007/11/24(土) 19:11:25
URLからそのページのTITLEを取得する方法
あれば教えていただけないでしょうか?

フレームワーク2.0です。
124デフォルトの名無しさん:2007/11/24(土) 19:22:18
手っ取り早くサイトのページダウンロードして正規表現か何かでtitle抜き出せば?
125デフォルトの名無しさん:2007/11/24(土) 19:34:19
>>122
VBAより、用意したWSHのスクリプトを呼び出す方がかっこよくね?
126123:2007/11/24(土) 19:37:55
>>124
ありがとうございます。

うまいことクラスが用意されてる感じではなさそうってことですね。

最終的に方法が見つからなければその方法でいきたいと思います。

127デフォルトの名無しさん:2007/11/24(土) 19:43:11
どんなけ人頼みなんだよw
128デフォルトの名無しさん:2007/11/24(土) 22:37:31
内の会社はリフレクションでExcelのCOMを操作するライブラリ作ってやってる。最低限の機能しかないけど、Excelのバージョンに関わらず動くから便利。
ただ大量に出力する時はCOM経由は遅いのがネックだね
129デフォルトの名無しさん:2007/11/24(土) 23:50:50
それください
130デフォルトの名無しさん:2007/11/25(日) 00:14:15
ネット上にファイルが存在するかどうかを調べる為には
System.Net.WebClientクラスのDownloadFileメソッド等で
例外処理をする以外の方法はありませんか?
131デフォルトの名無しさん:2007/11/25(日) 00:15:03
リストビューの詳細表示でアイコン表示しないときでも、1行当たりの高さを広げて
間隔よく表示したいのですけれども、方法ありますか?
132デフォルトの名無しさん:2007/11/25(日) 00:21:24
>>130
普通にGETかHEAD投げてステータスコード見ろよ
133デフォルトの名無しさん:2007/11/25(日) 00:33:43
>>126
webBrowserコントロールに読み込んで
webBrowser1.DocumentTitleでOKっぽいよ
134122:2007/11/25(日) 01:16:09
>>125
ありがとうございます。

VBScriptを直に使えるみたいですね。
完成したxlsファイルにはマクロを残したくないので、プログラム中でマクロを除去しようと考えていましたが、
WSHを使う方がスマートですね。
135デフォルトの名無しさん:2007/11/25(日) 13:03:13
テキストボックスとボタンを配置したForm2をShowDialog()で表示して、
Form2のボタンをクリックしたときFontDialogを表示します。
しかし、FontDialogを閉じたらForm2も一緒に閉じてしまいます。

狙いとしては、FontDialogで選択したフォントをForm2に配置してある
テキストボックスのFontプロパティに入れたいのです。

何か解決策はあるのでしょうか?
136デフォルトの名無しさん:2007/11/25(日) 13:03:35
>>132
HttpWebRequestクラスのGetResponseメソッドを使う
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpref/html/frlrfsystemnethttpstatuscodeclasstopic.asp
の方法ですか?
この方法では404のとき例外が発生するのですが,例外を発生させない方法はありませんか?
137デフォルトの名無しさん:2007/11/25(日) 13:25:00
>>135
寿命を永らえされる方法を考えよう。
138デフォルトの名無しさん:2007/11/25(日) 13:28:57
>>135
Form2
{
139135:2007/11/25(日) 14:47:07
Form2のボタンクリックのイベントハンドラで

FontDialog fd = new FontDialog();
if (fd.ShowDialog() == DialogResult.OK)
{}
this.DialogResult = DialogResult.None;

こんな感じでフォームが閉じないように出来たのですが、これで良いのでしょうか?
というか、わざわざ最後の行を書かないといけないのが釈然としません。
140デフォルトの名無しさん:2007/11/25(日) 14:59:29
釈然としないならボタンのDialogResultプロパティを疑えよJK
141デフォルトの名無しさん:2007/11/25(日) 15:00:57
what is "JK" ?
142デフォルトの名無しさん:2007/11/25(日) 15:40:35
>>140
ボタンのDialogResult?
イミワカランwwww
143135:2007/11/25(日) 15:46:14
>>140
なぜFontDialogのDialogResultがFom2のDialgResultになるのか
その動作と理由が全く分かりません・・・。
後学のためにももう少し一連の動作の説明をお願いします。
144デフォルトの名無しさん:2007/11/25(日) 15:56:33
>>143
>>140は寝言だから忘れていいと思う。

想像だけど、原因はたぶんForm2に存在するボタンが、デザイナで
Form2のAcceptButtonになってるんじゃないの?
145デフォルトの名無しさん:2007/11/25(日) 16:16:47
ButtonクラスにDialogResultというプロパティがあって、それをNone以外に設定していると、ボタンが押されたとき自動的にダイアログが閉じられる。
Form.AcceptButtonではそうはならない。
寝言とか言う前にMSDNライブラリくらい読んどけボケ
146デフォルトの名無しさん:2007/11/25(日) 16:25:27
ちょっと基本的な部分で悩んでおります。
環境は.NET Compact Framework 2.0上で以下

class From1 : Form
{
public Form1()

}
147デフォルトの名無しさん:2007/11/25(日) 16:28:49
>>145
>ButtonクラスにDialogResultというプロパティがあって、
そんなプロパティーないってw
148デフォルトの名無しさん:2007/11/25(日) 16:38:05
149デフォルトの名無しさん:2007/11/25(日) 17:27:14
>>148
それは分かったから、FontDialogのDialogResultとForm2のDialogResultとの因果関係は?
150デフォルトの名無しさん:2007/11/25(日) 17:30:50
Clickイベントが発生してから、DialogResultに従ったフォームを閉じる動作が行われる。
151デフォルトの名無しさん:2007/11/25(日) 17:50:21
>>150
Form2をShow()で呼べばFontDialogを閉じてもForm2は閉じないことを確認しました。
つまりはそういうことなんですね。
152デフォルトの名無しさん:2007/11/25(日) 19:34:00
変なの沸いてんな
153デフォルトの名無しさん:2007/11/25(日) 22:32:43
154デフォルトの名無しさん:2007/11/26(月) 00:20:12
やべーなこのレベルはww
155デフォルトの名無しさん:2007/11/26(月) 00:22:39
そのためのふらっと
相談室に来るレベルじゃないってこと
156デフォルトの名無しさん:2007/11/26(月) 14:50:16
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);
}
157デフォルトの名無しさん:2007/11/26(月) 15:07:51
ちょ待
158デフォルトの名無しさん:2007/11/26(月) 16:33:45
>>156
冗談だよね
159デフォルトの名無しさん:2007/11/26(月) 16:40:54
変数名や 48 より、 '0' のがわかりやすい。
160デフォルトの名無しさん:2007/11/26(月) 17:00:34
>>157-158
おかしな所があったら指摘してね。

>>159
なるほど、その発想は無かったわ。
161デフォルトの名無しさん:2007/11/26(月) 17:03:35
ParseやToStringやその類を使えと言ったらダメなんですか
162デフォルトの名無しさん:2007/11/26(月) 17:18:50
だめだろどう見ても。
163デフォルトの名無しさん:2007/11/26(月) 17:19:40
じゃないわ勘違いw
164デフォルトの名無しさん:2007/11/26(月) 17:54:44
Int32.Parse(c.ToString())
(char)n.ToString()

一旦stringのインスタンス作ってるのが気持ち悪いYO
165デフォルトの名無しさん:2007/11/26(月) 18:00:45
>>160
’A' とかの文字が入ったときはどうすんの?
166デフォルトの名無しさん:2007/11/26(月) 18:12:57
>値のチェックとかしてないけど。
167デフォルトの名無しさん:2007/11/26(月) 18:21:24
int.TryParseを使った方が例外処理がいらないから楽だろうな。
168デフォルトの名無しさん:2007/11/26(月) 20:20:06
>>156
それはcharからint、intからcharの変換とは言わない。
169デフォルトの名無しさん:2007/11/26(月) 20:32:29
範囲が正しいってわかってるならわざわざメソッド化しなくてもc - '0'でいいしねえ。
範囲チェックして例外投げるのを主な目的にするならメソッド化する意味もあるだろうけど。

あとToInt32やToCharみたいな名前を使うのは混乱するのでやめていただきたい。
170デフォルトの名無しさん:2007/11/26(月) 20:34:17
君には影響ないから心配いらないよ
171デフォルトの名無しさん:2007/11/26(月) 21:34:05
うるせー馬鹿
172デフォルトの名無しさん:2007/11/27(火) 06:31:54
Disposeとデストラクタのどっちに終了処理かけばええんすかね
173デフォルトの名無しさん:2007/11/27(火) 07:09:37
内容によるが、デストラクタに書くことはほとんどない
174デフォルトの名無しさん:2007/11/27(火) 07:22:09
むしろデストラクタ書くな
たぶん使い方間違ってるから
175デフォルトの名無しさん:2007/11/27(火) 11:11:18
ていうか、あれをデストラクタだと思ってはいけないような気がする。
176デフォルトの名無しさん:2007/11/27(火) 11:44:56
だな、ってかデストラクタって呼び方やめただろ、紛らわしいから。
177デフォルトの名無しさん:2007/11/27(火) 13:12:26
>>176
ファイナライザだな
178デフォルトの名無しさん:2007/11/27(火) 21:20:34
しかしフォームから呼んだフォントダイアログのダイアログリザルトの値が
フォームに送られてフォームが閉じるって仕様の意味が分からんな。
通常のウィンドウ操作じゃあり得ないし、何を思ってこういう仕様にしたのだろうか。
179デフォルトの名無しさん:2007/11/27(火) 21:32:17
それは勘違いを基にした情報だろう
180デフォルトの名無しさん:2007/11/27(火) 21:40:19
ファイナライザっていうとコナミのガンダムもどきゲームを思い出して
181デフォルトの名無しさん:2007/11/27(火) 21:56:34
>>178
意味分からんな。使い方間違ってんだろ
182デフォルトの名無しさん:2007/11/27(火) 22:01:57
おいおいwwwまだいたのかよResult君ww
183デフォルトの名無しさん:2007/11/27(火) 22:24:55
ためした。
普通のプログラムでは何の問題もない。

多分こうなってるだけ。
DialogResult = fontDialog1.ShowDialog();

みなおせ。
184デフォルトの名無しさん:2007/11/27(火) 22:28:16
ワロス
馬鹿ばっか
185デフォルトの名無しさん:2007/11/27(火) 22:31:02
エスパーの俺からすると結論は、
>>183のように子フォームのダイアログリザルトを
親フォームのダイアログリザルトに設定している
186183:2007/11/27(火) 22:41:16
エスパーの割にはたいしたことかいてないな…
憶測だけど
DialogResult = fontDialog1.ShowDialog();
は、
DialogResult dr = fontDialog1.ShowDialog();
あたりの書き間違いじゃないかな?

if(dr == DialogResult.OK)
{} else if(dr == DialogResult.…)

憶測の域を出ない。
187デフォルトの名無しさん:2007/11/27(火) 22:47:57
そんな立派なもんじゃなくてなんとなくそう書いただけじゃないか?
なんとなく書く奴って意外なほど多いぞ。
理解できないが。
188デフォルトの名無しさん:2007/11/28(水) 00:01:44
ただ悩むまでも無く、ソッコー気付くはずなんですが・・・
189デフォルトの名無しさん:2007/11/28(水) 00:07:39
まあ世の中色々な人がいる。
190デフォルトの名無しさん:2007/11/28(水) 01:28:08
普通はこう書かないか?
if(fontDialog1.ShowDialog() == DialogResult.OK){
//
}
191デフォルトの名無しさん:2007/11/28(水) 01:57:09
俺は switch 派だな
192デフォルトの名無しさん:2007/11/28(水) 02:00:45
列挙体の判定はswitchの方がシンプルになるからなー
193デフォルトの名無しさん:2007/11/28(水) 02:17:02
194デフォルトの名無しさん:2007/11/28(水) 05:15:03
Form2 f2 = new Form2();
f2.ShowDialog();

Form2で
if(DialogResult.OK == FontDialog.ShowDialog()){...}
で帰ってきたDialogResultがForm2に送られてForm2も閉じる
195デフォルトの名無しさん:2007/11/28(水) 05:15:34
>>194
何故じゃー
196デフォルトの名無しさん:2007/11/28(水) 05:42:22
もう、あきた
197デフォルトの名無しさん:2007/11/28(水) 09:24:31
ToolStripProgressBarってデフォルトだと鮮やかな緑なんですが、
プロパティとかで簡単に黄色とか赤に変更できたりしないのでしょうか?

カスタムコントロールから作らないと駄目ですか?
198デフォルトの名無しさん:2007/11/28(水) 13:20:44
ForeColor
199デフォルトの名無しさん:2007/11/28(水) 14:40:14
ForeColorじゃ_
200デフォルトの名無しさん:2007/11/28(水) 15:08:34
プログレス程度なら自分で作れるだろ?
201デフォルトの名無しさん:2007/11/28(水) 15:26:02
Vistaのビジュアルに似せて作るのは少し面倒じゃね?
なんかグラデーション動いてるし角が丸っこいし
似せなくてもいいならいいけど
202デフォルトの名無しさん:2007/11/28(水) 15:37:29
Paintイベントにプロパティでswitchさせて描画させるだけだろ?
グラデーションやクリッピングなんてそんな難しくないだろ?
203デフォルトの名無しさん:2007/11/28(水) 15:42:03
頼んだ。
204デフォルトの名無しさん:2007/11/28(水) 15:42:07
Vistaのバーを見て言ってる?
つーかこれ、貼り付けてるときからてかりが動いてるなw
205デフォルトの名無しさん:2007/11/28(水) 16:15:13
上の端掴んでぐりぐりサイズ変更すると動きのスピードが変わるな
206デフォルトの名無しさん:2007/11/28(水) 17:39:51
>>201
Theme APIで描かせればそういう風になるんじゃないの?
やったことなくて憶測だけど。
207デフォルトの名無しさん:2007/11/28(水) 20:48:32
変数の値が変化した時に起こるイベントを作る事はできますか?
208デフォルトの名無しさん:2007/11/28(水) 20:51:17
Theme APIで描画=VisualStyleRendererで描画

つまり現在のビジュアルスタイルの色と形で描画されるんでしょ
質問者はその色を変えたいと。単純に色変えたいなら自前描画、
ただビジュアルスタイル風でかつ色を変えるのは不可能っしょ
209デフォルトの名無しさん:2007/11/28(水) 20:53:18
>>207
変数を直接外部からは(内部でも?)触らないようにしてプロパティでラップ
setterでイベントを起こせばそれらしくなるんじゃ
210デフォルトの名無しさん:2007/11/28(水) 21:16:03
Observer パターン?
211デフォルトの名無しさん:2007/11/28(水) 21:28:46
set {
 if (this.hoge != value) {
  this.hoge = value;
  this.OnHogeChanged(EventArgs.Empty);
 }
}
ただこれだけのこと
○○Changedはこんな感じで実装するのが普通
212デフォルトの名無しさん:2007/11/28(水) 21:40:23
>>194
いい加減つりはやめろ。
その前に見た瞬間に動かないとわかるコードを貼るのはやめろ。
213デフォルトの名無しさん:2007/11/28(水) 22:01:02
>>211
PropertyChangedをつかおう
214デフォルトの名無しさん:2007/11/29(木) 00:10:48
分かってなかった時代に(今も分かってないけど)書いたコードで、
ToolStripMenuItemを実行したときの引数として構造体を使ってしまった。
今クラスにしとけばよかったと激しく後悔してるんですが、
構造体って相互運用以外で使い道ってあるんですか?
215デフォルトの名無しさん:2007/11/29(木) 00:17:25
bool int double DateTime …
冗談だスマン
216デフォルトの名無しさん:2007/11/29(木) 00:25:16
構造体は参照を使いたくないときに使うだけ。
217デフォルトの名無しさん:2007/11/29(木) 01:40:18
DB(DataSet)が変更した時にスグに、DataGridViewに表示させたいんんだけど、無理かなあ
218207:2007/11/29(木) 07:12:18
勉強になりましたm(_ _)m
219デフォルトの名無しさん:2007/11/29(木) 11:43:35
テキストファイルを行単位で読み込んでいくときに、先頭行から全て読むなら
以下の感じになると思うのですが、途中の行から最後まで読みたい場合には、
どうしたら良いのでしょうか?
srを途中まで進めてからwhileループに入れば良いような気がしますが、
StreamReaderを任意の希望の位置まで進めるメソッドってあるのでしょうか?

StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("UTF-8"));
string line;
while ((line = sr.ReadLine()) != null) {
220デフォルトの名無しさん:2007/11/29(木) 11:51:07
Stream.PositionをいじってからStreamReader作ればいいが、
[n行目以降]ならStreamReaderで読み捨て
221デフォルトの名無しさん:2007/11/29(木) 11:54:56
>>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);
223デフォルトの名無しさん:2007/11/29(木) 18:09:48
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形式で
保存する方法をご存知の方、よろしくお願いします。
226デフォルトの名無しさん:2007/11/29(木) 20:24:38
>>225
Bitmapオブジェクトを24bitRGBで作ってからSaveで24bitにならんかな?
227デフォルトの名無しさん:2007/11/29(木) 22:11:06
P/Invokeに関してちょっと自信がないので確認させてください。

関数のアンマネージシグネチャがvoid UnmanagedFunction(STRUCT*)、
P/Invokeのシグネチャがvoid UnmanagedFunction(IntPtr)
だとして、
スタックに置かれた構造体に対して

STRUCT st;
UnmanagedFunction(new IntPtr(&st));

という風にポインタを直接渡すことは安全ですよね?
228デフォルトの名無しさん:2007/11/29(木) 22:16:43
直接ではないのではないのかな?
229227:2007/11/29(木) 22:23:34
>>228
言葉足らずだったかも。
ここでいう直接っていうのは、HGlobalなどのアンマネージな領域に再確保することなく
マネージスタック上のアドレスを直接アンマネージ関数に渡す、という意味です。
230デフォルトの名無しさん:2007/11/29(木) 22:24:10
向こうで変なことしてなければ
231227:2007/11/29(木) 22:30:40
>>230
どうもありがとうございます。安心しました。
232デフォルトの名無しさん:2007/11/29(木) 22:55:52
>>226
できますた。ありがとう
233デフォルトの名無しさん:2007/11/29(木) 23:31:36
>>231
あっちが非同期な関数だと死ぬるよ?
普通にref STRUCTでマーシャラにおまかせしないのかい?
234227:2007/11/29(木) 23:49:49
>>233
refにしないのは場合によってNULLを渡す必要があるためです。
というか非同期だったらref渡しでもまずいことになるような?
235デフォルトの名無しさん:2007/11/29(木) 23:59:51
ちなみに、MSDN の「コピーと固定」を読んどくといいよ
236227:2007/11/30(金) 00:33:54
>>235
どうもありがとうございます。読んどきます。
237デフォルトの名無しさん:2007/11/30(金) 09:14:18
Listでジェネリックを使ってisExistsを実装するやり方がいまいちよく分かりません。

List<string> list;
//listに要素を入れる
list.Exists( delegate( string value ) { return list.IndexOf( value ) >= 0; } )

のように、IndexOfで引っかかるかどうかという判定にしているのですが、
意図した動作をしません。
おそらくみんなこう書くという、典型的な実装があるのではと思っているのですが、
ちょっと教えていただけませんでしょうか。
238デフォルトの名無しさん:2007/11/30(金) 09:21:44
意味が分からん。Containsを求めてるのか?
Existsは例えばList<string>内に「**で始まる文字列が存在するか」調べるとかそんなんだが。
ていうか実装?
239デフォルトの名無しさん:2007/11/30(金) 11:08:54
IndexOfで存在は確認できると思うけど?
240デフォルトの名無しさん:2007/11/30(金) 11:20:45
引数が string で 戻り値 bool の関数作って
bool b = aaa.Exists(new System.Predicate<string>(function1));

こんな感じでいいみたいだぞ
241デフォルトの名無しさん:2007/11/30(金) 11:57:36
listの要素のひとつひとつがそのlistに含まれるかどうかをテストしてるわけで
なかなか哲学的だ。
242デフォルトの名無しさん:2007/11/30(金) 12:15:45
>>240
デリゲートの暗黙のインスタンス使ったほうが
コンパイラが良きにはからってくれて効率良かったりする
243デフォルトの名無しさん:2007/11/30(金) 12:59:59
>>242
え、例えばどんなとき?
暗黙だろうが明示だろうが生成される型は同じだから変わらない気がするけど。

もしかして匿名デリゲートのことを言ってるのかな?
それにしてもどういう風に最適化しうるのか気になる。
244デフォルトの名無しさん:2007/11/30(金) 13:04:37
>>242
効率ってのは実行効率?コーディングの効率?
245デフォルトの名無しさん:2007/11/30(金) 13:19:17
型推論するだけじゃなくてILも変わるの?
246デフォルトの名無しさん:2007/11/30(金) 13:42:12
namespaceの効果とか機能がよくわからないのですが
ソースを大きく括って見やすくするためと思っていいですか?
247デフォルトの名無しさん:2007/11/30(金) 13:51:43
>>246
同じ名前の宣言を複数実装できるからやないん?
ポリモーフィズムの延長線かもしれんけど
248デフォルトの名無しさん:2007/11/30(金) 14:04:54
>>246
例えば、
System.Drawing.Image と
System.Web.UI.WebControls.Image を
区別できるようにするため。
249242:2007/11/30(金) 17:06:47
すまん>>242は記憶違いだった
匿名メソッドの場合はキャッシュされるんだけどそれとごっちゃになってた
250デフォルトの名無しさん:2007/12/01(土) 10:12:50
>>238
わあああ
Containsがあるううう
251デフォルトの名無しさん:2007/12/01(土) 10:15:02
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄

252デフォルトの名無しさん:2007/12/01(土) 14:19:03
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 }

のような値が取得されてしまいます。
これは何が悪く、どのように書くのが正しいんでしょうか。
253デフォルトの名無しさん:2007/12/01(土) 14:43:13
値を取得するのだから、そのものズバリValueプロパティを使う。
ToString()は値を取得するためのメソッドじゃないし、そういう形式の文字列を返すとドキュメントにも明記されてるだろ。
254デフォルトの名無しさん:2007/12/01(土) 14:49:15
あ、そうかValueか
すいませんアホでした
255デフォルトの名無しさん:2007/12/01(土) 15:45:29
DockStyle.Rightで複数のボタンを右詰めに表示しているのですが、
これらのボタン間の空白を設定するにはどうすればよいでしょうか?
MSDNを読むとMarginプロパティがそれらしいと思ったんですが、どうも影響しないようです。
256デフォルトの名無しさん:2007/12/01(土) 16:12:37
>>255
TableLayoutPanel使うか、

Panel に Button いれて
Panel の Padding を設定して
Panel の Dock を Right
Buttonの Dock は Fill
257デフォルトの名無しさん:2007/12/01(土) 17:18:46
>>256
ありがとうございます。

んーどっちもなんだか微妙ですね。
大したロジックでもないので手動でレイアウトすることにします。
258デフォルトの名無しさん:2007/12/01(土) 17:40:39
ちょっと教えてください。
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 );
動的に発生するデータを追加して行きたいのですが、どの様に実装すべ
きでしょうか?
259デフォルトの名無しさん:2007/12/01(土) 17:46:36
http://sonic64.com/2006-05-03.html
これを参考に、ほぼ同じ作りで動画を再生しようとしています。
再生する動画はファイルパスをリストで持っておき、停止イベントから
PlayVideoClip()を呼び出して数珠つなぎに再生します。
こちらの例とは異なり、フルスクリーンで再生します。

で、困っていることなんですが、音量を調整+ミュートにできるようにしたいと思い、
とりあえずミュートを実装しようとしたところ、
videoClip.Audio.Volume = 0; // Video videoClip
としても音量が変わらず、さらに再生が終わって停止した時に
停止イベントが呼ばれなくなってしまいました。
正しく音量調整するにはどうすればいいのでしょうか。
260デフォルトの名無しさん:2007/12/01(土) 17:49:38
>>259に追記です。
ミュート自体は
videoClip.Audio.Volume = -10000;
とすることで実装できました。0は最大音量らしいです。
停止イベントが呼ばれず連続再生できなくなる件について、アドバイスをいただけると助かります。
261デフォルトの名無しさん:2007/12/01(土) 20:11:44
>>258
何言ってんのかわからない。
262デフォルトの名無しさん:2007/12/01(土) 20:53:48
>>260
ほぼ同じ作りったってコードみなきゃ話にならない
263デフォルトの名無しさん:2007/12/01(土) 21:24:30
>>258
なにがしたいのかよくわからんけど
そのサンプルは、こうしたらこんな風に状態が変わるよっていうだけのことで大した意味は無いだろ
LinkedListが自動的にリンクリストを作ってくれるから
余計なこと考えずに素直に使えばいい
264263:2007/12/01(土) 21:30:01
誤解を招く書き方だったかも
そのサンプル通りに使えば自動的にリンクリストが作られる
要素をリンクしていくのはLinkedListの仕事だから余計なこと考えなくていい
265デフォルトの名無しさん:2007/12/02(日) 00:28:31
>>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回目を外見から見た時に
同じ操作でリンクさせて行くようなクラスを作りたいんですが、その
作り方が分からないのです。
266デフォルトの名無しさん:2007/12/02(日) 00:37:08
Facadeデザインパターンを実装すればいいじゃん。
267デフォルトの名無しさん:2007/12/02(日) 00:49:23
>>258
LinkedList<T>はノード全体を管理しているのだから、
そのイメージのような空のノードなんて作る必要はなく、
LinkedList<T>のインスタンスに直接AddLastすればいいぞ。

そもそもLinkedListNodeなんて要素を追加するときにいちいち作るもんじゃないと思う。
268デフォルトの名無しさん:2007/12/02(日) 01:14:00
>>267
今MSDNでLinkedListとLinkedListNodeをもう一度見てた所ですが、
ちょっと頭混乱して来ました…_| ̄|○

なんか見てると、264氏や267氏の言われるようにLinkedListに直接
突っ込んで行けば良いのは分かってきましたが、LinkedListNodeと
LinkedListとの関係が分からなくなってしまいました。

> そもそもLinkedListNodeなんて要素を追加するときにいちいち作るもんじゃないと思う。
私の言いたいのも正にそこでして、自クラスのコンストラクターで空
のノードを用意出来れば良いと思ってたので、
LinkedListNode<String> lln = new LinkedListNode<String>();
としたかった訳ですが、これだとコンパイルエラーとなります。

リストにデータを入れて行く場合は良いのですが、リストからデータ
を読む場合や消す場合、LinkedListNodeのPrev/Nextが必要になる
と思うのですが、その場合どの様にすれば良いでしょうか?
269デフォルトの名無しさん:2007/12/02(日) 02:07:05
>>268
LinkedListからLinkedListNodeを取り出したければ、
LinkedListのFirst/Lastプロパティ。ほかFind/FindLastメソッドも。
こっちからLinkedListNodeを作る必要はない。

LinkedListの要素をなめたいだけならforeachにも突っ込める。
270デフォルトの名無しさん:2007/12/02(日) 06:57:57
クラスってもんを勉強しなさい。
そもそも内部構造の詳細を意識しなくても利用できる、
内部構造の違いにかかわらず操作できる、
ようにするためにコレクションのクラスがあるんだから。

LinkedListNodeは構造を意識した直接的な操作も
サポートするために使えるようになってるだけで
コレクションを表すのはあくまでLinkedListの方、使うのも普通はこっち。
271デフォルトの名無しさん:2007/12/02(日) 14:09:05
初期化は
LinkedListNode<string> lln = new LinkedListNode<string>(null);
としておくか、アイテムなければ
= new LinkedListNode<string>(null);
するかでいいんじゃね?
272デフォルトの名無しさん:2007/12/02(日) 14:09:56
訂正

としておくか、アイテムがなければ
= new LinkedListNode<string>(1つ目のアイテム);
するかでいいんじゃね?
273デフォルトの名無しさん:2007/12/02(日) 14:51:04
いや別にLinkedListNode作る必要ないから
LinkedList<string> ll = new LinkedList();
だけでおk
274デフォルトの名無しさん:2007/12/02(日) 17:40:13
ご解答戴いた皆さんありがとうございました。やっと理解出来ました。
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等の検索エンジンに検索値を入力し検索ボタンを
自動で押下して検索データを取得する。」

という方法が分かりません。
何か参考になるサイト等ごございましたらお教え願います。

276デフォルトの名無しさん:2007/12/02(日) 18:13:19
277たろう:2007/12/02(日) 19:13:57
>>276
ありがとうございます。

因みに
 "http://www.google.co.jp/search?q=@"
といったWEBページのボタンを押した時にWEBサーバに送られる情報
はどの様にして調べているのでしょうか?
何か参考になるWEBサイトをご存知でしょうか?

例えば、Googleについては上記の方法で行ける事は分かったのですが
Yahoo / MSN Serch等も時間に余裕が出来たらチャレンジしてみたいと
思っています。
278デフォルトの名無しさん:2007/12/02(日) 20:37:23
実際に検索してアドレス見ればわかるよw
279デフォルトの名無しさん:2007/12/02(日) 20:46:41
がんばれたろう

とりあえず文字列はUrlEncodeしなきゃだめよ
280たろう:2007/12/02(日) 21:04:40
>>279
ありがとたろう
281デフォルトの名無しさん:2007/12/02(日) 21:32:55
ちゃんと考えてURL円コードしないと駄目よ。
282デフォルトの名無しさん:2007/12/02(日) 21:57:36
現在、2Gくらいの大きなファイルの、
バイナリをあれこれ弄って一つのファイルに書き出そうとしています。
出力時には元のファイルを100KBずつ読み込んで、FileStreamとBinaryWriter を使って、
順次書き出ししようと考えているのですが、
BinaryWriter をCloseしないとファイルに何も書いてくれないという状況です。
どなたか、順次書き出しの手ほどき、よろしくお願いします。
283デフォルトの名無しさん:2007/12/02(日) 22:03:19
よくわからんがFlushすりゃいいんじゃないの?
284デフォルトの名無しさん:2007/12/02(日) 22:05:21
Flushのことか?
285デフォルトの名無しさん:2007/12/02(日) 22:19:54
質問です
埋め込まれたリソースとして動画ファイル(.aviファイル)を埋め込んだのですが、このファイルを再生するにはどうしたらよいのでしょうか?
.wavファイルや.jpgなどはGetManifestResourceStreamでストリームを取得した後、コンストラクタに入れてやれば再生できたのですが
動画クラスって見つからなかったので、どうやって再生したらよいのでしょうか?
MediaPlayerやDirectShowはどうやらファイル名を指定して再生するようで今回のようにストリームから再生することができませんでした。
286デフォルトの名無しさん:2007/12/03(月) 08:00:19
最近thisを記述しなくなったのですが
つけなければアクセスに時間がかかるとか何か不都合がありますか?
287デフォルトの名無しさん:2007/12/03(月) 08:12:19
無いけど付けた方が良い。
288デフォルトの名無しさん:2007/12/03(月) 08:42:46
>>287
ありがとう!早速直します!
289デフォルトの名無しさん:2007/12/03(月) 10:46:56
>>287
その理由を簡単にでも教えてください
290デフォルトの名無しさん:2007/12/03(月) 11:05:13
無いからつけなくてもいい
291デフォルトの名無しさん:2007/12/03(月) 11:05:44
気分
292デフォルトの名無しさん:2007/12/03(月) 11:07:22
どっちがいいなんて正解はない。
状況も聞かずに無条件につけるべきなんていう奴は知らない。
293デフォルトの名無しさん:2007/12/03(月) 11:10:19
拡張メソッドはthisつけないと呼び出せない
拡張メソッドと分けて見やすくする目的だとthisはつけないほうがいい
294デフォルトの名無しさん:2007/12/03(月) 12:11:12
this.を付けないならインスタンスメンバにはプレフィックスを付けることにしたほうがいいと思う
295デフォルトの名無しさん:2007/12/03(月) 12:47:46
m_とか? きめえ
プレフィックスはインテリセンスの利きを悪くするし可読性も落ちるだろ
296デフォルトの名無しさん:2007/12/03(月) 13:07:19
_だろ。
IronPythonのコードがそうなってる。
297デフォルトの名無しさん:2007/12/03(月) 13:21:21
MSの中でも_が多いみたいだよ
C++な人が多いからとか、VB.NETではつけないとプロパティ名と被りやすいから
それに合わせてるとかきっとそういうことだろうけど
298デフォルトの名無しさん:2007/12/03(月) 13:24:16
C#の話をしようぜ
どっちにしろインテリセンスの利きは悪くなる
可読性は_ならたいして落ちないだろうけど
C#の標準命名規則にはそんなんないのだ
299デフォルトの名無しさん:2007/12/03(月) 13:33:06
MS公式のガイドラインがあるのはアセンブリ外から見える名前についてだけだよ
300デフォルトの名無しさん:2007/12/03(月) 13:37:07
とりあえずprivateフィールドは小文字で始めますって書いてなかったか
301デフォルトの名無しさん:2007/12/03(月) 13:45:43
インテリセンスの危機が悪いってのはどういうこと?
302デフォルトの名無しさん:2007/12/03(月) 13:48:32
プレフィックスがあると一文字入力しても全然絞れない
303デフォルトの名無しさん:2007/12/03(月) 13:48:45
>>300
公式には無いよ
「C#コーディング標準」ではプリフィックス付けてもいいとされてるし、
大文字小文字を区別した名前を付けるなとあるから、それを守るんであれば
何か付けないとプロパティと被る
304デフォルトの名無しさん:2007/12/03(月) 14:05:51
あるwebサイトのデータを数秒間隔で取得してフォームに表示したいのですが
sleepで数秒寝かせて無限ループで取得という方法でいいんでしょうか?
305デフォルトの名無しさん:2007/12/03(月) 14:10:19
一定だと怪しまれるからランダムを入れた方がいいかもね
306デフォルトの名無しさん:2007/12/03(月) 14:11:52
>>305
でもその方法だとなぜか重すぎてキャンセルとか受け付けてくれないんですよ
307デフォルトの名無しさん:2007/12/03(月) 14:21:14
>>306
どうせ0秒から3秒くらいのランダムとかして平均1.5秒でアクセスしてるんだろう。
308デフォルトの名無しさん:2007/12/03(月) 14:39:13
つーかメインのスレッドでスリープしてるんだろうw
309デフォルトの名無しさん:2007/12/03(月) 14:47:29
>>308
mainのなかでwhile使って無限ループさせてるんでそうだと思います
guiのプログラミングって何が何だかわからない
310デフォルトの名無しさん:2007/12/03(月) 14:48:47
guiはメインが全部終了しないと動き出さない
311デフォルトの名無しさん:2007/12/03(月) 15:12:18
ジェネレートってどうゆう意味ですか?

教えてくださいお願いします。
312デフォルトの名無しさん:2007/12/03(月) 15:39:33
イタリア風のアイスだよ
313デフォルトの名無しさん:2007/12/03(月) 15:51:42
>>312

それはジェラート。
314デフォルトの名無しさん:2007/12/03(月) 16:19:29
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
315デフォルトの名無しさん:2007/12/03(月) 16:25:33
\r\n→\\r\\n\r\n
316デフォルトの名無しさん:2007/12/03(月) 19:24:06
>>309
夢幻ループ化。

処理をWindowsに返さないといけないんです。
Windowsから仕事しロッテ言われてから動けばいいんです。
自分から動きたい場合は、そのタイミングで呼び出してもらえるように約束を取り付けておけばいいんです。
317デフォルトの名無しさん:2007/12/03(月) 21:27:09
>>309
GUI関係ないだろ・・・
Timer使え
318デフォルトの名無しさん:2007/12/03(月) 21:49:01
すいません質問です。
名前空間は、団体名. 技術名. 分野と記述するのが推奨だと始めて知ったのですが、
普通はこの形式で名前空間定義をしているのでしょうか?
319デフォルトの名無しさん:2007/12/03(月) 21:53:09
そうです。
320デフォルトの名無しさん:2007/12/03(月) 21:59:43
そうでもないよ。
321デフォルトの名無しさん:2007/12/03(月) 22:10:15
楽しいか?
しかし、どこのスレも下らん馴れ合いで嬉しくなっちゃう単細胞な馬鹿が多いな。
322デフォルトの名無しさん:2007/12/03(月) 22:19:57
アンマネージdllはdllimportで呼べるそうですが、これを使えばいちおう理論的には全てのdllを呼べる、というわけでもないんでしょうか?
ググるといろんなサイトや掲示板で、Cなどで作ったdllのimportに苦労してる人がけっこう見つかります。
でも、アドバイスしてる人も“難しい”とは言いますが“不可能”と言ってる人は見かけません。

理論的に不可能ではないが、非常に難しい場合もある、ということでしょうか?
323デフォルトの名無しさん:2007/12/03(月) 22:36:55
>>322
Cのdllなら基本的に難しいことはないと思うが・・・。
C++のクラスライブラリをインポートするのは不可能。
324322:2007/12/04(火) 01:13:57
>>323
引数が構造体だったりすると大変にならないですか?
実は以前、他所様のCで書かれたdllを使おうと試みたんですが、
引数の構造体の中身が分からなくて断念したことがあります・・・
私の能力が至らないだけで、本当はできるんでしょうか?

>C++のクラスライブラリをインポートするのは不可能。
え、そうなんですか?すいません、どうして不可能なのか簡単に教えて頂けないでしょうか?
325デフォルトの名無しさん:2007/12/04(火) 01:24:16
C#のここで質問していいか迷うけど
C#でプログラミングしてるからここに。

TcpClient使ってネットワークストリームから出力すると
レスポンスヘッダと内容自体がいっしょくたになるけど
これをレスポンスヘッダと内容を効率よく分解する方法ってない?
TcpClient以外を使うっていうのは無しで。
326デフォルトの名無しさん:2007/12/04(火) 01:29:44
>>324
C++のABIは標準化されてないから
327デフォルトの名無しさん:2007/12/04(火) 02:19:00
>>324
構造体なんて定義すればいいだけだよ
C同士だって構造体の中身がわからなければ何もできないでしょ
328322:2007/12/04(火) 02:51:26
>>326
アンマネージなC++クラスライブラリだと駄目ってことでしょうか?
やるとしたら、マネージなのに作り直すか、クラスを使わないようにする、という認識で合ってますか
329デフォルトの名無しさん:2007/12/04(火) 02:55:37
あってる
もちろんクラスをマネージコードとやりとりしなければいいのであって、DLL内だけで使用する分には問題ないよ。
330デフォルトの名無しさん:2007/12/04(火) 03:14:46
C++/CLIでラップすればいいんじゃねえの
331デフォルトの名無しさん:2007/12/04(火) 04:49:49
C++クラスのDLLをC#から直接呼び出すのは、
DllImportのCallingConvention.ThisCallを使えばできるが、
ファクトリや開放用のメソッドが必要になったりで
正直おすすめしない。
332322: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コントロールを表示した際にフォーム内からはみ出た部分が表示され
ないのですが、回避するにはどうしたらよいのでしょうか?
334デフォルトの名無しさん:2007/12/04(火) 11:39:04
別のフォームに作れば
335デフォルトの名無しさん:2007/12/04(火) 12:18:46
フォームにラベルを複数置いたのですが
これらを配列として扱うには下記の方法でよろしいでしょうか?
label1〜label4がフォームに置いたラベルです

Label[] lblArr = new Label[4];
lblArr[0] = label1;
lblArr[1] = label2;
lblArr[2] = label3;
lblArr[3] = label4;

考え方がよくなかったりしたら教えてください
336デフォルトの名無しさん:2007/12/04(火) 12:33:27
>>333
あらかじめ貼っておくか、追加するときに場所と大きさ計算してフォームのサイズを調整したら

>>335
いいよ
Label[] lblArr = new Label[]{ label1, label2, label3, label4 };
でもいい


337335:2007/12/04(火) 13:15:21
>>336
数が少ないなら宣言時に入れたほうがすっきりするんですね
そうするようにします。

ありがとうございました。
338デフォルトの名無しさん:2007/12/04(火) 13:34:32
for(int i=0;i<4;i++){lblArr[i]=(Label)this.Controls["label"+i];}
一応こういうのもある
>>335-336の方が好ましいのでできればやめた方がいいけど
339デフォルトの名無しさん:2007/12/04(火) 15:05:32
コンソールアプリなのですが、キーボードステータスを読み取るにはどうすればよいのでしょうか。
340339:2007/12/04(火) 15:10:04
(続き)
タイマーイベントのハンドラの中で、現在押下されているキーをすべて取得するといった内容で考えております。
341デフォルトの名無しさん:2007/12/04(火) 15:13:29
いつもお世話になっております。ご相談させてください。

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

342デフォルトの名無しさん:2007/12/04(火) 15:19:06
>>341
1パケットに複数まとまってるんでない?
343デフォルトの名無しさん:2007/12/04(火) 15:20:32
初歩的な質問ですみません。
C#の文法規則の意味について教えてください。

C++は理解しており、メンバーに対するアクセス指定は理解できるのですが
クラスに対するアクセス指定の意味がわかりません。

名前空間内でクラス宣言を行うときにクラス自体にpublicかinternalの
アクセス指定ができますが、これらは何を意味するのでしょうか?

理解していること
・名前空間内で指定可能なアクセス指定子はpublicかinternalのみ
・省略するとinternalとなる

344デフォルトの名無しさん:2007/12/04(火) 15:26:07
>>340
GetAsyncKeyState()等のAPI 使うとかでどうか
345デフォルトの名無しさん:2007/12/04(火) 15:29:00
346339: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;
}

347339: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 と宣言された型には、同じアセンブリに所属する型だけが
アクセスできます。』

とあるのですが、ここでいうアセンブリとはソースファイルという理解
で正しいでしょうか?
349348:2007/12/04(火) 16:55:18
アセンブリとはDLLやEXEのことでした。

ということは、internal指定のクラスの場合は同一DLL, EXE
からしか参照できなくて、public指定のクラスの場合は
別のDLLやEXEから参照できるということですね。
350デフォルトの名無しさん:2007/12/04(火) 16:57:51
おおかた合ってる。
351デフォルトの名無しさん:2007/12/04(火) 16:59:18
>>346
Keysつかえよ。
352デフォルトの名無しさん:2007/12/04(火) 22:38:31
P/Invokeでは[DllImport("kernel32.dll")]などと指定しますが、
kernel32.dllやuser32.dllなどといったものは64ビットWindowsにも存在するのでしょうか?
またこれらに64ビットポインタを渡しても問題ないのでしょうか?

手元に64ビット環境がないので、よろしくお願いします。
353デフォルトの名無しさん:2007/12/04(火) 22:46:18
存在する
64bitのAPIも同名DLL
WoW64で動くかどうかでどっちを使うか自動判断
明示したけりゃ/platform
354デフォルトの名無しさん:2007/12/04(火) 23:03:46
>>353
どうもありがとうございます。
特別な理由がなければ何も考えずに書けばいいんですね。

もう一つ質問があるのですが、32用と64ビット用の二つのdllがある場合、
P/Invokeで実行環境に適したdllを読み込むことはできますか?
355デフォルトの名無しさん:2007/12/04(火) 23:22:37
>>354
>>353のレスちゃんと読んでやれよ・・・
356352:2007/12/04(火) 23:38:07
>>355
どういうことです?
WOW64上で動作させて32ビット用を読み込めということですか?

ちなみにこの場合のdllはシステムにあるものではなく、自作のdllという意味です。
357デフォルトの名無しさん:2007/12/04(火) 23:40:21
IntPtr.Sizeみて分岐
358デフォルトの名無しさん:2007/12/04(火) 23:46:04
自動判断って書いてあるように見えるけど?
359デフォルトの名無しさん:2007/12/04(火) 23:49:07
system32/syswow64に入らないのなら自動呼び分けはないんじゃないかな
シングルトンで実装させれば使う側は気にしなくてすむようになるけど
DLL検索パスを利用してうまいことやればdll名だけ違うDllImportとか書かなくてもなんとかなるかな
360デフォルトの名無しさん:2007/12/04(火) 23:53:10
ま、正しいのはやはり/platformでターゲットを明示すること
361352:2007/12/04(火) 23:56:03
>>357
最悪そうせざるをえないですね。

>>359
実行時に検索パスを設定するorアーキテクチャによって変更するってできるんですかね?
できたらかなりすっきり書けそうですが。

>>360
そうしたら実行環境が限られてしまうんじゃないですか?
362デフォルトの名無しさん:2007/12/05(水) 00:01:51
ラッパかぶせてその中で分岐しとけばごちゃごちゃしたりはしないだろう
363デフォルトの名無しさん:2007/12/05(水) 00:02:26
IntPtr.Size
PATH

> そうしたら実行環境が限られてしまうんじゃないですか?
限られるんじゃなくて限らせるの。
x86とx64両方つくりゃいいだけ。
364デフォルトの名無しさん:2007/12/05(水) 00:08:05
>>363
それはちょっと保守の手間が増えるので避けたいです。

>>362
そうですね。とりあえずその方法でいきたいと思います。
どうもありがとうございました。
365352:2007/12/05(水) 00:08:48
名前忘れました。>364=>352
366デフォルトの名無しさん:2007/12/05(水) 00:30:28
色々なクラスで使うメソッドを、ユーティリティクラスを作ってstaticメソッドで呼び出すのと
継承を使って派生させて使うのとどっちがいいのでしょうか?

今までベースクラスに汎用メソッドを書いていたのですが、
Xmlの操作とか、クラスの本質に関係のない部分はユーティリティクラスのほうがいいのかな
と最近思うようになってきました。

HttpUtility.UrlEncodeみたいに、.NETでもユーティリティクラスの存在そのもの
を禁止されているわけではないですよね・・・
367デフォルトの名無しさん:2007/12/05(水) 00:31:10
ユーティリティクラスあるだろ
Mathとか
368デフォルトの名無しさん:2007/12/05(水) 00:41:31
どっちがいいといってもことそれぞれとしか
369デフォルトの名無しさん:2007/12/05(水) 00:45:57
まあユーティリティクラス作る方が標準的じゃないか
370デフォルトの名無しさん:2007/12/05(水) 01:11:47
GoogleMapsAPIを利用してて自分もこういうWebAPIというものを
作ってみたいと思いました。
WebAPIを作るにあたり必要なスキルは何でしょうか?
またWebAPIの開発の参考書などがあればご紹介ください。
WebAPIを利用するための参考書じゃなくて自分でWebAPIを開発する参考書です。
371デフォルトの名無しさん:2007/12/05(水) 01:27:34
>>367-369
レスありがとうございます。

staticメソッドを計算の代用とか気軽な目的で自体は
問題なさそうですね・・・。
372デフォルトの名無しさん:2007/12/05(水) 01:48:25
373デフォルトの名無しさん:2007/12/05(水) 09:13:16
継承でやる方が邪道だよ大抵は。
まあユーティリティと言ってるものの内容にもよるけど。
374デフォルトの名無しさん:2007/12/05(水) 12:14:48
Sin()やSqrt()がSystem.Doubleのインスタンスメンバだったりしたら煩わしいことこの上ないよな。
375285:2007/12/05(水) 12:48:53
>>285わかる方いませんか?
376デフォルトの名無しさん:2007/12/05(水) 12:59:05
ユーティリティクラスはクラス名短くしないと読むのが困難になりがち
377デフォルトの名無しさん:2007/12/05(水) 14:53:40
C#で始めてプログラミング始めたんですけどお勧めの書籍とかサイトってありますか?
378デフォルトの名無しさん:2007/12/05(水) 16:05:40
ふらっとじゃない方のC#スレの>>4
379デフォルトの名無しさん:2007/12/05(水) 17:04:15
@ITのC#入門はガチですとも
380デフォルトの名無しさん:2007/12/05(水) 17:07:52
他の言語の経験があるなら、ホントに@ITのC#入門読むだけですむよな。
381デフォルトの名無しさん:2007/12/05(水) 17:13:42
オラはオライリーのプログラミングC#で覚えた。
ガイジン特有の変な例えのせいでデリゲートが全然理解できなかったが。
382デフォルトの名無しさん:2007/12/05(水) 17:27:25
うちは標準C#入門っていう、いかにもな本だった。
なかなか読みやすかったのを覚えてる。
383デフォルトの名無しさん:2007/12/05(水) 17:31:37
LINQのおかげでdelegateの意味は全然変わっちゃったしな
384335:2007/12/05(水) 18:07:26
正直デリゲートはわかってないけど
やばいかな
385335:2007/12/05(水) 18:08:05
@IT逝ってきます
386デフォルトの名無しさん:2007/12/05(水) 18:08:57
LINQ使えばわかる
387デフォルトの名無しさん:2007/12/05(水) 18:32:16
イベント使えば分かる。


いや分からんかも…
388デフォルトの名無しさん:2007/12/05(水) 18:36:23
100レススルーされてる>>285がやや気の毒だがわからない
でも動画なんて埋め込みたいとは思わないな俺は
389デフォルトの名無しさん:2007/12/05(水) 18:36:33
イベントはdelegate分かってなくてもIDEが勝手に書いてくれるからな
390デフォルトの名無しさん:2007/12/05(水) 18:44:00
>>285か。
メモリに読めば何とかなるのなら、APIでリソースから直接読むのは可能。
391デフォルトの名無しさん:2007/12/05(水) 20:23:14
>>390
メモリにあるものをどうやって再生するかって話じゃないの?
テンポラリフォルダにでも展開しちゃえばいいんじゃないかと思うが
392デフォルトの名無しさん:2007/12/05(水) 22:24:32
>>379-380
川俣氏のやつですよね
以前2chで叩かれてるところに本人降臨してたスレがありましたが、中身はガチと思っていいんですかね?
393デフォルトの名無しさん:2007/12/05(水) 22:30:06
>>392
内容は悪くないというか、簡潔でいいと思うけど、
あれで習得できるのは「ミニマムリクワイアメント」に過ぎないね。
394デフォルトの名無しさん:2007/12/05(水) 22:32:37
話題になったのはVBネタの記事とかか
あの人どうも筆が走りすぎる感があるな
C#入門とかあの辺はよく書けてるんだけど
395デフォルトの名無しさん:2007/12/05(水) 22:38:30
>>394
俺が思うに、川俣の文体に反発する人間っていうのはたぶんあまり読書経験がないというか、
文芸的な文章を読まないタイプの人でしょ。

あれはああいう文体で、あんなものベタにとって反発するってどんだけオボコいんだよ、
と俺なんか思っちゃうけど。
396デフォルトの名無しさん:2007/12/05(水) 22:47:51
ライターなら多少走り気味なくらいがちょうどいいんじゃないの?
397デフォルトの名無しさん:2007/12/05(水) 22:48:39
叩きをするようなねらーによしあしなどわかってたまるか
398デフォルトの名無しさん:2007/12/05(水) 22:52:07
まあおまえらおちつけ
ここは初心者用質問スレだ
399デフォルトの名無しさん:2007/12/05(水) 22:52:11
なんかカワマタさんが来ましたよ
400デフォルトの名無しさん:2007/12/05(水) 22:53:08
>>395
>オボコい
久しぶりに見たよw
401デフォルトの名無しさん:2007/12/06(木) 00:33:01
asmxファイルで開発してる人いる?
402デフォルトの名無しさん:2007/12/06(木) 01:01:45
Xファイルなら
403デフォルトの名無しさん:2007/12/06(木) 02:34:50
あるプロトコルでチャットに接続し、ユーザは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サービスが無理ならどういう方法で通信するのがベターでしょうか。プロセス間通信とか?

妄想段階なので曖昧な点が多いのですが、アドバイスをいただければ幸いです。
よろしくお願いします。
404デフォルトの名無しさん:2007/12/06(木) 03:10:01
パスワードを保存するファイルに暗号化をかけたいな〜と思ったんですが、
その暗号化キーをどこに保存しようか悩んでいます。
Firefox のマスタパスワードみたいに毎回問い合わせるのは最終手段にしたいと思ってまして、
じゃあどこにどうやって保存しようかな……という話です。
405デフォルトの名無しさん:2007/12/06(木) 13:26:26
>>395なんじゃそりゃ?
まあ反発してたってのがどんなんかしらんから何とも言えんけど、
誤解を招きやすい文章だと思ったことは何回かある。
406デフォルトの名無しさん:2007/12/06(木) 13:36:09
保存先ならIsolatedStorageでもどう
407デフォルトの名無しさん:2007/12/06(木) 14:05:11
>>403
ASPスレで聞いたほうがよい
たぶんセッションで出来る
408デフォルトの名無しさん:2007/12/06(木) 14:48:03
VC#2005EEを使い始めたのですが、ツールバーに使うアイコンをWindows標準のもの(新規作成とか上書き保存とか)を使いたいのですが、Windowsフォルダとかから探してくるしかないんでしょうか?
また、そういうったアイコンは勝手に使ってもいいんでしょうか?
409デフォルトの名無しさん:2007/12/06(木) 15:00:29
VS2005ImageLibraryというのがあるんだけどExpressには付いてないみたいだね
http://i-keisuke.at.webry.info/200701/article_13.html
ライセンス的に大丈夫なのか知らないけどこういうのも可能みたい
410デフォルトの名無しさん:2007/12/06(木) 15:51:04
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();
}
}
412デフォルトの名無しさん:2007/12/06(木) 18:01:29
>>411
空文字なんじゃねーの?
Console.writeline(list[1] == string.Empty);
/*1*/ data[k] = Convert.ToInt32(list[1]);
でやってみれ
413デフォルトの名無しさん:2007/12/06(木) 18:21:52
listの要素数を確認せずに[1]にアクセスするなよ
414デフォルトの名無しさん:2007/12/06(木) 18:27:31
>エラーが発生してしまいます。
なんでエラーの内容を書かないかな。
list[1]がないか、Parseに失敗してるかのどちらかだろうけど。
415411:2007/12/06(木) 18:43:07
エラー内容は
オブジェクト参照がオブジェクト インスタンスに設定されていません。
というものです。

エラー発生時のlistの中身を確認してみると6番目までデータが
入っているので、どうやらparseに失敗しているようです。
416デフォルトの名無しさん:2007/12/06(木) 19:05:13
>>415
そりはもしかして public int[] data; のdataを初期化してないのでは?
417デフォルトの名無しさん:2007/12/06(木) 19:24:00
なんでこれでヌルポが出るんだ
配列の境界を越えてるとかなら分かるが
418デフォルトの名無しさん:2007/12/06(木) 19:24:35
A.Hoge(){};
B.Hoge(){};

using A;
using B;

public static void Main{
Hoge();
}

この場合どっらのHoge()が呼び出されんですか?
419デフォルトの名無しさん:2007/12/06(木) 19:27:01
コンパイルエラーになる
420デフォルトの名無しさん:2007/12/06(木) 19:27:40
わかりました。
421デフォルトの名無しさん:2007/12/06(木) 19:35:09
>>417
data == null
422デフォルトの名無しさん:2007/12/06(木) 19:37:05
>>421
それしかないな
423デフォルトの名無しさん:2007/12/06(木) 19:37:30
明らかに>>416が正解だろ。
ファイルの行数が決まってないから初期化できない、というならList<string>を使え。
424デフォルトの名無しさん:2007/12/06(木) 19:48:23
C#ってLinuxに移植されないの?
425デフォルトの名無しさん:2007/12/06(木) 19:49:28
MONO
Silverlight
426411:2007/12/06(木) 20:03:15
皆さんご助言ありがとうございました。
配列を初期化していないことが原因でした。
無事解決できて良かったです。
427デフォルトの名無しさん:2007/12/06(木) 21:15:55
>>409
遅くなりましたがありがとうございました。
EEを使ってる人は標準のアイコンすらないんですね;
428デフォルトの名無しさん:2007/12/06(木) 22:18:54
>>427
ToolStripやMenuStripなら「標準項目の挿入」でいくつかアイコンがつくね。
そいつをなんとか保存しといて使い回したら? ちっこいけど。
429デフォルトの名無しさん:2007/12/06(木) 23:16:30
これマジでつまらない質問なんですが
インスタンスが理解できません
だれかわかりやすく説明してください
430デフォルトの名無しさん:2007/12/06(木) 23:33:45
(どこかで)newしたもの
431デフォルトの名無しさん:2007/12/06(木) 23:35:19
使ってりゃ分かる
432デフォルトの名無しさん:2007/12/06(木) 23:49:37
定番の
クラス…社員
インスタンス…平社員の山本
みたいなのって余計混乱させるだけだと思う
433デフォルトの名無しさん:2007/12/06(木) 23:58:59
オブジェクト指向とか継承とかの説明って大嘘だしな
使ってりゃ分かる
434デフォルトの名無しさん:2007/12/07(金) 00:44:24
>>428
「標準項目の挿入」というのはどこにあるんですか??
435デフォルトの名無しさん:2007/12/07(金) 01:46:15
質問です。

半角英文で書かれたWord文書を読み込んでXMLに出力するプログラムをC#(VS2003)で作成しています。

問題なのは、Word文書中に半角の「μ(みゅー)」や「π(ぱい)」が存在する場合で、読み込んでstring変数に格納した時点で「(」のような文字に変わってしまいます。

化けずにうまく読み込む方法はありますでしょうか?

ちなみに、半角の「μ」や「π」は、Wordの「挿入−記号と特殊文字」 メニューから挿入したものです。

よろしくお願いします。
436デフォルトの名無しさん:2007/12/07(金) 01:55:51
>>434
ポトペタしたあと、そいつをクリックするとそいつの右上あたりに矢印がでて、
そいつクリックすると出るウィンドウの中。
437デフォルトの名無しさん:2007/12/07(金) 03:32:17
>>435
コンソール出力だけど普通に化けなかったよ?
なんか情報出てないんじゃない?
438デフォルトの名無しさん:2007/12/07(金) 05:22:03
>>436
わ!
ありがとうございます!!
439デフォルトの名無しさん:2007/12/07(金) 13:53:40
>>437
トレースで出力してみましたが、文字化けしています。
全角なら問題ないのですが...。
440デフォルトの名無しさん:2007/12/07(金) 13:55:36
>>439
どう化けるの?
実際に出力してるコードは16進でダンプしてみた?
表示のフォントはどれにしてるの?
441デフォルトの名無しさん:2007/12/07(金) 14:13:07
>>440
string変数の中身はセミコロンのような文字になっています。
フォントは、Wordはセンチュリーで、VSの出力ウィンドウのフォントもセンチュリーに変更したら、こちらは正しく表示されました。

442デフォルトの名無しさん:2007/12/07(金) 14:41:24
ListViewItemのTagに自作の構造体を入れてるんだけど、この構造体は
ListViewItemを削除した時点で破棄されるのですか?
443デフォルトの名無しさん:2007/12/07(金) 14:50:07
Delete時に破棄する、というコードを入れてないのなら破棄されない
444デフォルトの名無しさん:2007/12/07(金) 14:50:49
ってここC#だったすまん。
でも削除した時点、ではないかな。
445デフォルトの名無しさん:2007/12/07(金) 14:51:34
そのうちGCが回収してくれるので楽観的でもいいってことでしょうか?
446デフォルトの名無しさん:2007/12/07(金) 15:00:21
おまじないかもしれないが、明示的Disposeしたりnullをセットしたほうが無難なきがする
447デフォルトの名無しさん:2007/12/07(金) 15:02:19
>>445
その構造体が、アンマネージドリソースを確保していないが入りにはそれでOK。
448デフォルトの名無しさん:2007/12/07(金) 15:24:07
前から思ってたんですが、楽観的って言葉の定義がすごい曖昧な気がするであります。
マネージコードである限り、どんなに無茶苦茶なコード書いてもBSODみたいな
破壊は原理的に起きないんでしょうか?

本当にこの辺理解しようと思ったら.netをきちんと勉強しないと駄目ですよね
449デフォルトの名無しさん:2007/12/07(金) 15:30:27
マネージコードでもたとえばDllImportしてる関数を適当に呼んだら死ぬ。
450デフォルトの名無しさん:2007/12/07(金) 15:30:39
>>448
マネージドコードでかつ、マネージドリソースにしかアクセスしない限りは
BSOD 起こす前に OutOfMemoryException が起こる。

でも、結局、ライブラリ中とかでも Win32API を色々 PInvoke してて、
あんま楽観もできないかも。
まあ、多分、ドライバとかみたいに OS に深く食い込むものでもなければ
ブルースクリーンは拝めないと思う。
451448:2007/12/07(金) 15:45:45
やっぱりそうですよね
つまり、マネージな世界で閉じてる限り、何があろうともBSODのような被害は起こりえないってことですね
ある意味初心者が使うには打ってつけの言語ですね

ところで>>447さんの
>確保していないが入りにはそれでOK。

>確保していない限りにはそれでOK。
という意味でしょうか?
452デフォルトの名無しさん:2007/12/07(金) 16:15:20
構造体がアンマネージリソース確保しちゃダメだろ
453デフォルトの名無しさん:2007/12/07(金) 16:21:00
そんな事あんまねーし
454デフォルトの名無しさん:2007/12/07(金) 19:25:38
C#でErr.Numberのようなシステムの吐き出すエラーコードを知るにはどうしたらいいでしょう
catchの中でどうしても取りたいです

クラス名とかエラー文字列とかいらないです
455デフォルトの名無しさん:2007/12/07(金) 19:32:50
そんなものはない。
456デフォルトの名無しさん:2007/12/07(金) 19:38:24
エラーを番号で表すのが不便でしょうがないから
エラー通達の方法自体を変えたのに。
457デフォルトの名無しさん:2007/12/07(金) 19:39:12
C#のデストラクタって役に立つんですか?
458デフォルトの名無しさん:2007/12/07(金) 19:42:25
Dispose()の呼び忘れ防止とか……
459デフォルトの名無しさん:2007/12/07(金) 19:46:48
とかっていうかそれだけだな
460デフォルトの名無しさん:2007/12/07(金) 21:58:20
半角の「μ(みゅー)」や「π(ぱい)」ってあるんだね。
しらんかった。

つーかないだろ?
461デフォルトの名無しさん:2007/12/07(金) 22:05:00
Windows以外でC#使ってる人いるの?
やっぱC#の人はWinアプリ開発なのかな?
462デフォルトの名無しさん:2007/12/07(金) 22:06:01
うんにゃ
言語論争につかうだけ。
463デフォルトの名無しさん:2007/12/07(金) 22:10:15
いるよ
464デフォルトの名無しさん:2007/12/07(金) 22:10:58
万一Silverlightが流行ることがあれば…
465デフォルトの名無しさん:2007/12/07(金) 22:15:16
でもvista以降のOSが普及すれば一気に流行るんだろうね
LLなんて軟派な言語は要らないんだぜ?
466デフォルトの名無しさん:2007/12/07(金) 22:18:45
>>460
Symbol フォントでμとかπ出すためのコードじゃないか?
Symbol フォントのμ、πってそれぞれ m と p に対応してた気はするけど。
467デフォルトの名無しさん:2007/12/07(金) 23:02:39
配列のプロパティについて詳しく説明しているHPはありますか?
宣言の仕方と使い方の例を参照したいです。
468デフォルトの名無しさん:2007/12/07(金) 23:52:27
そりゃMSDN2
469デフォルトの名無しさん:2007/12/07(金) 23:55:34
.net frameworkのクラス階層が複雑すぎて疲れました…
c#のせいじゃないと分かってますが…
470デフォルトの名無しさん:2007/12/07(金) 23:58:47
そうなったら引退ですね
471デフォルトの名無しさん:2007/12/08(土) 00:06:57
あれが複雑てw
472デフォルトの名無しさん:2007/12/08(土) 00:27:53
Javaの方が酷い
473デフォルトの名無しさん:2007/12/08(土) 01:08:01
複雑なんじゃなくて量が多いだけ
一部のよく使うものだけ覚えておけばあとは必要に応じて調べればいい
474デフォルトの名無しさん:2007/12/08(土) 01:12:08
何の言語でもライブラリ覚えるのが一番大変だ
475デフォルトの名無しさん:2007/12/08(土) 01:19:52
.NETのクラスライブラリなんて無茶苦茶使いやすいじゃん
その昔MFCなるものがあって、最悪だったぞ。
476デフォルトの名無しさん:2007/12/08(土) 01:38:23
こいつ引退どころかプログラマになってすらいないだろうな
477デフォルトの名無しさん:2007/12/08(土) 01:39:23
なんか色々話聞きますよね・・・>MFCやSTL
これから入る初心者にとっては、昔に比べて相当恵まれた環境なんですかね、やっぱ?
478デフォルトの名無しさん:2007/12/08(土) 01:41:47
もう、恵まれてるなんてものじゃない。
10年も昔と比べたら、何十倍も何百倍も生産性高いんじゃなかろうか。
479デフォルトの名無しさん:2007/12/08(土) 02:42:06
IDEがタダなんて考えられんかったしなぁ・・・
480デフォルトの名無しさん:2007/12/08(土) 02:42:11
話ぶった切ってスマソ。質問です。

windows mobile6でファイルを同期させるプログラムをC#で書いているのですが、
ファイルの作成日や最終書き込み日時を変更させるには どうしたら良いでしょうか?
FileInfoやFileクラスだと、LastWriteTimeプロパティが読み取り専用で使えずハマってる現状です。

File.copy(string path)を使ってファイルをコピーすると、何故かファイルのミリ秒部分が
切り捨て、もしくは切り上げされているようで、書き込み日時が1秒ずれてしまうのを直したいのです。
481デフォルトの名無しさん:2007/12/08(土) 03:00:29
ExpressEditionみたいのをもっと早く出しておけば他のIDEへの流出は食い止められたのに
IDEの儲けなんて全体で見れば大したことないんでしょ?
482デフォルトの名無しさん:2007/12/08(土) 03:00:51
>>480
へ?File.SetLastWriteTimeは?
483480:2007/12/08(土) 03:09:28
GetLastWriteTime はwindows mobileでもサポートされてるんですが、
何故かSetLastWriteTimeの方はサポートされていないようなんです。
484デフォルトの名無しさん:2007/12/08(土) 09:19:44
>>480
http://www.opennetcf.com/FreeSoftware/SDF14/tabid/91/Default.aspx
ここのソース見てみたらIntPtrとかでドロドロやらないと駄目みたい。
485デフォルトの名無しさん:2007/12/08(土) 09:43:25
>>480
CreationTime/LastWriteTime/LastWriteTimeはCE系はRead Onlyやね。
違ってるかも知れんけど多分Compact Framework上からは無理臭い希ガス。
まずWin32APIで出来るか確認して出来るようならDllImportする位かな。

漏れも今CE5.0+CFMで開発やってるけど、結構良く使いそうなメソッドや
プロパティーが端折られてて困る事が多々(つд`)
Win32API自体がサブセットな実装だからしゃーないんだろうけど。
486485:2007/12/08(土) 09:46:11
>>484
こんなんあるのか。ちょと見て見よ。
質問主じゃないけど参考になりましたわ。
487デフォルトの名無しさん:2007/12/08(土) 12:16:38
そもそもミリ秒単位の情報って持てるの?
488デフォルトの名無しさん:2007/12/08(土) 14:01:28
持てるよ
489デフォルトの名無しさん:2007/12/08(土) 14:35:54
バイト配列AとBがあって、配列Aの中から配列Bを検索するにはどうしたらよいですか?
byte[] A = byte[0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07]
byte[] B = byte[0x03, 0x04, 0x05]
だとしたら、3を返してほしいのですが…
490デフォルトの名無しさん:2007/12/08(土) 15:04:39
A.Intersect(B).First()
491デフォルトの名無しさん:2007/12/08(土) 15:24:56
そんなんあったっけ?
っていうかそれ目的違うんじゃねーの?
普通に考えて。
492デフォルトの名無しさん:2007/12/08(土) 15:31:01
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でまわすとか。
493489:2007/12/08(土) 15:32:38
>>492
ありがとうございます。
早速試してみます。
494デフォルトの名無しさん:2007/12/08(土) 15:36:49
試すなよそんな方法w
495489:2007/12/08(土) 15:42:44
ダメでしたw
StringBuilderで1バイトずつ連結して、stringのIndexOf使うことにします。
496デフォルトの名無しさん:2007/12/08(土) 15:46:52
えー。素直に二重ループじゃだめなのか?
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;
}
497デフォルトの名無しさん:2007/12/08(土) 15:59:59
16進数文字列化して検索ってしたことならあるな、手抜きのために。
498489:2007/12/08(土) 16:00:36
>>496
二重ループのが簡単そうですね。
希望通りの結果が得られました。
ありがとうございました。
499デフォルトの名無しさん:2007/12/08(土) 16:02:25
>>496
先生、止まりません><
500デフォルトの名無しさん:2007/12/08(土) 16:34:42
素直にLINQ使えよ
501デフォルトの名無しさん:2007/12/08(土) 18:09:40
ちょっと教えてください。

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も当然消えるのでしょ
うか?
502デフォルトの名無しさん:2007/12/08(土) 18:14:05
>>501
> このクラスAはFrom1等から呼び出して使う感じなんですが、ここでAlistに入れたデータはFrom1の生存
> 期間中はずっとデータを保持してて欲しい為、AlistとSetData()をstaticで宣言しております。
意味わかんね。FormAがAのインスタンス保持すりゃすむ話。
503デフォルトの名無しさん:2007/12/08(土) 18:23:00
生存期間とか別に気にしなくていい
誰かが使ってる(使える状況にある)限りは絶対消えない
504デフォルトの名無しさん:2007/12/08(土) 18:48:49
>>502
んとA内にはDllImportして使う他のメソッドも定義されてて全部staticで定義
されてるので、Form1側でAのインスタンス作ろうとするとエラーになるのです。

>>503
なるほどです。ちなみに色々本読んだりして探してるのですが、newした変数
/インスタンスの生存期間とか詳しく説明された物って全然見かけないのは、
気にしなくて良いからなんでしょうか?
どうしてもCの考えで、auto/static/mallocした領域に照らして考えてしまうの
で、この変数消えるんじゃね?と思える状況に多々遭遇しております。まぁク
ラスの設計がヘボなんですけど…。
こう言うメモリ回りの話しが詳しく書かれた物て何か無いのでしょうか?
505デフォルトの名無しさん:2007/12/08(土) 18:57:17
そういうことをいちいち気にしなくて済むようにするためのGC
他から参照されてないオブジェクトはそのうちGCに消される。それだけ。
506デフォルトの名無しさん:2007/12/08(土) 19:01:13
オブジェクトは到達可能ならば消えないし
到達不可能になると消える
それがGC
507501:2007/12/08(土) 19:26:42
なるほど、そういう文化と言う事ですか。
ありがとうございました。
508デフォルトの名無しさん:2007/12/08(土) 21:40:28
文化じゃねないよ。仕様だよ。
509デフォルトの名無しさん:2007/12/08(土) 21:55:12
Cになれてるなら、
どこからも参照されなくなったら勝手にfreeされるmallocだと思っとけ。
510デフォルトの名無しさん:2007/12/08(土) 22:03:13
GCされる頻度って調整できるんですか?
この辺はパフォーマンスに大きく影響する部分ですよね
511デフォルトの名無しさん:2007/12/08(土) 22:06:21
自分でGC.Collect呼べば
構造体をうまく使えば
512デフォルトの名無しさん:2007/12/08(土) 22:06:53
GCは必要になったら起動される。
無理やり起動することはできるがお勧めしない。
よって直接的な調整の余地はあまり無い。
大量にインスタンスを生成して参照しなくなれば頻度は上がるし、
あまりインスタンスを作成しないなら下がる。
細かい話はいろいろあるけど、まずはそれだけ。
513デフォルトの名無しさん:2007/12/08(土) 22:09:10
ゲームなど、シビアなインタラクションが要求されるような場合は別だが、
多くの場合は細かく気にする必要は無い。
インスタンスを無駄に生成しないようにある程度注意するくらい。
514デフォルトの名無しさん:2007/12/08(土) 22:19:55
大抵の場合自分がやるよりうまいことやってくれるよ
515デフォルトの名無しさん:2007/12/08(土) 22:22:07
確かに3Dゲーム系では.net避ける人多いですね
516デフォルトの名無しさん:2007/12/08(土) 22:24:31
MDX2.0が立ち消えになっちまったからなあ
517デフォルトの名無しさん:2007/12/08(土) 22:41:44
つXNA
518デフォルトの名無しさん:2007/12/08(土) 22:47:13
あんなもの使えるかよ
519デフォルトの名無しさん:2007/12/09(日) 00:01:55
マネージドDirectXでいいじゃない
520デフォルトの名無しさん:2007/12/09(日) 00:13:54
あんなもん自分でラッパー書いたらしまいや
521デフォルトの名無しさん:2007/12/09(日) 00:25:52
>>519
>>516からの流れなのにMDXを持ち出すのはおかしいだろ
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
>>522
解決しました~~;
524デフォルトの名無しさん:2007/12/09(日) 00:41:46
@と¥がいらなそう
525デフォルトの名無しさん:2007/12/09(日) 00:42:40
.txt\"";
526デフォルトの名無しさん:2007/12/09(日) 00:44:14
>>523
もうくるな
527デフォルトの名無しさん:2007/12/09(日) 01:35:23
すいません質問があります。

あるクラスAを継承したクラスBがあるとして、
クラスBのインスタンスからはAのpublicメンバを使用できないようにすることは出来るでしょうか?
例えばFormクラスを継承したMyFormクラスを作ったが、Myformインスタンスでは勝手にクライアントサイズなどを変えてほしくない、などです。
528デフォルトの名無しさん:2007/12/09(日) 01:49:12
できません
529デフォルトの名無しさん:2007/12/09(日) 01:50:31
>>528
出来そうと思いましたが、そうでしたか。ありがとうございました。
530480: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;
}
531デフォルトの名無しさん:2007/12/09(日) 03:08:18
>>529
フォームの中の使うメンバだけを公開したクラスを作ってフォームにかぶせる
532デフォルトの名無しさん:2007/12/09(日) 03:21:43
>>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; }
}
}
533デフォルトの名無しさん:2007/12/09(日) 04:09:33
例外投げればいんじゃね。
534485:2007/12/09(日) 05:07:01
>>530
API周りはMSDNと見比べたけど型の設定とかは間違ってないね。
ちょっと思ったのは、FILETIMEとFileTimesの実装かな。
両方publicで外出ししてるけど、クラス内に隠蔽して、メソッドの引数は
DateTime型で貰って内部で変換した方が呼び出し元から使うのは楽な
んではないかなと。
まぁ呼び出し側で日時をどういう形式で扱ってるかによるから好きな方
法で良いとは思うけど。
535480:2007/12/09(日) 05:46:26
>>534
なるほど、確かにFILETIMEは毎回ビットシフトしてlong型に直す処理を外でしていたので
DateTime型で受けて内部で処理させた方がスッキリしますね。
有難うございます。

DllImportを覚えると、一気に出来ることが増えて、まさに世界が広がった感じがします。
楽しくなってきました(´∀`)
536デフォルトの名無しさん:2007/12/09(日) 11:04:24
Wsdl.exeで登録したXMLWebサービスを削除するにはどうしたら良いの?
537デフォルトの名無しさん:2007/12/09(日) 13:11:05

Regexクラスで質問です。
あるファイルに変換前と変換後のデータが格納してあり、
文字列をその内容に従って変換したいのですが、\r\nの扱いがうまくいきません。

Regex rex = new Regex(strBefore);
strData = rex.Replace(strData, strAfter );

aaabbb → aaa\r\nbbb
(strBefore) (strAfter)

としたい場合、CRLFではなく、文字列として"\r\n"に変換されてしまいます。
エスケープシーケンスのオプションみたいなのがあるのでしょうか?
538デフォルトの名無しさん:2007/12/09(日) 13:12:49
ファイルから読み込むときに@"\r\n"を"\r\n"に変換しろ
539デフォルトの名無しさん:2007/12/09(日) 13:21:42
>>538
ありがとうございます。
うまく行きました。
540デフォルトの名無しさん:2007/12/09(日) 17:20:30
ツールチップの描画に使用されるフォント(デスクトップのプロパティのデザイン→詳細設定→ヒントで設定される奴です)を取得したいのですが、何か方法はないでしょうか。
541デフォルトの名無しさん:2007/12/09(日) 19:25:14
542デフォルトの名無しさん:2007/12/09(日) 21:10:15
抽象クラスで、フィールドとコンストラクタを継承することはできないんでしょうか?
543デフォルトの名無しさん:2007/12/09(日) 21:29:50
意味が分からない
無理に抽象的に書かなくていいから具体的にどうしたいのか書いて
544デフォルトの名無しさん:2007/12/09(日) 21:57:25
abstract class A
{
    (略)
}


class B : A
{
    (略)  
}

class C : A
{
    (略)
}


↑でクラスBとクラスCで同じようなフィールドを使って、さらにそれを同じ値で初期化するとき
クラスAのフィールドとコンストラクタが継承できたら楽だと思うんですが、できないんでしょうか?
545デフォルトの名無しさん:2007/12/09(日) 22:04:17
ベースクラスのフィールドにアクセスしたり、ベースクラスのコンストラクタを明示的に呼びたいってことか?
それならできる
546デフォルトの名無しさん:2007/12/09(日) 22:05:05
あるプログラムA(EXE、すでに起動して無限ループで待機中)でメソッドを提供し、
別のプログラムB(ASP)でこれを呼び出したいのですが、何かうまい仕組みが提供されてたりしますか?
プロセス間通信を自前で実装するくらいしか思いつかないのですが…。
547デフォルトの名無しさん:2007/12/09(日) 22:05:56
それ具象やん
548デフォルトの名無しさん:2007/12/09(日) 22:09:27
フィールドのアクセス修飾子をprivateではなくprotectedにすれば、派生クラスからもアクセスできるようになる。
ベースクラスのコンストラクタを呼びたければ派生クラスのコンストラクタを

public B() : base()
{
}

のように書けばいい
549デフォルトの名無しさん:2007/12/09(日) 22:10:01
>>545
すいません、同じ違いでした。

型名やフィールド名が"同じという意味です。

B.x
B.y

C.x
C.y

これらを一つ一つ宣言するより、親クラスから継承して
例えば全てに0等を入れて初期化する場合、コンストラクタも一緒に継承できると便利だと思うんですが……
550デフォルトの名無しさん:2007/12/09(日) 22:13:17
>>549
出来るから手動かしてみな
551デフォルトの名無しさん:2007/12/09(日) 22:19:28
>>546
リモーティング
552デフォルトの名無しさん:2007/12/09(日) 22:25:24
>>549
A.xとB.xは同じフィールドじゃなくて、たまたま名前が同じだけってこと?
protected void init(ref int x, ref int y);
みたいなの定義しといて、各コンストラクタから呼び出すとか
553552:2007/12/09(日) 22:26:08
定義しといて→Aに定義しといて
554デフォルトの名無しさん:2007/12/09(日) 22:43:41
多分>>544>>552みたいに複雑なことをやろうとしてるんじゃなくて、
継承とインスタンスがどのように挙動するかわかってないだけだと思うのだが・・・
555デフォルトの名無しさん:2007/12/09(日) 22:44:17
protectedの意味が分かれば終了だろ
556デフォルトの名無しさん:2007/12/09(日) 22:57:20
と、いうわけでアクセス修飾子の話でも。

public 何処からでもアクセス可能(アクセスレベルが低いと表現)

protected 派生クラスはアクセス可能

private 自分しか無理。(アクセスレベルが高い)

クラスAにposX、posY、graphic、というフィールドがあれば、
クラスAを継承したクラスBも、そのフィールドを持つ。
それらのフィールドのアクセスレベルをprotectedにしておけば、派生クラスでもフィールドに自由に代入・取り出しできる。
もしprivateだと、それぞれフィールドは存在するのに一切派生クラスからはアクセスできない、ということになる。
この場合はプロパティを基本クラスで作っておけばすれば解決できる。(というかgetとsetのアクセスレベルを分けるから大抵はこっち?かな)




557デフォルトの名無しさん:2007/12/09(日) 23:00:22
フィールドをprotectedにしちゃうのはお勧めできない
初期化はたいてい基底クラスのコンストラクタを呼べば済む
558デフォルトの名無しさん:2007/12/10(月) 00:07:18
継承なんてすんなよ。
559デフォルトの名無しさん:2007/12/10(月) 04:22:03
てか、フィールドをprotectedにするのは禁止じゃなかったか。
プロパティなら良い。
560デフォルトの名無しさん:2007/12/10(月) 10:27:11
誰が?
561デフォルトの名無しさん:2007/12/10(月) 10:29:23
オレオレ
562デフォルトの名無しさん:2007/12/10(月) 11:25:16
とある機器からUDPでHTTP1.1なデータを送ってくるのですが
受信と解析するようなクラスはありますか?
563:2007/12/10(月) 11:28:01
受信だけはUdpClientでできるんですけど
564デフォルトの名無しさん:2007/12/10(月) 11:33:59
WebClient
565デフォルトの名無しさん:2007/12/10(月) 12:09:29
566デフォルトの名無しさん:2007/12/10(月) 15:03:48
例外が起こる前にifで避けるのと、起こってからtry-catchで対応するのとどっちがいいですか?
こういう時はtry-catchを使うという判断基準ってあるのでしょうか?
567デフォルトの名無しさん:2007/12/10(月) 15:09:44
モノによるけど私はifで避けれることはifで避けるようにしてる。
try-catchでしか回避できない仕様なら仕方なしに使う感じ
568デフォルトの名無しさん:2007/12/10(月) 15:29:29
例外をキャッチするとわけわかんなくなるから
ifで出来るものはifでやった方がいいよな
ArgumentExceptionとか例外が投げられること自体がバグの証明であるようなのは
どんどん投げるべき
そしてキャッチさせないべき
そのためにtryで囲ませないべき
tryで囲ませると往々にしてバグまで握りつぶしてしまう
569566: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' は現在のコンテキスト内に存在しません。
とエラーがでてしまったのですが。。。

571デフォルトの名無しさん:2007/12/10(月) 17:31:41
using ShDocVw;
572デフォルトの名無しさん:2007/12/10(月) 17:32:55
OLECMDID.OLECMDID_SAVEAS
573デフォルトの名無しさん:2007/12/10(月) 18:29:19
using ShDocVw;を追加したのですが以下のエラーが出ました。
型または名前空間名 'ShDocVw' が見つかりませんでした。
using ディレクティブまたはアセンブリ参照が不足しています。
574デフォルトの名無しさん:2007/12/10(月) 19:20:05
コントロールを削除してもソースにイベントハンドラが残るんですけど手動で削除するしかないんですか?
575デフォルトの名無しさん:2007/12/10(月) 19:44:30
勝手に消えても困るだろ?
576デフォルトの名無しさん:2007/12/10(月) 20:05:55
ほかから参照されていないとかの条件なら消すかどうかの選択肢はあってもいいかもね
577デフォルトの名無しさん:2007/12/10(月) 20:46:51
>>573
shdocvw.dll参照にいれたんじゃなくてWebBrowserコントロールか。

ShowSaveAsDialog ってメソッドがあるでしょ。
578デフォルトの名無しさん:2007/12/10(月) 21:18:12
ShowSaveAsDialog();は、AxWebBrowserにはないみたいです。
shdocvw.dllは、参照にいれる必要ないんですか?
579デフォルトの名無しさん:2007/12/10(月) 21:37:12
580デフォルトの名無しさん:2007/12/10(月) 21:42:19
どっちかの質問取り下げろやハゲ
581デフォルトの名無しさん:2007/12/10(月) 22:41:02
WebBrowserコントロールと書いておきながらaxWebBrowserなのか?
582デフォルトの名無しさん:2007/12/10(月) 23:05:26
>>566
おれはめちゃくちゃcatchしまくってるよ。
おかげでエラーチェックのifが少なくなって、ロジックが超すっきり。
583デフォルトの名無しさん:2007/12/10(月) 23:09:29
ifやめてcatchにする方が
どう繋がってるのか分かりにくい
584デフォルトの名無しさん:2007/12/10(月) 23:12:50
catchの方がコスト高いでしょ?
585デフォルトの名無しさん:2007/12/10(月) 23:19:28
たとえば、CSVを読み込んで、DBに入れるコードを書くとして、
TryPerse() でなくて、Prese()で、intに変換。
FormatExceptionが飛んだら、このCSVは不正ですって言って、処理終了。

これでなんにも問題ありません。
586デフォルトの名無しさん:2007/12/10(月) 23:21:09
まあ終了する時は例外ほど便利なものはない
587デフォルトの名無しさん:2007/12/10(月) 23:53:12
趣味グラマか
588デフォルトの名無しさん:2007/12/10(月) 23:56:38
エラーコードはまだいいけど
null返してきたりスルーしやがるメソッドはうざい
589デフォルトの名無しさん:2007/12/11(火) 00:04:21
nullを返すのとbool TryHoge(out result)と例外返すのとどれがいい
590デフォルトの名無しさん:2007/12/11(火) 00:13:41
s@;w@mee;@s4ezdwh;
591デフォルトの名無しさん:2007/12/11(火) 00:42:53
例外
592デフォルトの名無しさん:2007/12/11(火) 00:43:34
TryParseよりParseがいいってか
593デフォルトの名無しさん:2007/12/11(火) 00:47:03
メソッドが不可避な例外を投げる場合、キャッチしなければバグになるわけだ
そしてそれがバグであるかどうかはドキュメントをよく読まないと分からない
TryHogeならばifで囲まれていない時点でバグであることが見た瞬間に分かる
どっちがいいかは分かりきっている
594デフォルトの名無しさん:2007/12/11(火) 01:22:57
というか、これは自分の想像だから間違ってたらただして欲しいんだけど、
昔のCの、intでエラーコードを返すタイプの関数から、
今の、voidでエラーが起きたときは例外を投げるタイプのメソッドに推移というか、
後者が主になったのは、なんらかの理由があるからじゃないの?
TryParseとかはその流れに逆行してるように感じたんだけど…
595デフォルトの名無しさん:2007/12/11(火) 01:25:42
そりゃ、TryParseのほうがタイプ量少なくて済むからな。軽いし。
ただし、boolを返すTryXxxを作るときは、例外を投げるXxxも用意することになってる。
596デフォルトの名無しさん:2007/12/11(火) 01:34:04
例外には2種類あって、ArgumentExceptionのように投げられること自体が呼び出し側の
ミスによるものであり、除去すべきバグであることが明らかなものと、
ネットワークのサーバがダウンしている、ファイルが存在しないといった
正しい呼び出し方をしたとしても起こりうるエラーがある
大半は前者だ。バグだから直さなきゃいけないというのを通知するのには例外は適している
失敗の可能性が不可避なメソッドならば、例外を用いずによりわかりやすいTry〜のような
形を用いるべきだ
Tryの形式なら一目でバグと分かるのに、わざわざ例外を使って
バグと分かりにくいコードを書かせる必要なんか皆無だ
どちらにもいえることだが、例外はキャッチするものでは無い
597デフォルトの名無しさん:2007/12/11(火) 01:50:28
要するにポリシーとしては、使い方に因らないエラーが発生する場合は例外を投げ、
使い方に因ってエラーが発生する場合は戻り値で返せということですかね?
598デフォルトの名無しさん:2007/12/11(火) 01:58:51
正しい呼び出しをしてない場合は例外を投げ
正しい呼び出しをしてもエラーが不可避である場合はboolかなんかを返せということを俺はいいたい
599デフォルトの名無しさん:2007/12/11(火) 02:01:03
君C#向いてないよ
600デフォルトの名無しさん:2007/12/11(火) 02:02:45
>>599
>>596のようにしない方がいい理由がなにかいえるのか?
601デフォルトの名無しさん:2007/12/11(火) 02:05:45
Try形式だと基本bool値しか返ってこないけど
エラーに関してもっと詳しい情報を渡したい時には>>596のスタンス的にはどういう方法をとるの?
戻り値?引数?
602デフォルトの名無しさん:2007/12/11(火) 02:06:52
あ、割り込んじゃったけど>>601>>599です
603デフォルトの名無しさん:2007/12/11(火) 02:08:06
>>601
outでエラーの詳しい情報をobjectにして戻すのがいいと思っているが
それこそ例外をoutで返したらいい
604デフォルトの名無しさん:2007/12/11(火) 02:15:27
.NetFrameworkでそういった作りになってる物があるかな。
605デフォルトの名無しさん:2007/12/11(火) 02:19:16
投げずに渡す、か
正直それは考えた事なかったな
606デフォルトの名無しさん:2007/12/11(火) 02:22:15
.NET FrameworkにはTryParseのような一部のものしかそういう設計をとっていない
それは誤りだが今さら変えられない
.NET Frameworkで例外を返すのが使い物になるのはそれが共通であり
プログラマなら大抵そのクラスの動作を知っているからだ
自作のクラスでそれをやるのは死亡フラグそのものだ
607デフォルトの名無しさん:2007/12/11(火) 09:47:13
日本語でおk
608デフォルトの名無しさん:2007/12/11(火) 10:17:45
文字列をint型にキャストするには
 int.Parse(hogehoge)
等の方法でやっていますが、
変換する型そのものを文字列等で指定する方法がありますでしょうか?
609デフォルトの名無しさん:2007/12/11(火) 11:43:08
結局Win32のカオス具合をなぞってるだけだな
610デフォルトの名無しさん:2007/12/11(火) 11:51:29
>>608
それはキャストじゃなくて型変換(Convert)だろ。
TypeConverter/TypeDescriptor でも使えば?
611デフォルトの名無しさん:2007/12/11(火) 12:25:54
>>606
TryParseは2.0になって利便性のために新たに付け加えられたのであって、
決して「誤り」ではないよ。
612デフォルトの名無しさん:2007/12/11(火) 12:28:32
outで返すとC#でしか使えないことないか?

パラノイア的に統一性に拘らないのであれば(というのは、これに病的に固執する奴っているからね)
値を返さないメソッドに関してだけ例外を返すようにする(返値が必要なのは普通に例外投げる)
というやり方の方が俺は好きだな。
613611:2007/12/11(火) 12:28:47
>>606
TryXの使い方のガイドラインあるから読んどけ
http://msdn2.microsoft.com/ja-jp/library/ms229009(VS.80).aspx
614デフォルトの名無しさん:2007/12/11(火) 13:29:25
>>612
outが嫌なら戻り値用の構造体を作ったっていい
>>613
パフォーマンス上の理由なんてのは的外れだ
その例外がめったに起こらなければ起こらないほど
例外のキャッチし忘れは深刻なバグになる
起こるか起こらないか分からないようなエラーが起こるものが
通常のメソッドと見た目全く同じに用意されていて
エラーにそなえてtryで囲めというのは間違い探しをしろといっているようなものだ
単に無駄だ
バグであることが分かりやすくなるように設計するべきだ
615デフォルトの名無しさん:2007/12/11(火) 13:30:22
平日の昼間っから暇なんだなあ
616デフォルトの名無しさん:2007/12/11(火) 13:41:10
なんでここは3行にまとめられない奴ばっかりなんだろ
617デフォルトの名無しさん:2007/12/11(火) 13:57:19
例外のキャッチし忘れはむしろ深刻にはならない。
618デフォルトの名無しさん:2007/12/11(火) 14:09:17
めったにないことだけどある環境では100回に1回ぐらい例外が投げられることがある
catchしてないのにテストをすり抜けてパッケージソフトとして出荷されてしまった
どうなる?
619デフォルトの名無しさん:2007/12/11(火) 14:14:53
例外は絶対投げちゃダメ!とかTryParseは誤り!とか言う事が極端だな
共有すべき普遍的な知識と自分だけの信念は区別しないと
620デフォルトの名無しさん:2007/12/11(火) 14:16:17
そんな事言ってる人居たっけ
621デフォルトの名無しさん:2007/12/11(火) 14:18:28
>>619
TryParseは正しい
正しく呼び出してもエラーが起こりうる場合例外は投げるべきじゃない
とは言った
622デフォルトの名無しさん:2007/12/11(火) 14:27:16
ちなみにTry〜を使うべきだと俺が考えるものには
メソッドが成功するかどうかが自分のプログラムの状態以外の要因で決まるもの(ハードディスクとかNetworkとか)と
それが正しい呼び出しであるかをテストする機能も正しい使い方のうちに含むもの(TryParse)と二通りある
623デフォルトの名無しさん:2007/12/11(火) 14:33:13
ここふらっとスレなんだけど。
624デフォルトの名無しさん:2007/12/11(火) 14:51:59
だからだろ
625デフォルトの名無しさん:2007/12/11(火) 15:12:12
>>618
キャッチし忘れのバグの方がキャッチもしくは例外をかわした場合のバグより
深刻にはならないって言ってるだけだよ。
626デフォルトの名無しさん:2007/12/11(火) 15:17:39
ある環境では100回に一回発生する例外を
常にちゃんと認識しててきっちり対処出来るんなら別だけどな。

あくまでバグがあった場合の話で、
バグがないならその方がいいに決まってる。
627デフォルトの名無しさん:2007/12/11(火) 15:29:08
>>626
しかしある種の例外は確率は低いけど不可避なわけだ
>>622の前者のようなのはそうだ

>>625
間違ってるのにエラーを返さない、例外を投げない
それはただのバグだが防ぐのは難しい
しかし例外のキャッチし忘れは簡単に防げる
防げるものは防いだほうがいいし、それが深刻になる場合だってある
628デフォルトの名無しさん:2007/12/11(火) 16:37:32
http://ufcpp.net/study/csharp/oo_exception.html

例外(exception)とは、本来ならばプログラム中で起こってはいけないことが起こってしまうことをいいます。
堅牢なプログラムを作成するためには、例外が起こったときでもプログラムが異常な動作をしないよう、
しっかりと例外処理(exception handling)を行う必要があります。

629デフォルトの名無しさん:2007/12/11(火) 16:44:57
ここが隔離スレになってるから有効に使ってくれ。
C♯, C#相談室 Part34
http://pc11.2ch.net/test/read.cgi/tech/1162467959/l50
630デフォルトの名無しさん:2007/12/11(火) 17:04:09
今時戻り値だの構造体だのでエラー情報ずらずら返されたら
どうしようかと思うよ。
631デフォルトの名無しさん:2007/12/11(火) 17:18:14
じゃあメソッドの頭にTryとつけるだけでもいい
エラーが不可避ならばそれを分かりやすく示すべきだ
tryで囲んでないのが一目でバグと分かるように
632デフォルトの名無しさん:2007/12/11(火) 17:25:00
しかし例外の型は何が飛んでくるかわからないからな
バージョンアップで新しい例外が投げられるようになってキャッチできない可能性もあるし
outなり構造体なりで返ってくれば不可避な例外の基本クラスは分かるから
それを投げれば、バグによる例外を含まずにキャッチできる
とにかくcatch{}やcatch(Exception)だけはやってはいけないんだ
633デフォルトの名無しさん:2007/12/11(火) 17:47:00
catch(Exception ex) { ログ保存(ex); throw ex; } は時々やる。
634デフォルトの名無しさん:2007/12/11(火) 17:48:33
だからね、例外が深刻な状況につながることはあまりなくて、
むしろキャッチした上でのバグが深刻な状況につながるんだといってる
635デフォルトの名無しさん:2007/12/11(火) 17:53:23
深刻って何だろう
636デフォルトの名無しさん:2007/12/11(火) 17:58:59
>>633
それやるとデバッガが例外が起きた瞬間でブレイクしてくれないだろ
例外のメッセージの何十倍もその瞬間のブレイクの方が有用だし
637デフォルトの名無しさん:2007/12/11(火) 18:20:55
ケースバイケース
638デフォルトの名無しさん:2007/12/11(火) 18:43:20
>>634
何が言いたいのかよく分からん
それでどうするべきだと言ってるんだ?
639デフォルトの名無しさん:2007/12/11(火) 18:43:43
デバッガの使い方をまず身につけろよ。
最終的にはまず大抵どっかでキャッチするんだから
キャッチしたらアウトなんてのは使い物なならんだろ。

ただ、あえてやってるんじゃないなら
throw e;
はやめとけ。
throw;
でいい。
640デフォルトの名無しさん:2007/12/11(火) 18:45:34
とにかくキャッチすべき、キャッチしないバグは深刻
っていってるみたいだから、
キャッチするバグの方が大抵深刻だよっていってるだけ。
641デフォルトの名無しさん:2007/12/11(火) 18:47:10
ああちょっとちがうか…
キャッチしないバグは、深刻度は比較的低いってこと。
642デフォルトの名無しさん:2007/12/11(火) 18:48:48
何が起きてるか分からない、例外が飛んでこないバグに比べたらね。
643デフォルトの名無しさん:2007/12/11(火) 18:51:03
誰か例外関係のガイドライン書いてちょうだい
644デフォルトの名無しさん:2007/12/11(火) 18:55:18
>>639
大抵どっかでキャッチする時点でデバッガの使い方を間違えている
少なくとも開発中はバグによる例外はキャッチすべきではない
ブレイクすべきだ
キャッチするのはバグを握りつぶす効果しかない

バグでない不可避な例外の場合はキャッチして処理しなきゃならない
その場合でも不可避な例外の基本クラスを設けるとか、必要な処理はやらなきゃならない
漫然と例外を使うとひどいことになる
特にどっかでキャッチされるなんてのは最低の使い方だ

>>640
全然違う
俺はキャッチすべきでないといってる
確率的に低い不可避の例外をキャッチしないことは深刻なバグに繋がる
なら最初からboolを返すなりメソッドシグネチャに書いておくべきだ
645デフォルトの名無しさん:2007/12/11(火) 19:09:38
正直、言ってる事よくわかりませんけど。。。
646デフォルトの名無しさん:2007/12/11(火) 19:13:08
>>596をまず読んでくれ
いろいろ誤解されてるような気がするが
俺はこれを繰り返し言っているだけだ
647デフォルトの名無しさん:2007/12/11(火) 19:21:36
いややっぱりよう分からんぞw

前半は当たり前杉。
後半は何言ってるか意味不明。
特に、
>どちらにもいえることだが、例外はキャッチするものでは無い
なんだよこれw
648デフォルトの名無しさん:2007/12/11(火) 19:27:49
お前の例外をキャッチして腹ン中がパンパンだぜ
649デフォルトの名無しさん:2007/12/11(火) 19:32:46
>>647
どれが分からないんだ?

正しく呼び出したとしても例外を投げることが不可避であり、必ず対応しなければ破綻する
メソッドが、通常のメソッドと見た目が何も変わらなければ、キャッチし忘れることがありうる
一つ一つのメソッドについて例外が不可避かどうか調べるのは時間の無駄なので、
そういうメソッドは見た瞬間にそれと分かるようにするべきだといっている

具体的にはTry〜にしてboolを返すようにするとか、単に命名規則に含めるとかだ
650デフォルトの名無しさん:2007/12/11(火) 19:37:44
不可避の例外ってのがようわからん。
挙げられてるケースだとただ単にエラーチェックしてないだけだが。
651デフォルトの名無しさん:2007/12/11(火) 19:41:48
不可避の例外については>>622に書いたが何かおかしいか?
652デフォルトの名無しさん:2007/12/11(火) 19:44:52
>>649
あのーお言葉ですけどねえ、
外的な、つまり呼び出し側以外の理由で例外が起こるような処理っていうのはむしろ
文字通り「例外的」なわけで、そういうのは(むろん上手に抽象化ができてさえすれば、
という前提条件つきではあるが・・・)むしろメソッドの意味を見れば
例外が起こりうるかどうかは一目瞭然なんじゃないの?

例えばディスクにアクセスするメソッドならディスクが物理的にお陀仏になったれ例外投げるしかないことは
猿でも分かるでしょw
653652:2007/12/11(火) 19:47:00
あ、でもドトネトのファイルストリームはそういう実装になってないんだっけかw
あれって書き込み中のUSBドライブ抜いても何の例外も投げないのなw
654デフォルトの名無しさん:2007/12/11(火) 19:58:48
>>652
そうはいってもプログラムは適当に書かれることがあり
try,catchは往々にして忘れられる

さらにいえば、どのメソッドがどんな例外を投げるかきちんと把握しているのか
どの例外が不可避で、どの例外がバグによるものか
キャッチしていい物としてはならないものはどう見分けるのか
不可避の例外の基本クラスを作り、outでその例外クラスを返すようにすれば
帰ってくる不可避の例外がそのクラスを継承したものであることが保障される

バグであればそれ以外のクラスから派生した例外が飛んでくることになる
バグの例外はキャッチすべきでないから、try,catchで囲む必要すらなくなる
必要とあらばoutで返ってきた例外を飛ばし、基本クラスでcatchすることで
将来返って来る例外が増えたときにも対応できる
655335:2007/12/11(火) 20:03:11
try
{
Aaa(p1);
}
catch (HogeException e)
{
Console.WriteLine("{0} HogeException caught.", e);
}
catch
{
throw;
}

こんなふうに投げちゃいかんの?
メソッドやクラス内で処理する分はcatchしてそれ以外は上に投げる
投げ先が制御できないなら共通エラー処理クラス使えばいいと思うんだけど

初めて1週間なんでハズしてたら教えて欲しいです
656デフォルトの名無しさん:2007/12/11(火) 20:03:54
そろそろ隔離スレへいってくんない
657デフォルトの名無しさん:2007/12/11(火) 20:06:54
>>655
デバッガはthrow;のところで止まって例外が投げられた瞬間の情報が失われるけど
それでいいなら
それを避けたければデバッグ→例外を選んで投げた瞬間にブレイクしてほしい
例外にチェックをつけてもいい
658デフォルトの名無しさん:2007/12/11(火) 20:13:01
つまりSystem.IO下の関数には全てTryを付けた方が良いということだな。
659デフォルトの名無しさん:2007/12/11(火) 20:14:46
そうだ全部にHRESULTを返すようにしようぜ
660デフォルトの名無しさん:2007/12/11(火) 20:15:15
もう全部Debug.Failで
661デフォルトの名無しさん:2007/12/11(火) 20:18:49
S_OK
662デフォルトの名無しさん:2007/12/11(火) 20:38:38
>>658
確かにHDが一杯とかになったら何か処理はしなきゃならないから
ほとんどにTryがいるかもな
Tryってついてないから忘れがちだが
663デフォルトの名無しさん:2007/12/11(火) 21:00:28
ま〜趣味の人は何でもいいんでないの
俺なんかの扱ってる仕事は止まるとニュースになるようなのばっかりだが
664デフォルトの名無しさん:2007/12/11(火) 21:06:27
なんというマイクロソフト信者
そんなミッションクリティカルな用途にC#使うなんて、
普通の人間には命がいくつあっても出来ない。
665デフォルトの名無しさん:2007/12/11(火) 21:09:45
>>663
某首相の中の人とかか?
666デフォルトの名無しさん:2007/12/11(火) 21:17:06
>>656
諦めな
もし隔離スレを埋めたいのであればそっちにネタ投下すればいい
667デフォルトの名無しさん:2007/12/11(火) 21:27:39
>>663
どうせCOBOLでやるような糞仕事をリプレースしただけだろ
668デフォルトの名無しさん:2007/12/11(火) 21:32:32
規模の大きいところほど、技術的には保守的だったりだすからね。
669デフォルトの名無しさん:2007/12/11(火) 23:01:19
捨て台詞を吐いて背を向けた犬をいつまでもいたぶるな。
670デフォルトの名無しさん:2007/12/11(火) 23:05:00
C#で学んだことって他の.NET言語でも役に立ちますか?
671デフォルトの名無しさん:2007/12/11(火) 23:06:51
はい
672デフォルトの名無しさん:2007/12/11(火) 23:07:02
たつ
673デフォルトの名無しさん:2007/12/11(火) 23:08:38
わかりました。
674デフォルトの名無しさん:2007/12/11(火) 23:17:11
C#できればVB.NETは一日触れば使える
675デフォルトの名無しさん:2007/12/12(水) 00:00:35
必要だから例外なんて物ができたんじゃないのか?
それを使うなって┐(´д`)┌
676デフォルトの名無しさん:2007/12/12(水) 00:10:23
>>675
バグを通知するためにはものすごく必要だ
エラーで分岐するにはそのままでは不適切な仕組みだ
適切に使わないといけない
677デフォルトの名無しさん:2007/12/12(水) 00:18:47
リストビューのColumnWidthChangingイベントが拾えません!!
678デフォルトの名無しさん:2007/12/12(水) 00:27:11
VC#2008betaでアプリを作るとき、WindowsフォームアプリとWPFアプリが選択できるけど、
今から始めるなら当然WPFアプリが良いんだよね?
679デフォルトの名無しさん:2007/12/12(水) 00:36:02
ご自由に
680デフォルトの名無しさん:2007/12/12(水) 00:36:29
例外ってのはコンピュータの内部ではどんな状態になってるの?
681デフォルトの名無しさん:2007/12/12(水) 00:49:00
他の場所でチェック済みのオブジェクトを渡したりする以外では必ずtry-catch使ってる。
例外で処理分岐する場合もあれば、戻り値でも処理分岐する場合あるし臨機応変
682デフォルトの名無しさん:2007/12/12(水) 00:51:15
>>680
例外ハンドラが見つかるまで積まれたスタックフレームをすっとばす。
683デフォルトの名無しさん:2007/12/12(水) 00:53:32
皆細かくやってんだね。
俺なんか自分で作ったクラスは
try catchでcatchしたらthrowだよ。
でaspx.csで例外を受け取ったらRedirectでエラーページに遷移させる。
社内システムなんでそんなもんだぜ。
684デフォルトの名無しさん:2007/12/12(水) 00:54:46
>>681
それは臨機応変じゃなくて規約がなくその都度注意力をもって判断せねばならず
バグかどうかがドキュメントを参照しないと分からないということだろう
最悪の方法だ
685デフォルトの名無しさん:2007/12/12(水) 00:58:45
開発完了したシステムなら例外を一番上で全キャッチして
必要なエラーメッセージを出すようにすればいいさ
しかし開発中はバグの例外はキャッチしちゃいかんのだ
686デフォルトの名無しさん:2007/12/12(水) 01:03:09
>>674
VB.NET使う必要も技術的利益も無いんだがな・・・
なんでVB.NET選ぶかね・・・
687デフォルトの名無しさん:2007/12/12(水) 01:08:47
デバッガ慣れすると必要なログすら入れない奴が出てくる。
エラーメッセージ無視して「デバッガで追おうとしたけど再現しません」とかいう奴すら・・・
688デフォルトの名無しさん:2007/12/12(水) 01:12:31
なんせ例外が起こった瞬間のブレイクほど便利なものはないからな
エラーメッセージなんて例外で適切にブレイクできてりゃ最小限でいいんだ
689デフォルトの名無しさん:2007/12/12(水) 01:17:09
開発中にcatch無しってのは当たり前の話で、
エラーかどうかは殆どの場合ドキュメント見るんじゃないの?
690デフォルトの名無しさん:2007/12/12(水) 01:19:15
出来ることは違いないので、VB使うってのはその人の選択肢だね。文法の慣れとか。
691デフォルトの名無しさん:2007/12/12(水) 01:22:52
呼び出し側のミスでない例外ならばこの基本クラスを継承した例外を投げます
と決めておけば、それをキャッチしておけばいい
例外がキャッチできずすり抜けていったら呼び出し側のミスだ
向こう側が間違ってるのかもしれないがその時はドキュメントをよく読んで質問するしかない
692デフォルトの名無しさん:2007/12/12(水) 01:26:13
割り込みますがループ中の処理などの場合はどうなるのですか
例外だと中断されるのですよね?こんな場合は戻り血とかで判断するのですか
693デフォルトの名無しさん:2007/12/12(水) 01:36:59
>>655
そういえば正しい方法を言ってなかった気がする

catch
{
throw;
}

これはいらないからなくすべき
例外が投げられた瞬間の情報が失われるから
694デフォルトの名無しさん:2007/12/12(水) 01:41:37
例外って「これ以上処理を続けられるとマズイ」っていうときに投げるもんじゃないの?
695デフォルトの名無しさん:2007/12/12(水) 01:42:53
>>694
そりゃそうだ
696デフォルトの名無しさん:2007/12/12(水) 01:42:55
みんなこれくらいは読んでる?
http://msdn2.microsoft.com/ja-jp/library/ms229014.aspx
697デフォルトの名無しさん:2007/12/12(水) 01:45:45
俺も読んでくる
698デフォルトの名無しさん:2007/12/12(水) 01:49:34
もうオイラはスローして寝ます
699デフォルトの名無しさん:2007/12/12(水) 01:51:23
throw spoon;
700デフォルトの名無しさん:2007/12/12(水) 01:59:48
投げたらアカン
701デフォルトの名無しさん:2007/12/12(水) 02:02:26
>他の場所でチェック済みのオブジェクトを渡したりする以外では必ずtry-catch使ってる。
必ずってどのレベルで必ずなの?
メソッド呼び出し全部?
catchしてその場でどうにかできるのなんて一部な気がするんだが。
まあラップして投げなおしはあるかもしれんが。
そうでなくみんな戻り値とかでエラー返して上位に通知してるなら
それこそ単純に例外ですむ話し出しってか上位への通知を細かに書かなくてすむ
ってのが例外のメリットのひとつだと思うんだが、
多分そういうことではないんだよね?
702デフォルトの名無しさん:2007/12/12(水) 02:04:13
業務アプリなんかだと、業務実装者にはほとんど例外処理なんて書かせないしな。
その場で処理してしまうような例外は別だけど。
703デフォルトの名無しさん:2007/12/12(水) 02:09:29
>非常に一般的なエラーの場合には null を返します。
>たとえば、ファイルが見つからない場合には File.Open は null を返しますが、
>ファイルがロックされている場合には例外を返します。
http://msdn2.microsoft.com/ja-jp/library/seyhszts.aspx

このガイドラインはうんこそのものだな
怪しそうな全ての場合においてnullを返すかどうかを一々調べろといってるのか?
704デフォルトの名無しさん:2007/12/12(水) 03:59:25
業務アプリやパッケージで実行時エラーが出るのはやばいよな?
なのでcatchしてログ&メッセージ出して問い合わせ促してるけど
catchしないって人はリリース後に実行時エラー発生したらどうやって対応すんの?
705デフォルトの名無しさん:2007/12/12(水) 04:04:49
データの喪失も破壊も甘んじて受け入れる
706デフォルトの名無しさん:2007/12/12(水) 04:10:42
アプリケーションの一番高いレベル、つまりMainに近いあたりでキャッチして
ログやメッセージ出してアプリを中断が常套。MSのガイドラインでもこうなってるな。
707デフォルトの名無しさん:2007/12/12(水) 04:41:05
.NETのクラスライブラリの出す例外の扱いの話と、
その上に構築するアプリケーションにおける例外のデザインの話は
分けて考えないと論点がはっきりしない気がするな。
708デフォルトの名無しさん:2007/12/12(水) 05:44:24
ProfessionalColors.ImageMarginRevealedGradientBegin

ProfessionalColors.ImageMarginGradientBegin
の違いって何ですか?

ImageMarginRevealedGradientBeginは、どういう場合に使われますか?
709デフォルトの名無しさん:2007/12/12(水) 08:14:59
すり抜けも何も、ハンドルしてない〜Exceptionが発生したら.、NET側でダイアログ出して勝手に止めるだろ。
710デフォルトの名無しさん:2007/12/12(水) 08:27:21
>>693
そういうのはヒトに向かって書いている場合もあるんでしょ。
「俺様はちゃんとここで例外が起こりうることを認識してコードかいてるよ」
って明示するために。

必ずしも処理上必要だから書いてるわけじゃないんだよ。
あ、いつも常にそうだとは言ってないから勘違いしないでね。
711デフォルトの名無しさん:2007/12/12(水) 09:01:46
>>710
キャッチって多段で追跡できちゃったりするの?
できないならダメだろ。
712デフォルトの名無しさん:2007/12/12(水) 12:20:04
>>711
できるじゃん
713デフォルトの名無しさん:2007/12/12(水) 12:23:19
独自の例外定義はMainでキャッチ、それをスローする例外は
イベントに追加してキャッチさせるのが常識。
714デフォルトの名無しさん:2007/12/12(水) 12:32:17
ここは「よくわからない日本語のサンプル」を投稿するスレじゃないよ
715デフォルトの名無しさん:2007/12/12(水) 13:45:33
開発中はキャッチするなといっていた者だが
開発完了したら、一番上でキャッチしてメッセージを出して終了するようにする
まあ使われないのが理想だが
716デフォルトの名無しさん:2007/12/12(水) 14:43:31
>>710
問題は、デバッガがthrow;でブレークして、
例外が投げられた瞬間のブレークが失われることだ
例外が投げられた瞬間のブレークがあれば何が間違っていたか大抵全部分かる
それを捨てる理由になると思うか?
717デフォルトの名無しさん:2007/12/12(水) 15:29:09
何行目で初回例外が発生したか調べてそこに赤丸付ければいいだろ。
718デフォルトの名無しさん:2007/12/12(水) 15:34:07
>>717
その作業は無駄だし
例外が起きなくてもその行で毎回止まるぞ
719デフォルトの名無しさん:2007/12/12(水) 15:38:47
BitmapImage image1 = new BitmapImage();
BitmapImage image2 = new BitmapImage();
...
...
...
.

って一つずつ書くのが面倒なんですが、まとめて書ける方法ってありますか?
720デフォルトの名無しさん:2007/12/12(水) 15:44:55
>>719
配列にしてループ
721デフォルトの名無しさん:2007/12/12(水) 15:57:55
結局したほうがいいの?しないほうがいいの?
722デフォルトの名無しさん:2007/12/12(水) 16:02:12
>>721
自分で考えられないやつは2chなんか使うな
723デフォルトの名無しさん:2007/12/12(水) 16:07:15
724デフォルトの名無しさん:2007/12/12(水) 16:49:02
catch{}のなかで正常に戻せた場合にそのまま進むにはどうすればいいの?
725デフォルトの名無しさん:2007/12/12(水) 16:52:14
そのまま進むとは?
726デフォルトの名無しさん:2007/12/12(水) 16:53:46
通常進行で
727デフォルトの名無しさん:2007/12/12(水) 16:57:08
そのまま進め
728デフォルトの名無しさん:2007/12/12(水) 16:57:48
例外を投げたメソッドの実行を続けるということ?
続行できないから例外投げてるのに戻してどうすんの
だいたいなんで正常に戻せたってわかるの? クラスやメソッドの実装によるだろそんなの
729デフォルトの名無しさん:2007/12/12(水) 17:10:27
catchの中で正常に戻せる意味が分からない
それはもともと例外を投げるべきではなかったんじゃないか
730デフォルトの名無しさん:2007/12/12(水) 17:11:56
っ ソフトを再起動してもらう
731デフォルトの名無しさん:2007/12/12(水) 17:13:36
復活の呪文
732デフォルトの名無しさん:2007/12/12(水) 17:17:03
ぴぴる ぴる ぴ(ry
733デフォルトの名無しさん:2007/12/12(水) 17:20:30
try
{
 ケーブルが抜けていたとか
 ディスクの入れ忘れとか
 電源入れ忘れとか
}
catch
{
 えらー表示した
 対処された
}

そんな感じの場合なんだけど
734デフォルトの名無しさん:2007/12/12(水) 17:23:52
じゃあそのまま進めばいいだろ
とりあえずキャッチしておけば実行停止することはないんだからあとは君の判断で
735デフォルトの名無しさん:2007/12/12(水) 17:28:04
while (true) {
 try {
  例外の起きる処理;
  break; // 完了
 } catch ( .. ) {
  if ( ! Retry ) break;
 }
}
736デフォルトの名無しさん:2007/12/12(水) 17:31:45
例外は有害だから使うべきではない。
737デフォルトの名無しさん:2007/12/12(水) 17:32:53
while(true)
{
 try
 {
 やってみる();
  break;
 }
 catch(デバイス見つからないException)
 {
  if(ShowDialog("デバイス見つからないよ") == Result.Cancel))
   throw new CancelException("実行はキャンセルされました");
 }
 catch(ディスク入ってないException)
 {
  if(ShowDialog("ディスク入ってないよ") == Result.Candel))
   throw new CancelException("実行はキャンセルされました");
 }
}
738デフォルトの名無しさん:2007/12/12(水) 17:34:10
try
{
 ケーブルが抜けていたとか
 ディスクの入れ忘れとか
 電源入れ忘れとか
}
catch
{
 ケーブルを挿すとか
 ディスクを入れるとか
 電源を入れるとか
}
739デフォルトの名無しさん:2007/12/12(水) 17:46:25
リトライとかはcatch内じゃなくてもっと上の仕事じゃないか?
740デフォルトの名無しさん:2007/12/12(水) 17:58:22
その場で出来るものはその場でやらないとわけわからなくなると思うが
741デフォルトの名無しさん:2007/12/12(水) 18:07:43
>>740
リトライが必要な処理群としてまとめておいて呼び出し側で再呼び出しした方がイクナイ?
742デフォルトの名無しさん:2007/12/12(水) 18:08:33
>>741
ソースコードで頼む
743デフォルトの名無しさん:2007/12/12(水) 18:10:19
つまりTryGetValueか
744デフォルトの名無しさん:2007/12/12(水) 18:11:34
GetLastError()
有り得ない値返し
エラーコード返し
BOOL返し
HRESULT返し
C++の例外
.netの例外
構造化例外
が入り乱れるVCよりましじゃないか。
745デフォルトの名無しさん:2007/12/12(水) 18:12:00
再利用してソースが分かりやすくなるならいいんだけどな
分岐では分かりにくくなることが往々にしてある
746デフォルトの名無しさん:2007/12/12(水) 18:23:01
t6rs4:s.td@84s4:s.tfvsc;c@;d@'uetu
747デフォルトの名無しさん:2007/12/12(水) 18:40:44
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しますか?
748デフォルトの名無しさん:2007/12/12(水) 18:57:14
まず
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だけキャッチすればいいんじゃねえの
何がしたいのかよくわからんけど
749デフォルトの名無しさん:2007/12/12(水) 19:05:01
>>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

みたいにまとめてキャッチするかってことです。
750デフォルトの名無しさん:2007/12/12(水) 19:09:11
>>749
InvalidCastExceptionをそのまま捕まえるのはいただけない
catchするのはバグによる例外でないことが明らかなものにするべきだ
エラー処理に何をするのか、DBNullが帰ってくる頻度がどのくらいで
例外がパフォーマンスに影響するのかによって変わってくる
751デフォルトの名無しさん:2007/12/12(水) 19:14:01
>>750
たしかに、NULLが入ってるデータが多いと使い物にならないくらい遅くなりますね。

それでは、基本的にNULLは入ってないデータだけど、NOT NULL制約がないので「NULLもありえる」という
程度で。
例外は>>748みたいなラッパーで、独自のものを投げるという状況で。

ifでチェックしたほうがいいか、まとめて例外で処理したほうがいいか。
752デフォルトの名無しさん:2007/12/12(水) 19:15:17
お前ら例外が好きだな
753デフォルトの名無しさん:2007/12/12(水) 19:35:51
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){ エラー処理 }
}

例外がパフォーマンスを脅かすならこうかな
754デフォルトの名無しさん:2007/12/12(水) 19:42:12
横から失礼
例外投げるとパフォーマンスを脅かすってのはなんで?
例外クラスのインスタンスを生成するから?
それとも別のもっと大きな要因があるのかな
755デフォルトの名無しさん:2007/12/12(水) 19:45:32
URIを返す関数で、失敗した場合の理由を
return new Uri("error://imifumei/");
みたいな感じで返すのはありですか?
756デフォルトの名無しさん:2007/12/12(水) 19:46:45
間違った
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){ エラー処理 }
}

こうでした
757デフォルトの名無しさん:2007/12/12(水) 19:59:14
見たか
これがC# 3.0の力だ
早く乗り換えたまえ
758デフォルトの名無しさん:2007/12/12(水) 20:07:01
>>755
なしです
例外またはTry〜を使いなさい
759デフォルトの名無しさん:2007/12/12(水) 20:09:41
>>758
nullを返すのは?
760デフォルトの名無しさん:2007/12/12(水) 20:10:33
>>759
個人的には、名前の末尾にOrNullをつけないとなしと考えている
つければあり
761デフォルトの名無しさん:2007/12/12(水) 20:14:19
やっぱなしですか。
762デフォルトの名無しさん:2007/12/12(水) 20:16:43
100%なしです
763デフォルトの名無しさん:2007/12/12(水) 20:19:56
例外使わないって人はリリース後のバグどうするんだ?
それにテスト後にmainにtry〜catch追加したらテストやり直しだろ
異常系のテストエビデンスに再現性無くなるじゃん
個人作成やパッケージ等すべて自分達で責任取れるものならいいけどさ
764デフォルトの名無しさん:2007/12/12(水) 20:21:34
OrNullってどういうこと。
見たことも聞いたこともない命名規則だな。
765デフォルトの名無しさん:2007/12/12(水) 20:22:07
GetValueOrNull
どっちだよw
766デフォルトの名無しさん:2007/12/12(水) 20:25:02
nullable
767デフォルトの名無しさん:2007/12/12(水) 20:26:51
ヌーブラ
768デフォルトの名無しさん:2007/12/12(水) 20:27:05
>>763
バグじゃなくて仕様の中に処理するって書いてある例外は開発中ももちろんキャッチする
問題はそれ以外だ
それ以外が飛んできたらバグだ
これは開発完了したときには飛んでくることがないのが理想だけど
そうもいってられないのでcatch(Exception)で捕まえる文を開発完了後に付け加える
で、謝罪文を表示して終了すればいい
これをテストする必要は別にない
769デフォルトの名無しさん:2007/12/12(水) 20:27:43
うわー首が飛ぶよ
770デフォルトの名無しさん:2007/12/12(水) 20:28:52
LINQでは
First
FirstOrDefault

といった感じでデフォルト値が返りうる場合はOrDefaultをつける
OrNullって書いてなきゃ絶対にnulのチェックを忘れるから俺はOrNullと書くべきだと考えている
771デフォルトの名無しさん:2007/12/12(水) 20:30:39
>>768
多分噛み合ってないんだけど
納品先のあるプログラムでテスト後にソース改変は一切NGだろ?

バイナリのタイムスタンプとCRCが一致しないテスト結果でもOKってなら
何も言えないな
772デフォルトの名無しさん:2007/12/12(水) 20:35:00
>>771
じゃあ付け加えなきゃいい
万一の場合に備えて例外のメッセージを丁寧語にすることを心がけなきゃならんが
ちゃんと出来てるならほんとはcatch(Exception)なんていらん
773デフォルトの名無しさん:2007/12/12(水) 20:41:28







                     エラーかもね。
                     たぶんお前らのミスな。

                          [OK]



774デフォルトの名無しさん:2007/12/12(水) 20:42:34
>>772
>ちゃんと出来てるならほんとはcatch(Exception)なんていらん
これはマじゃない予感・・・
775デフォルトの名無しさん:2007/12/12(水) 20:47:31
>>772
また噛み合ってないが、バグ0にはできない。現実的に。
だから「ちゃんとできている」って言うのは実現困難

当然メソッド単位にtry〜catch入れた上での単体テストを通してるし
mainにも付け加えないんじゃ無くて最初から入れてる

たとえプログラムが原因じゃなくてもトラップできる例外はすべて
プログラムの管理しているエラー処理+ログで処理する
それを元に障害対応しないと対応できない
リリース後に 「プログラムのせいかどうかわからんがエラー終了する」
なんて状況になったら誰が対応するの?
自分達のプログラムが原因じゃない証明をする際にも証拠は必要だし
776デフォルトの名無しさん:2007/12/12(水) 20:49:28
チャンネル争いしてる時にyozuca出てきたけどあんなに可愛いのか
今度イベントあったら絶対見に行くわ
777デフォルトの名無しさん:2007/12/12(水) 20:54:17
>>775
出来ました、テストしてください、という段階でmainにcatch(Exception)を付け加える
それじゃダメなのか?
778デフォルトの名無しさん:2007/12/12(水) 21:16:30
今組んでるの納品したらこれ買うつもりだが。まあ趣味なら何でもいいんじゃないの。
ttp://www.gtnet.co.jp/home/top/usedcar_syosai.asp?NETCODE=7&SHATEN=0510&ZAIKO=1000340500
779デフォルトの名無しさん:2007/12/12(水) 21:18:56
走行距離100kmか。
普通試乗で自分向きじゃないとか気づくだろ。
780デフォルトの名無しさん:2007/12/12(水) 21:31:08
前から見たらZじゃんw
781デフォルトの名無しさん:2007/12/12(水) 22:26:28
想定される例外は全て処理せよ的な規約を掲げた開発が
うまく行ってるのを見たことがない。
現実の開発要員は思いのほかレベルが低いもんだよ。
保守や改造でもどんどん壊れて行くしね。
十分な費用がかけられる開発ならいいんだけどね〜
782デフォルトの名無しさん:2007/12/12(水) 22:27:31
ちゃんとキャッチする例外としない例外を分けなきゃダメだっての
全て処理せよってのはどういうこっちゃ
783デフォルトの名無しさん:2007/12/12(水) 22:37:07
それをどうやってはっきり定義するの?
784デフォルトの名無しさん:2007/12/12(水) 22:41:21
正しく呼び出さなかったときの例外→キャッチするべきではない
正しく呼び出したとしても起こる例外→キャッチしなければならない
785デフォルトの名無しさん:2007/12/12(水) 22:53:59
↓の文字列が正しい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
786デフォルトの名無しさん:2007/12/12(水) 23:00:23
Regex.Match(hoge, @"http://.*\.xml").ToString();
787デフォルトの名無しさん:2007/12/12(水) 23:01:15
例えば指定されたファイルを読む処理があるとき、
有るはずのファイルが読めなければ
キャッチする必要があるのだろうが、
渡された引数がそもそも間違ってた場合は
キャッチしちゃダメだってことだなw
788デフォルトの名無しさん:2007/12/12(水) 23:05:54
ArgumentExceptionとかInvalidOperationExceptionとか
キャスト失敗とか配列の外側を読んだとかぬるぽとか
そういうのは全部キャッチしちゃダメ
789デフォルトの名無しさん:2007/12/12(水) 23:06:43
そうなるとその判断は引数が決まる元になる位置まで
さかのぼらざるを得ないが、そんなのを全体で完全に
矛盾なく出来るとは思えない。
一体誰がそれを決めるの?

せれともそんなのは関係なく、
例えばArgumentExeption系以外はキャッチするとかになるの?
790デフォルトの名無しさん:2007/12/12(水) 23:09:09
引数が悪いのか環境的な本当の例外かなんて
結局分からんてことだろ?
791デフォルトの名無しさん:2007/12/12(水) 23:09:35
メソッドの正しい呼び出し方はメソッド作成者が決める
違反してたら例外が投げられる
それはキャッチしちゃいけない

正しい呼び出しの時に失敗したならばそれとは違う例外が投げられる
それはキャッチしなきゃならん
792デフォルトの名無しさん:2007/12/12(水) 23:11:02
意図的にnull渡したのか、
γ線でメモリが化けたのか分からない。
793デフォルトの名無しさん:2007/12/12(水) 23:12:14
null渡していいとこは引数名にOrNullってつけてくれ
じゃないとわからん
794デフォルトの名無しさん:2007/12/12(水) 23:16:10
キャッチしてどう処理するのかもよく分からない。
結局回復できない場合も多いから、戻り値とかで返さざるを得ないの?
UI層レベルでは想定されるものはキャッチするだろうけど
もっと下層ではいかんともしがたい気がする。
795デフォルトの名無しさん:2007/12/12(水) 23:17:00
コントロールのプロパティってフォームデザイナで編集したり
コード中で直接設定したりする方法があるのですがどういう風に使い分ければいいんですか?
796デフォルトの名無しさん:2007/12/12(水) 23:17:55
それがバグじゃなくて想定内のものなら
キャッチしてエラーメッセージを出して入力待ちに戻れ
797デフォルトの名無しさん:2007/12/12(水) 23:18:48
OrNullつけても結局仕様確認はいるんだから
ドキュメントコメントでいい気もする。
あ、レビューはやりにくいかな…
798デフォルトの名無しさん:2007/12/12(水) 23:20:12
>>796んなこと出来るのはUI層ぐらいだろう。
もっと下層ではどうすんの?
799デフォルトの名無しさん:2007/12/12(水) 23:21:12
>>797
null入れていいかどうか、nullが返るかどうかなんて一回見たってどうせ忘れる
OrNullって書いてあればソース見ただけでnullチェックして無いのが一発でバグって分かる
800デフォルトの名無しさん:2007/12/12(水) 23:21:53
下層じゃ呼ぶ側の問題なのか本当の例外事象なのかなんて分からないんだぜ?
801デフォルトの名無しさん:2007/12/12(水) 23:22:23
>>795

特に理由がなければデザイナを使う
動的(例:ボタンを押したら〜する)にコントロールを作ったり、プロパティを変更したいときはコードで
802デフォルトの名無しさん:2007/12/12(水) 23:23:01
>>798
自分のメソッドの仕様に書いてある通りの例外に編み変えて再スローする
803デフォルトの名無しさん:2007/12/12(水) 23:23:19
あえ?呼ばれる側でのnullチェックの話か?
804デフォルトの名無しさん:2007/12/12(水) 23:25:25
>>803
呼ばれる側もそうだし呼ぶ側もそうだ
OrNullって書くようにしてからnullチェックし忘れは消えた
805デフォルトの名無しさん:2007/12/12(水) 23:25:37
>>802まあそうなるんだけど
言いたかったのはそんだけちゃんとやっても呼び出し側のバグに対しては効果ないよねってこと。
806デフォルトの名無しさん:2007/12/12(水) 23:27:13
nullチェックし忘れって
nullチェックはどっちの場合でも要るんじゃ…
807デフォルトの名無しさん:2007/12/12(水) 23:28:42
>>801
なるほど、初期設定はデザイナでして実行中の変更はコードでするみたいな感じですね。
808デフォルトの名無しさん:2007/12/12(水) 23:29:00
>>805
呼び出し側の引数かなんかの違反なら
呼び出し側の違反ですよってわかる例外を投げる
正しく呼び出したときの例外ならそれと分かる例外を投げる
さらに下のメソッドから飛んでくる例外がそこをきちんと分けていれば
自分も判断できる
809デフォルトの名無しさん:2007/12/12(水) 23:35:08
結局、呼び出し側の要因であっても何であっても
エラー発生時の対処は必要なんだから全て例外処理が
必要ってことおk?
810デフォルトの名無しさん:2007/12/12(水) 23:35:45
非null引数なら入ってくるときにnullをはじけばいいのだが
nullを受け入れて変数に入れた場合は、その変数を使うたびにnullチェックが要る
変数名にOrNullって書いてあればチェックし忘れはなくなる
811デフォルトの名無しさん:2007/12/12(水) 23:40:29
そもそも引数でnull渡すケースってあるの?
812デフォルトの名無しさん:2007/12/12(水) 23:40:42
>>809
呼び出し側の要因である場合必要な処置というのは
バグを認識させ直させることだ
キャッチしなければそれが最もよく果たせる
例外が投げられた瞬間でデバッガがブレイクし何が間違っていたかが分かる
813デフォルトの名無しさん:2007/12/12(水) 23:41:35
>>812
Trace吐けばいいのでは
814デフォルトの名無しさん:2007/12/12(水) 23:44:59
>>813
マウスポインタおいたら変数の値がぱっとわかり
呼び出し履歴をずずっと辿っていくこともできるようなトレースならな
815デフォルトの名無しさん:2007/12/12(水) 23:47:03
>>786

MatchCollection mc = Regex.Matches(hoge.ToLower(), @"(http/1.[0-1] 200)|(https?://.*\.xml)");
if (mc.Count < 2)
{
 // 異常
}
816デフォルトの名無しさん:2007/12/12(水) 23:47:49
バグ対処には例外処理せず.NETの例外画面で・・・なんて人は趣味グラマーなんだよ
そんな画面出しても済ませられる程度のAPなんだ
817デフォルトの名無しさん:2007/12/12(水) 23:49:06
>>808それが呼ばれる側では判断できないって話じゃないのか?
818デフォルトの名無しさん:2007/12/12(水) 23:49:16
>>816
多分、昨日からずっとそのこと言ってる人いますね
819デフォルトの名無しさん:2007/12/12(水) 23:49:45
お前ら本当に例外が好きだなw
820デフォルトの名無しさん:2007/12/12(水) 23:50:01
判断できるなら分岐処理でいいので例外は不必要でしょう
821デフォルトの名無しさん:2007/12/12(水) 23:50:55
俺は例外で、この話題飽きたお 早く次のネタ投下して欲しいお
822デフォルトの名無しさん:2007/12/12(水) 23:51:48
すみません!リストビューの行の高さは変えられますか?
823デフォルトの名無しさん:2007/12/12(水) 23:52:39
>>817
なんで判断できないんだ?
メソッドの正しい呼び出し方を決めるのは自分だぞ
824デフォルトの名無しさん:2007/12/12(水) 23:52:59
ファイルが見つからない例外が発生したとき、
それがバグなのかそうでないのかなんて判断できない。
825デフォルトの名無しさん:2007/12/13(木) 00:01:08
>>824
呼び出し方自体はあってるなら
FileNotFoundExceptionを投げればいい

パス文字列として正しくないならInvalidPathExceptionかなんかを投げればいい
メソッド作成者が、パス文字列として正しくない文字列を渡すのが違反だと考えるなら
ArgumentExceptionにしてもいい
もちろんパス文字列として正しいかどうかを判断する方法は別途用意しなきゃならないし
それを判断してから呼び出すのは無駄だから普通は
パス文字列として正しくないものも違反とは考えないという設計にするだろうが

呼び出し側はパス文字列として正しくないのが渡されるのがバグである場合はキャッチしなければいいし
ユーザーが入力したのをそのまま渡すとかするならキャッチしなきゃいけない
826デフォルトの名無しさん:2007/12/13(木) 00:02:16
それってふ#[email protected]?
827デフォルトの名無しさん:2007/12/13(木) 00:04:26
ファイルが存在しないときにArgumentExceptionを投げる関数もあるので、
ArgumentExceptionは一概に呼び出し側の要因とは言えない。
エラーチェックしろって話だが。
828デフォルトの名無しさん:2007/12/13(木) 00:06:50
それってぁいるはんどるつくるときにかってにかえってこないか?
829デフォルトの名無しさん:2007/12/13(木) 00:09:07
>>827
どれだよ
正しくない呼び出しと区別できないんだったらそれはただの設計ミスだ
830デフォルトの名無しさん:2007/12/13(木) 00:11:44
FileSystemWatcher.Pathだ、まいったかこの野郎。
まぁファイルの存在確認もしない奴は死んだ方が良いけど。
831デフォルトの名無しさん:2007/12/13(木) 00:14:19
呼び出し側が正しいけどファイルがないときと
呼び出し側が間違っててファイルがないときがあるだろ。
そんなの呼び出される側じゃ分からない。
結局同じ例外なり返さざるを得ない。
832デフォルトの名無しさん:2007/12/13(木) 00:14:44
>>830
そりゃパスを入れるプロパティにパスじゃないものが入ったらArgumentExceptionだろ
そりゃ違反だ
833デフォルトの名無しさん:2007/12/13(木) 00:15:08
>>830
それの後にファイルが消失したら?
834デフォルトの名無しさん:2007/12/13(木) 00:16:22
どっちにしてもtryは全て必要ってことで
835デフォルトの名無しさん:2007/12/13(木) 00:16:54
Tryは有害
836デフォルトの名無しさん:2007/12/13(木) 00:19:28
>>831
そりゃそうだな
メソッドに出来るのは自分が決めたルールに違反を犯したかどうかを通知するだけだ
837デフォルトの名無しさん:2007/12/13(木) 00:21:51
有名どころですら統一見解だせないものをここでぐだぐだ議論してもね。
838デフォルトの名無しさん:2007/12/13(木) 00:23:42
tryはしてもいいが全てをキャッチするのは誤りだ
キャッチしていいものと、しちゃいけないものがある
839デフォルトの名無しさん:2007/12/13(木) 00:24:33
>>832
パスが不正かどうかはファイルが存在するしないに関係しないだろ。
こういうのはDirectoryNotFoundExceptionを返すケース。
840デフォルトの名無しさん:2007/12/13(木) 00:27:27
>>839
>ArgumentException

>指定したパスにワイルドカード文字が含まれています。
>または
>指定したパスに無効なパス文字が含まれています。
http://msdn2.microsoft.com/ja-jp/library/system.io.filesystemwatcher.path(VS.80).aspx

と書いてあるがこれは間違いか?
841デフォルトの名無しさん:2007/12/13(木) 00:35:15
おろ?うちのMSDNにはこうあるけど。

>指定されたパスが存在しないか、見つかりませんでした。
>または
>指定したパスにワイルドカード文字が含まれています。
>または
>指定したパスに無効なパス文字が含まれています。
842デフォルトの名無しさん:2007/12/13(木) 00:40:58
>>841
パスが無効とNot Foundとnullとは
分けた方がいいと思うんだがなあ
まあそんなに困るケースは思いつかないが
843デフォルトの名無しさん:2007/12/13(木) 00:44:59
catchしないで実行時エラー出るようなプログラムは駄目だろ
844デフォルトの名無しさん:2007/12/13(木) 00:47:11
>>843
完成版には一番上にcatch(Exception)入れなきゃいかんだろうが
開発中はいれちゃいかんという話だ
想定外の例外が来たら安全に実行が続けられるかなんて分からんのだから
終了するしかない
845デフォルトの名無しさん:2007/12/13(木) 00:49:11
障害系の単体テスト結果はどうするの?
846デフォルトの名無しさん:2007/12/13(木) 00:54:20
例外祭り終了
847デフォルトの名無しさん:2007/12/13(木) 00:54:21
>>845
どういう意味か分からんが
単体テストなら正しい例外が返ってくるかcatchして調べる
想定外の例外が返ってきたらバグだからそれはcatchしない
848デフォルトの名無しさん:2007/12/13(木) 01:12:42
もう余所でやってくれ
質問者がスルーされまくってるだろ
どれが質問者から分からないくらいに
849デフォルトの名無しさん:2007/12/13(木) 04:31:09
例外をcatchするとデバッグしにくいという問題は簡単に回避できる。
その答えは・・・続きはこちらで、みんな移動頼む。
C♯, C#相談室 Part34
http://pc11.2ch.net/test/read.cgi/tech/1162467959/507-
850デフォルトの名無しさん:2007/12/13(木) 09:28:16
エスケープシーケンス文字ってどうして%とか\とか{}つかうの?
もっと存在しない記号にすれば良いのに
851デフォルトの名無しさん:2007/12/13(木) 09:31:00
いちばいと
852デフォルトの名無しさん:2007/12/13(木) 10:07:30
存在しない記号って例えば?
853デフォルトの名無しさん:2007/12/13(木) 11:34:54
₩とか
854デフォルトの名無しさん:2007/12/13(木) 11:43:25
そういや、韓国語版DOSのプロンプトは、C:₩ だったなw
855デフォルトの名無しさん:2007/12/13(木) 11:47:50
イギリス人って
£include <stdio.h>
とか書いてたの?
856デフォルトの名無しさん:2007/12/13(木) 12:12:45
dとかj
みたいに
857デフォルトの名無しさん:2007/12/13(木) 12:14:58
w←みたいでうける
858デフォルトの名無しさん:2007/12/13(木) 12:17:11
エスケープ文字よりもC++は記号の使いまわしすぎだろ
859デフォルトの名無しさん:2007/12/13(木) 12:23:22
101キーボードで打てないといけないからね。
860デフォルトの名無しさん:2007/12/13(木) 12:34:00
トライグラフ もあるけどなーw
861デフォルトの名無しさん:2007/12/13(木) 13:00:22
みなさん、C#を使って作るのは
やっぱりWinアプリですか?
862デフォルトの名無しさん:2007/12/13(木) 13:15:12
Mono
863デフォルトの名無しさん:2007/12/13(木) 14:23:18
webbrowserでサイトを表示するとテンポラリフォルダに勝手にファイルが溜まっていくんですが、
プログラム終了時にフォルダ内全削除してから終了させるのってどうやるんでしょうか?
864デフォルトの名無しさん:2007/12/13(木) 14:52:15
おいお例外が終わったら過疎ったじゃないか
865デフォルトの名無しさん:2007/12/13(木) 14:54:37
デリゲートとカスタム属性に泣きそうになってるC++プログラマです・・・。
誰か慰めてください><
866デフォルトの名無しさん:2007/12/13(木) 14:56:43
>>865
犬にでも噛まれたと思ってあきらめなさい。
867デフォルトの名無しさん:2007/12/13(木) 14:57:10
throw >>865;
868デフォルトの名無しさん:2007/12/13(木) 15:02:40
catch(>>865){}
869デフォルトの名無しさん:2007/12/13(木) 15:27:03
>>868
catch(>>865){}
         ↑
完全スルーカワイソス
870デフォルトの名無しさん:2007/12/13(木) 16:19:32
>>830
ファイルの存在確認からOpenまでの間にファイルが消えることがあるだろ
並列処理してたらそういうことはよくある
確認用メソッドと取得用メソッドは分けてはいけない
871デフォルトの名無しさん:2007/12/13(木) 22:02:26
>確認用メソッドと取得用メソッドは分けてはいけない
そういう問題かよ
872デフォルトの名無しさん:2007/12/13(木) 22:17:46
ActiveDirectoryに存在している全てのプライマリグループを取得するには
どうすればいいかな?
873デフォルトの名無しさん:2007/12/13(木) 23:57:43
ListViewの仮想モードがよく分からないのですが、表示件数が変わるときは
常にVirtualListSizeを操作するのでしょうか?
また、一般的な使用方法とかはList<ListViewItem>みたいなリストを保持して、
RetrieveVirtualItemで処理するのでしょうか?
874デフォルトの名無しさん:2007/12/14(金) 01:49:46
今C#の勉強がてら別アプリケーションのキャプションを取得したりする物を作っています
現在の処理の流れとしては
Process.GetProcessesByNameでプロセス取得

取得したプロセス.Threadsをforeachでまわして
Win32APIのEnumThreadWindowsを使ってウィンドハンドル取得

EnumThreadWindowsの中でEnumChildWindowsを使って全部の子ウィンドを取得

GetWindowTextを使用してキャプション取得

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

*クラス

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

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

*名前空間

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

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

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

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

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

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

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

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

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

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

>VirtualAllocExで仮想メモリを割り当てて、開放しなかったけれども
解放しなかったのはメモリなのか?
957デフォルトの名無しさん:2007/12/15(土) 23:14:38
>>951
@をつけると\がエスケープ文字でなくなる。
VBはエスケープ文字がないし、C++は"c:\\temp"と\を重ねることでエスケープ文字でなくす。
958デフォルトの名無しさん:2007/12/15(土) 23:18:10
>>955
ありがとうございます。
会社の環境はVS2005なのですが、ちゃんと
aspx
aspx.cs
designer.cs
とワンセットで表示されるのですが、家の環境はWebDevelopperで
designer.csがソリューションエクスプローラに表示されません。
aspxなどの場所にdesigner.csファイルもありません。
これはどうやって表示させるのでしょうか?
WebDevelopperはソリューションファイルやプロジェクトファイルも無いんですよ(^^;
なので、いつもファイルをダブルクリックして立ち上げるのではなく
WebDevelopperを開いて、スターと画面から最近実行したソリューションの一覧から選択してる・・・
959デフォルトの名無しさん:2007/12/15(土) 23:22:35
>>956
メモリもプロセスハンドルも両方です
VirtualFreeしていないということです
960デフォルトの名無しさん:2007/12/15(土) 23:30:17
>>958
そんな初歩的なことを聞くな
会社で聞いたら一言で済む
961デフォルトの名無しさん:2007/12/15(土) 23:35:01
>>1
962デフォルトの名無しさん:2007/12/15(土) 23:35:42
今趣味でエロゲを作っているんだけど、ソースを晒せば
プログラミング構造に問題があるか、簡単なアドバイスをもらえたりするんでしょうか?
趣味で自分専用にやっているだけなので動けばいいんだけど
一人で黙々とやっているだけなのでだめなところに気づきにくい
963デフォルトの名無しさん:2007/12/15(土) 23:36:14
>>960
会社じゃあWebDevelopperなんて使ってないもんで誰もわからないと思われまする。。
964デフォルトの名無しさん:2007/12/15(土) 23:42:29
>>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 /:.:.:.:ヾニヽ
            , ィ/:.:い ヽ `` ー一 ''"/,/,/:.:.:.:.:.:.:.:ソ }- 、、
           / /:.:.:.:ヽヽ `' ー‐ -- '"//:.:.:.:.:.:.:/ /   ` 丶、
        ,, - {  ヾ:.:.:.:.ヽ丶     //:.:.:.:.:, -'" ,/       ` 丶 、
     ,, - ''"   丶、 `` ーゝ、ヽ.,_,,ィ"ェくユ- ''" , ィ"
966デフォルトの名無しさん:2007/12/15(土) 23:47:43
>>962

ゲ製板とかに行った方がいい
C#ってそんなに特殊な言語じゃないからC#知らなくてもC++かJava知ってる人なら読めるはず
967デフォルトの名無しさん:2007/12/15(土) 23:48:19
>>957
なるほど。わかりました。
968962:2007/12/15(土) 23:51:36
>>964
そうですか・・・
オブジェクト指向でプログラミングできているのかよくわからないんですけど
私の1000行のソースが上級者なら500行ぐらいに簡潔に表せたりするのかな?
同じ機能をあらゆるメソッドで何度も使う場合、それらをクラスにするようにしていれば
一応オブジェクト指向プログラミングできているのかな

>>965
な・・・なんですか?w
969デフォルトの名無しさん:2007/12/15(土) 23:54:15
そんなふうな不安を抱えていた時期が俺にもありました。




気楽に行こうぜ相棒
970デフォルトの名無しさん:2007/12/16(日) 00:19:13
>同じ機能をあらゆるメソッドで何度も使う場合、それらをクラスにするようにしていれば
>一応オブジェクト指向プログラミングできているのかな
   。 。
  / / ポーン!
( Д )

971962:2007/12/16(日) 00:28:51
972デフォルトの名無しさん:2007/12/16(日) 00:30:55
何気ない会話も私には意味があるの
あなただけ特別と思ってる
出会いは偶然で何処にでも在るとしても
二人なら永遠のストーリー
973デフォルトの名無しさん:2007/12/16(日) 00:40:23
>>968
オブジェクト指向っていうのはあくまで「指向」つまり考え方なわけで
「これをやればオブジェクト指向だぜ!」という明確な決まりはありませんのよ
974デフォルトの名無しさん:2007/12/16(日) 01:48:40
>>968
オブジェクト指向・・・
部品を作ってそれを組み合わせるって認識してるけど・・・どうなんだろう

エロゲなら例えば、
背景、画像、テキストなどの描画を管理するコンポジションクラス(レイヤー管理とか)
・背景、登場人物描画管理パーツクラス
・テキストボックス、テキスト描画管理パーツクラス
全体の動作・入力を管理するコンポジションクラス
・通常テキストの管理するパーツクラス
・選択肢発生・処理パーツクラス
・セーブ・ロード、オプションなどを管理するパーツクラス
描画・動作・入力対応を統括するクラス
登場人物のクラス(名前、画像、内部パラメータetc)
テキストをtxtファイルから読み込むクラス(後で修正を楽に行うため)
分岐情報やテキストの割り当て・管理を行うクラス

見たいにそれぞれの部品を作って、組み合わせるとか?
どういう風に部品分解するかは人それぞれだし、個人的には上記の例はさらにパーツクラスに分解されていき、
大体最大でも500行程度のクラスになると思う。(大体50〜200行程度になることが多いけど)


975デフォルトの名無しさん:2007/12/16(日) 01:56:21
ジェネリックメソッドを書くときに、まだ<T>と書いてないときに
戻り値の型をTと書こうとすると、IntelliSenceが勝手にThreadStaticAttribute
と入れてしまうのですが、うまい回避法はないですか?
Escを押せば回避できるのはしってますが、もっとスマートな方法はないでしょうか
976デフォルトの名無しさん:2007/12/16(日) 02:15:06
>>975
まったく関係ないが、初めてその属性を知った
こんなんあったんだ
977デフォルトの名無しさん:2007/12/16(日) 03:15:32
質問させてください。
Visual C# 2005 EEを使っているのですが、
0x80042740
というエラーがでてデザイナが表示されなくなってしまいました。
デザイナが表示されないこと以外は何の問題もなく動作します。
調べてもいまいち分りませんでした。
直す方法があれば教えていただきたいです。よろしくお願いいたします。
978デフォルトの名無しさん:2007/12/16(日) 03:21:48
エラーメッセージを端折らずに全部書きなよ
979デフォルトの名無しさん:2007/12/16(日) 03:24:36
申し訳ありません。よろしくお願いします。

場所 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)
980デフォルトの名無しさん:2007/12/16(日) 03:33:32
981デフォルトの名無しさん:2007/12/16(日) 03:37:40
申し訳ありません、本当に・・・。これでいいのでしょうか・・・。


デザイナの読み込み時に 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)
982デフォルトの名無しさん:2007/12/16(日) 06:05:04
>>981
これは特定のフォームで出てるの?
もしそうならコンストラクタのInitializeComponent()の前後に追加したコードをコメントにしてみて。
983デフォルトの名無しさん:2007/12/16(日) 06:34:21
何かがnullのままだったり描画に関係するフィールドが想定値域の範囲外だったりと
初期化がうまくいってない気がする
コードうpすれば多分わかるけど
984あにす ◆sGTL1yK0.6 :2007/12/16(日) 09:17:39
オブジェクト指向…それは擬人化。
クラスとは、萌えなのです。
985デフォルトの名無しさん:2007/12/16(日) 10:11:05
アニサキス
986962:2007/12/16(日) 11:39:50
>>974
私のプログラムはそんなに綺麗に役割分担できてないかも・・・・
あらゆるクラスがあらゆることをやっている感じになって
非常に修正が難しいプログラムになってます・・
設計をもう一度見直そう・・・
987デフォルトの名無しさん:2007/12/16(日) 11:51:21
あまり悩みすぎてもしょうがないよ
一番必要なのは経験だろうから

ずっと経ってから初期の自分のコードを見直すと丸ごと直したくて仕方ない衝動に駆られたりするけど
それはそういうものだと思う
988デフォルトの名無しさん:2007/12/16(日) 11:53:44
最初から完璧を目指そうとすると
一歩も動けなくなるのさ
989962:2007/12/16(日) 12:36:31
やさしさに感動
もう少し力抜いてやります
プログラムたのしー
990デフォルトの名無しさん:2007/12/16(日) 14:02:50
>>977
ジェネリックメソッドのコードスニペット作れば
991990:2007/12/16(日) 14:04:32
間違えた>>975
992デフォルトの名無しさん:2007/12/16(日) 14:07:54
スニペットを使う習慣を作るよりは
T Esc と入れる習慣を作る方が楽なような
993762: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)|
----------------------------------------
996デフォルトの名無しさん:2007/12/16(日) 18:34:40
Here is Japanese OK.
997デフォルトの名無しさん:2007/12/16(日) 18:46:37
お前こそちゃんとした英語書けよw
998デフォルトの名無しさん:2007/12/16(日) 19:31:12
ここには日本のOKがあります


でっていう
999デフォルトの名無しさん:2007/12/16(日) 19:54:19
新スレ
ふらっとC#,C♯,C#(初心者用) Part22
http://pc11.2ch.net/test/read.cgi/tech/1197802312/
1000デフォルトの名無しさん:2007/12/16(日) 19:57:00
ぬるぽ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。