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

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

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

前スレ

ふらっとC#,C♯,C#(初心者用) Part28
http://pc11.2ch.net/test/read.cgi/tech/1211688164/
2デフォルトの名無しさん:2008/07/22(火) 22:58:25
[プログラム板] C#, C♯, C#相談室 Part47
http://pc11.2ch.net/test/read.cgi/tech/1214038282/

WPF(XAML,XBAP,.NET3.5)GUIプログラミング
http://pc11.2ch.net/test/read.cgi/tech/1211453941/

Live2
http://pc11.2ch.net/test/read.cgi/tech/1203674757/

初心者のためのプログラミング言語ガイド Part9
http://pc11.2ch.net/test/read.cgi/tech/1210941509/
3デフォルトの名無しさん:2008/07/22(火) 22:59:15
4デフォルトの名無しさん:2008/07/22(火) 23:09:47
>>1
5デフォルトの名無しさん:2008/07/23(水) 01:33:02
>>1
6デフォルトの名無しさん:2008/07/23(水) 02:20:41
ジェネリックのwhere節で型パラメタをintやshortやlongなどの整数型に限って
それらの型同士の四則演算をするにはどうすればいいですか?
7デフォルトの名無しさん:2008/07/23(水) 02:34:39
無理
Expressionクラス使って無理矢理やれないこともないけど
8デフォルトの名無しさん:2008/07/23(水) 02:52:11
static T Add<T>(T a, T b) where T : struct {
var paramA = Expression.Parameter(typeof(T), "a");
var paramB = Expression.Parameter(typeof(T), "b");
var body = Expression.Add(paramA, paramB);
var lamdba = Expression.Lambda<Func<T, T, T>>(body, paramA, paramB).Compile();
return lamdba(a, b);
}
こんなかんじ
このまま使ったら毎回メソッド生成してとんでもなく遅いはずだからlamdbaはキャッシュしてね
9デフォルトの名無しさん:2008/07/23(水) 04:47:19
型パラメータの指定の方は、staticコンストラクタで

switch(typeof(T)) {
  case typeof(int):
  case typeof(short):
  case typeof(long):
    break;
  default:
    throw new Exception();
    // どうせ TypeInitializationException にされるが、
    // TypeParameterException とか作ってもいい
}

とかすると、where句で表現できない制限でも
インスタンスを生成/staticメンバを参照しようとした時点でエラーにできる

四則演算の方は、同じくstaticコンストラクタで>>8のデリゲートまでを生成して、

static T Add<T>(T a, T b) {
  return AddFunc(T, T); // AddFunc is Func<T, T, T>
}

とか
109:2008/07/23(水) 04:48:36
あと、俺は前に全ての演算をラップするクラスを作ったりしたな

定義されていない演算は使おうとすると例外投げたり、
元の型と相互に暗黙の型変換できるようにしたりして

// a, b is T
Operand<T> _a = a;
Operand<T> _b = b;
T c = _a + _b;
T d = _a << 8;

というふうにジェネリックで使えるようなやつ
11デフォルトの名無しさん:2008/07/23(水) 10:52:59
なるほど
ありがとうございます
12デフォルトの名無しさん:2008/07/23(水) 18:56:41
米国時間22日、マイクロソフトは「Xbox LIVE Community Games」を北米で今年後半から
開始すると発表した。その他の地域については2009年から逐次開始する予定。

Xbox LIVE Community Gamesは、XNA Game Studioで開発されたXbox360用ソフトを
Xbox Liveを通じ一般利用者へ販売することを可能とするサービス。

Xbox LIVE Community Gamesでの販売は、XNA開発者コミュニティ「XNA Creators Club」の
有料会員(年額9,800円)であれば誰でも行うことが可能となる。

販売価格については200〜800マイクロソフトポイントの間で自由に設定することができ、
手数料として売上の30%が引かれることとなる。

XNA Game Studioは、マイクロソフトが無償で公開しているVisual Studioをベースとした
ゲーム特化型の統合開発環境。.NET Framework及びDirectXをベースとしたライブラリ
「XNA Framework」を使用し、基本的には設定ひとつでXbox360及びWindowsへの両対応が
可能となる。

XNAについては、RPGツクールが次期バージョンでの対応を表明しており、日本での
普及にも期待がかかる。また、教育機関による学習教材としての採用も増加しており、
月刊ベーシックマガジンの休刊以降問題視されていた日本人ゲーム開発者の急激な
減少に歯止めをかける期待も持たれている。

http://news4xbox.blogspot.com/2008/07/xbox360.html
13デフォルトの名無しさん:2008/07/23(水) 22:05:03
TreeViewでノードが選択されたときに
それぞれのノードを判別する方法って
Text値で見分けるしかないのですか?
14デフォルトの名無しさん:2008/07/23(水) 22:44:34
や、TreeNodeそのもの使えば良いじゃん
15デフォルトの名無しさん:2008/07/23(水) 22:48:29
Tagプロパティに対応するオブジェクトを入れておいたりする
16デフォルトの名無しさん:2008/07/23(水) 23:01:27
>>14
TreeNodeそのものを使用とはどういう意味でしょうか?
ノードそれぞれに固有の番号が振り分けられているとか?
だとしたら、その番号はどうやって知ればいいのでしょうか?
最初、Index値を参照しようと思ったら、Index値は各ノードに
個別の値が振り分けられているわけではなかったので、断念しました。

>>15
検索していて、ちょうど今その方法を見つけました。
やはりそれしかないのでしょうか?
よく考えたら、Text値だとテキストの内容がかぶったら
判別できませんね。
17デフォルトの名無しさん:2008/07/24(木) 02:01:51
OpenFileDialog dlgFile = new OpenFileDialog();

if (dlgFile.ShowDialog() == DialogResult.OK)
{
dataSet1.ReadXml(dlgFile.FileName);
}

DataGridViewのDataSourceプロパティにdataSet1を指定しているんですが、
このメソッドを実行してもファイル読み込んだきり無反応です。
例外も起こりません

どうすれば表示できるようになるのでしょうか?
18デフォルトの名無しさん:2008/07/24(木) 02:03:25
>>17
どこに表示したいの?
19デフォルトの名無しさん:2008/07/24(木) 02:05:31
>>18
DataGridView
DataSourceにいれてやると勝手に表示してくれたりしないんですか?
20デフォルトの名無しさん:2008/07/24(木) 06:04:45
DataMember未指定とか
21デフォルトの名無しさん:2008/07/24(木) 09:43:36
>>17
dataSet1に定義されたTableを指定しないと…
22デフォルトの名無しさん:2008/07/24(木) 11:04:36
まず、ヘルプ読まないと。
23デフォルトの名無しさん:2008/07/24(木) 18:06:52
質問です。
 現在Microsoft Visual C# 2008 Express Edition を使っています。
 特に設定はイジっていませんが、実行すると必ずFormがVisual C#の後ろに隠れてしまいます。
 新しくプロジェクトを作っても、毎回後ろに隠れてしまいます。

 どうすれば元のようになりますでしょうか?
 よろしくお願いします。
24デフォルトの名無しさん:2008/07/24(木) 19:02:00
実行ってどうやってるの
25デフォルトの名無しさん:2008/07/24(木) 20:20:27
exeダブルクリック
26デフォルトの名無しさん:2008/07/24(木) 21:48:39
コンソールアプリだとRedirectStandardOutputをFalseにしても
標準出力が止められないんですが、何か止める方法はないでしょうか。
27デフォルトの名無しさん:2008/07/24(木) 22:22:58
すいません。めちゃくちゃ基本なんですが、キャストのことで質問させてください。

double d = 1278.86d;
double d2 = 100d;
double d3 = d * d2;
Console.WriteLine(d3.ToString());
int i = (int)(d3);
Console.WriteLine(i.ToString());

これで、一行目が127886
二行目が127885

になるのですが、これって正常ですか?
28デフォルトの名無しさん:2008/07/24(木) 22:28:06
正常です。理由が分からないなら、
まずデバッガの使い方を覚えることをお勧めします。
29デフォルトの名無しさん:2008/07/24(木) 22:47:16
>>26
むしろConsole.OutにTextWriter.Nullを指定するってのはどう?
30デフォルトの名無しさん:2008/07/24(木) 23:03:11
>>28
ありがとうございました。
d3が127885.99999999999になってました。
何故こんなことになるんでしょう?

double 1278.86をint 127886にしたいときはどのようにするのでしょうか?

レベルが低くてすいません・・・
よろしければご教示ください。
31デフォルトの名無しさん:2008/07/24(木) 23:07:38
decimal使えば
32デフォルトの名無しさん:2008/07/24(木) 23:16:28
Math.Roundしてからintにするってのは?
33デフォルトの名無しさん:2008/07/24(木) 23:16:34
34デフォルトの名無しさん:2008/07/24(木) 23:22:38
>>31-33
低レベルな質問にお付き合いいただいて、ありがとうございました。
Math.Round 調べてみます。
35デフォルトの名無しさん:2008/07/24(木) 23:26:30
今は誰も浮動小数点というか2進少数の話とか教えてくれんのかね
無難にdecimal使っとくよろし
36デフォルトの名無しさん:2008/07/24(木) 23:34:42
>>35
ありがとうございます。
decimalにしときます。
こういう時使うんですね・・・理解してませんでした。
37デフォルトの名無しさん:2008/07/24(木) 23:51:56
double d =0;
for(int i=0;i < 100;i++) d += 0.01;
Console.WriteLine(d);
38デフォルトの名無しさん:2008/07/25(金) 01:03:06
浮動小数点数は近似値だっていうことだね
39デフォルトの名無しさん:2008/07/25(金) 05:39:11
decimalは遅いからな。用途によって使い分けたいところだな。
40デフォルトの名無しさん:2008/07/26(土) 14:39:11
floating point は2進小数だからね。
10進数で有限小数でも、循環小数になっちゃうことが多々。

http://ufcpp.net/study/csharp/st_embeddedtype.html#decimal
41デフォルトの名無しさん:2008/07/26(土) 14:53:47
そこでRational型の出番です
42デフォルトの名無しさん:2008/07/27(日) 19:50:52
質問させてください
VisualStudioExpressEdition2008のC#入れて勉強しています
Javaからの転向組みなのですが、基本的な部分でわからないことが多いので質問させてください

・プロジェクトの保存場所を変更したい場合はどうすればいいのでしょうか?
・コンソールアプリケーションを作成していますが、成果物をコマンドラインで使う場合はどうすればいいのでしょうか?
・複数のMainメソッドを1個のプロジェクトに作成したいのですが、実行するMainメソッドごとに成果物を作成することは可能でしょうか?
・API仕様集のようなものはどこを読めば良いのでしょうか?
・namespaceを使っているのですが、ソースコードの保存はフォルダ構成を考慮する必要がないのでしょうか?

よろしくお願いします。
すでに、既出でしたら、○○嫁と叱って下さい
43デフォルトの名無しさん:2008/07/27(日) 20:04:10
>>42
プロジェクトはソリューションかプロジェクトのフォルダごとコピーでどこへでも。
自分専用のフォルダきってPATH通せばOK。
Mainは複数あってもいいがEXEを作るときにどれをエントリーポイントにするか指定しなくてはならない。
別のMainから起動したいなら別にEXEを作ってそれからキック。
マニュアルはMSDN。オンラインでOK。
namespaceとフォルダの関連性はなし。おまけにinternal scopeとnamespaceの関連性もない。
44デフォルトの名無しさん:2008/07/27(日) 22:03:22
>>43
レスありがとうございます
さらにわからない点があるので教えてください

・プロジェクトを作成してから、フォルダを移動するのではなく、最初から作成場所を指定する機能は無いのでしょうか?
http://www.microsoft.com/japan/msdn/vcsharp/は見ているのですが、そこから、API集にどうやっていけば良いのかわかりません

申し訳ありませんが、よろしくお願いいたします
45デフォルトの名無しさん:2008/07/27(日) 22:08:39
>>44
メニューの「ファイル」→「新規作成」→「プロジェクト」で開くダイアログに、フォルダを入力するところがあるよ。
46デフォルトの名無しさん:2008/07/27(日) 22:10:40
47デフォルトの名無しさん:2008/07/27(日) 22:15:03
>コンソールアプリケーションを作成していますが、成果物をコマンドラインで使う場合はどうすればいいのでしょうか?
Javaと違って.exeが出力されるので、.exeを直接起動できる。

>複数のMainメソッドを1個のプロジェクトに作成したいのですが、実行するMainメソッドごとに成果物を作成することは可能でしょうか?
1個のプロジェクトには1個のエントリポイントしか作れない。
Main()メソッドを複数作ることはできるが、エントリポイントとして使用できるのはひとつだけ。
ただし、1つのソリューションに複数のプロジェクトを含めることができるので、プロジェクトを分ければOK。

>プロジェクトを作成してから、フォルダを移動するのではなく、最初から作成場所を指定する機能は無いのでしょうか?
最初に保存するときに、保存場所を決めるように求められるべ?

>API集にどうやっていけば良いのかわかりません
クラス名で直接ググった方が早い。
48デフォルトの名無しさん:2008/07/27(日) 22:22:29
>>45
本当にExpressEditonのC#ですか?

>>44は単純に、基準となるディレクトリを設定したいだけだろ
My Document以下にworkspaceってディレクトリがあって下にVisual C#やVisual C++ってディレクトリを作ってそれぞれ管理したいってだけだろ。
Eclipseで言うところの[ワークスペースの変更]とおなじことがしたいんだろ?
僕もしたいけど方法分からない(´・ω・`)

>>44
>・http://www.microsoft.com/japan/msdn/vcsharp/は見ているのですが、そこから、API集にどうやっていけば良いのかわかりません
http://msdn.microsoft.com/ja-jp/library/ms229335%28VS.80%29.aspx  とか
MSDNで探すよりネームスペースでぐぐったほうが早い。
49デフォルトの名無しさん:2008/07/27(日) 22:26:30
普通にツール-オプションに設定するところあるよ。
50デフォルトの名無しさん:2008/07/27(日) 22:29:51
Expressならまず
ツール→オプション→すべての設定を表示にチェック→プロジェクトおよびソリューション
→作成時に新しいプロジェクトを保存 と 常にソリューションを表示 にチェック
これでプロジェクトを新規作成するときに場所が選べるようになってソリューションも表示される
既定のプロジェクトの場所もそのページで変えられる
51デフォルトの名無しさん:2008/07/27(日) 22:29:57
>>48
StandardEditionなら、[ツール]→[オプション]→[プロジェクトおよびソリューション]→[全般]でいける。
EEは知らん。
52デフォルトの名無しさん:2008/07/27(日) 22:31:35
おまえらかぶりすぎだろ。
53デフォルトの名無しさん:2008/07/27(日) 22:37:06
>>48
>本当にExpressEditonのC#ですか?

シラネーヨ。
Expressだけ、メニューやらダイアログの構成が違ってるのか?
54デフォルトの名無しさん:2008/07/27(日) 22:38:14
まじでExpressのプロジェクトの新規作成のダイアログには、フォルダを指定する箇所がないのか?
55デフォルトの名無しさん:2008/07/27(日) 22:52:45
56デフォルトの名無しさん:2008/07/27(日) 22:57:40
画像に不備があったので訂正しました
http://www-2ch.net:8080/up/download/1217166887935749.qtG5Gc (デフォルト)
http://www-2ch.net:8080/up/download/1217166972785174.W6zF8Q  (設定劇用語)
57デフォルトの名無しさん:2008/07/27(日) 23:13:37
42,44です
レス色々とありがとうございます
非常に助かりました

>>48
Java+Eclipseの人は同じようなこと悩みますね

>>50
できました
VisualStudio使うの初めてだったので、助かりました


私には、C#以前にVisualStudioの勉強が必要そうですね
Java+Eclipseの時もメニューバーのWindowの中にPreferencesがあったりして、かなり苦戦した記憶が、、、

また何かありましたら、よろしくお願いいたします
58デフォルトの名無しさん:2008/07/27(日) 23:16:15
>>57
そんなことで苦戦って、先が思いやられるな
59デフォルトの名無しさん:2008/07/27(日) 23:23:13
>>58
ツール類にはいつも苦労させられます
知っている人が周辺にいてくれればすぐにわかることでも結構悩みますし、、、
そんなことありませんか?

Javaの前はHDLやってたのですが、そのときもコーディングよりもツール動かすまでが大変でした
6048:2008/07/27(日) 23:25:50
>>57
Java+Eclipseの人でも無いし
むしろ、Eclipseがどうして栄えてるのかがわからない。
Eclipseな人ってどんなマシン使ってるの?くそ重たくて使い物にならないとおもうんだけど
Ath X2 4800+ + 4GB RAM (32bit)でWindows使ってるけど、くそ重たかったよ
61デフォルトの名無しさん:2008/07/27(日) 23:32:47
>>60
そうですか?
私の環境だとeclipseよりVisualStudio2008の方が重いです
Javaどのバージョンいれてます?
て、スレ違いかな
62デフォルトの名無しさん:2008/07/27(日) 23:49:21
すみません、初心者といいますかそれ以前のことで申し訳ないのですが、いくつか質問させてください。
もしスレ違いならお手数をおかけしてすみませんが誘導お願いいたします。

C#を始めるために、,NET再頒布3.5と.NET SDK2.0、.NET再頒布1.1と.NET SDK1.1を
入れたのですが、これで特に問題はありませんでしょうか。

それとも、おとなしくVC#無償版を入れたほうがよいのでしょうか。
またその場合、.NET再頒布3.5とVC#無償版を入れればよいのでしょうか。

あともうひとつ質問なのですが、v2.0フォルダのC#コンパイラでコンパイルしたものは2.0の実行環境で、
v1.1フォルダのC#コンパイラでコンパイルしたものは1.1の実行環境でそれぞれ動作する、
という認識で間違いないでしょうか。

すみませんが、どなたかご存知の方ご教授願います・・・。
63デフォルトの名無しさん:2008/07/27(日) 23:55:10
別にSDKだけで開発できるけど、VC# を避ける理由は全くないんだが。
学習の手助けになるという意味でも VC# 入れとく方が無難。

SDK は別個に入れる必要なし。てか、3.5 の SDK 入れろよ。
あと、VC# 入れれば SDK も入る。
64デフォルトの名無しさん:2008/07/27(日) 23:59:30
バージョンは、多分、デフォルト設定だと
v1.1 の方は .NET 1.1 用、V2.0 の方は .NET 2.0 用で間違いないけども。
コンパイラオプションできりかえられたような。
65デフォルトの名無しさん:2008/07/28(月) 00:04:56
.NET SDKを入れるともれなく.NET本体も付いてくる(ないと使えないから)。
また、VC#でもインストーラがもれなく.NETを入れてくる。

だから、そんな何でもかんでもインストールする必要はない(時間の無駄以外に害はないけど)。
66デフォルトの名無しさん:2008/07/28(月) 00:18:31
>>63-65
早速のご回答ありがとうございます!

な、なんとオプションで切り替えられるのですか・・・。
MSの.NET公式を色々と探したのですが、SDK3.5を見つけることができなかったのです・・・。

そ・・・そうなのですか、MS公式のSDK2.0のページに.NETSDK2.0を入れる前に
.NET2.0とLangPackを入れろと書いてあったのでてっきり全部入れないといけないのかと思ってました・・・。
やはりSDKいれれば全部ついてくるんですよね、おかしいとおもいました。

全部アンインストールしてVC#2008無償版を入れてみようと思います。
皆さん本当にありがとうございました!失礼しました。
67デフォルトの名無しさん:2008/07/28(月) 00:46:47
コンパイラが2.0だからって.NETも2.0ってわけじゃないよ、ね?
68デフォルトの名無しさん:2008/07/28(月) 00:54:17
>>67
バージョンってのがちょっと複雑なんだけど・・・

・C# の言語のバージョン(1.0, 1.2, 2.0, 3.0)
・IL と実行環境のバージョン(1.0, 2.0)
・標準ライブラリのバージョン(1.0, 1.1, 2.0, 3.0, 3.5)

があって、IL の 1 と 2 の差は generics の有無。
なので、C# 2.0 以降は IL の方も 2.0 必須。
逆に、ライブラリさえ使わなければ C# 3.0 で書いたプログラムも .NET 2.0 で動く。
69デフォルトの名無しさん:2008/07/28(月) 01:02:52
>>68
うん、細かい説明ありがとー
70デフォルトの名無しさん:2008/07/28(月) 01:12:06
VisualStudioと対応する.NET Frameworkのバージョン
VS2002(VS7)  - .NET Framework 1.0
VS2003(VS7.1) - .NET Framework 1.1
VS2005(VS8)  - .NET Framework 2.0 ※1
VS2008(VS9)  - .NET Framework 2.0/3.0/3.5
※1 アドイン追加で、.NET Framework 3.0 向けの開発も可能

対応OS
.NET Framework 1.0/1.1 - 98, 98SE, ME, NT4.0, 2000, 2003, XP,(2008, Vista ※1.1のみ)
.NET Framework 2.0    - 98, 98SE, ME,     .2000, 2003, XP, 2008, Vista
.NET Framework 3.0/3.5 -                  .2003, XP, 2008, Vista

CLRのバージョン
.NET Framework 1.0 - CLR1.0
.NET Framework 1.1 - CLR1.1
.NET Framework 2.0/3.0/3.5 - CLR2.0

C#のバージョン
.NET Framework 1.0 - C#1.0
.NET Framework 1.1 - C#1.1
.NET Framework 2.0/3.0 - C#2.0
.NET Framework 3.5 - C#3.0
71デフォルトの名無しさん:2008/07/28(月) 01:15:47
ん、最後のC#のバージョンの所は正しくなかったな。

C#のバージョン
VS2002(VS7)  - C#1.0
VS2003(VS7.1) - C#1.1
VS2005(VS8)  - C#2.0
VS2008(VS9)  - C#3.0
72デフォルトの名無しさん:2008/07/28(月) 01:33:19
.NET2.0の範囲で使えるC#3.0
推論型、匿名型, 暗黙型付け配列
コレクションのイニシャライザ、オブジェクトのイニシャライザ
パーシャルクラス、パーシャルメソッド
自動プロパティ、ラムダ式

.NET3.xが必要になる機能
ラムダ式でFunc<>やAction<>, Expression<>などの利用
LINQクエリ式他
拡張メソッド - これが意外だったり。
73デフォルトの名無しさん:2008/07/28(月) 02:37:53
Action<>は引数1個のものに限り.NET2.0でも使える。
74デフォルトの名無しさん:2008/07/28(月) 02:53:48
VC#でコンパイルする際に.NET依存しない実行ファイルの生成って
可能ですかね?exeのサイズ大きくなってもいいので・・
75デフォルトの名無しさん:2008/07/28(月) 02:58:38
無理です。
76デフォルトの名無しさん:2008/07/28(月) 02:58:53
拡張メソッドをVBで書くとよくわかる
ExtensionAttributeがSystem.Coreを使ってるからしょうがない

imports System.Runtime.CompilerServices
public module Foo
  <Extension> public function Bar(s as String) as String
77デフォルトの名無しさん:2008/07/28(月) 03:42:32
.NET Framework2.0をターゲットにして拡張メソッドを定義
それを2.0プロジェクトから利用するバッドノウハウ。

前者でコンパイルが通るのは、まぁ理解できる。
後者でインテリセンスに表示されてないのにコンパイルが通るってwww
# CLRの機能に変更を加えず、拡張メソッドを実現している証拠・・か。
78デフォルトの名無しさん:2008/07/28(月) 03:52:37
だって拡張メソッドなんてただの糖衣構文じゃない。
79デフォルトの名無しさん:2008/07/28(月) 08:20:12
>>77
普通にコンパイルエラーになるのだけど?
>.NET Framework2.0をターゲットにして拡張メソッドを定義 
System.Runtime.CompilerServices.ExtensionAttributeが見つからないため新しい拡張メソッドを定義できません。
System.Core.dll への参照は指定されていますか?
80デフォルトの名無しさん:2008/07/28(月) 09:22:39
自前でSystem.Runtime.CompilerServices.ExtensionAttributeを定義すれば問題なかったりする
実装はなくてOK
81デフォルトの名無しさん:2008/07/28(月) 09:33:15
これですな。これこそバットノウハウの鑑。
namespace System.Runtime.CompilerServices { class ExtensionAttribute : Attribute { } }
これを使ったアセンブリをさらに.net 3.0のアセンブリから参照すると、
ExtensionAttributeがダブるとエラーになるが、
これを回避するためにこういうことをするとさらに邪悪さが増す。
// csc /r:hoge=my.dll
extern alias hoge;

82デフォルトの名無しさん:2008/07/28(月) 14:19:27
把握した。さっそく.OfTypes<T>()を実装したぜ。
83デフォルトの名無しさん:2008/07/28(月) 19:31:17
MONOのSystem.Core.dllのソースコード使えば
MITライセンスだし
84デフォルトの名無しさん:2008/07/28(月) 20:22:14
そこまでする手間で、お客さんに.NET3.5を入れてもらえよw
85デフォルトの名無しさん:2008/07/28(月) 20:42:55
OfType<T>は過大評価されすぎ
86デフォルトの名無しさん:2008/07/28(月) 20:54:34
>>66
ちなみに.NET Framework 3.0から
対応するSDKはWindows SDKという名称になった。
87デフォルトの名無しさん:2008/07/28(月) 21:18:25
フォームの ownerdraw について調べております。
目的は、フォームの外形をマウスで変形したりリサイズする際、
リアルタイムで内部まで追随させずに外形枠の仮想線だけを
追随描画し、マウスのボタンを解放した時点で内部の描画を行う
方式を取ることでした。

これに関し SetStyleやOnPaintなどのアドバイスを頂いたことが
ありました。しかしどうもうまく実現できておりませんでした。

そこで ownerdraw を用いるのかもしれないと思い、調べているのですが、
情報にたどり着いておりません。よろしければアドバイスを頂きたく。
よろしくお願いします。
88デフォルトの名無しさん:2008/07/28(月) 21:41:28
[画面のプロパティ]→[効果]→[ドラッグ中にウィンドウの内容を表示する]→OFF
89デフォルトの名無しさん:2008/07/28(月) 21:42:27
描画処理について、質問です。

現在、描画系の処理について勉強していて、
試しにペイントもどきのようなものを作ってみようと思いました。

そこで、以下のようなプログラムを書いてみました。
マウスがクリックされている間に、別スレッドから描画メソッドをInvoke経由でコール。
描画メソッド内にて現在のマウス座標に対して、DrawRectangleで点を打つ。

という簡単な物です。
これを実行すると一応、点が描画されて、マウスを動かしていくと、
線っぽくひけるのですが、マウスを速く動かすと線が、細切れになってしまいます。

これは、描画処理が追いついていないのでしょうか。
スレッドは、1ms単位でクリック情報をポーリングしており、
クリックされていれば、メソッドがコールされます。

スレッドでは、キューに積む。
別スレッドで描画などすれば解決するものなのでしょうか。

(上記も試行してみましたが、上手く動きませんでした・・・実装が悪いのかもしれません)

以上、よろしくお願いいたします。
90デフォルトの名無しさん:2008/07/28(月) 21:43:50
マウスってそんなに細かく動かないだろ
9189:2008/07/28(月) 21:46:03
>>90
つまり、マウスを大きく動かしたときは、
ポインタは細かい座標を指していないということでしょうか・・・
(日本語怪しい・・・
92デフォルトの名無しさん:2008/07/28(月) 21:47:03
>>90
だよな

早く動く=前の位置よりいきなり座標移動が起きる
だからその間の補完は自分で考えてしないとどうしようもない。

どんな描画系のツールでも同じ現象になるのがほとんどのような。
93デフォルトの名無しさん:2008/07/28(月) 21:47:26
スレッドとか使わなくても、MOUSEMOVEイベントがきたらその座標に、前回のMOUSEMOVEイベントの座標から線を引けば繋がった線が引けるよ。
9489:2008/07/28(月) 21:47:40
そうすると、
取得できた座標と前回の座標からその中間の線を
計算して描画する処理が必要ということですかね・・・
95デフォルトの名無しさん:2008/07/28(月) 21:49:20
前の点と現在の点でDrawLineすれば?
9689:2008/07/28(月) 21:49:56
>>92
>>93
なるほど!
やはり、そうなのですね。
疑問が解けてすっきりしました。

前回の座標値と今回の座標値を結ぶ線を描画するという
方向で考えてみたいと思います。

ありがとう御座いました。
97デフォルトの名無しさん:2008/07/28(月) 21:50:27
>>94
windows標準のペイントだと対策はしてるようだけど
かなり荒い補完なので前回の座標と新しい座標間でラインを引いてる
感じだな。
9889:2008/07/28(月) 21:50:55
>>95
やってみます。

アドバイス感謝です。
99デフォルトの名無しさん:2008/07/28(月) 21:57:15
>>88
ありがとうございました。OSレベルでの設定変更で対応する方法を
試すことができました。確かにそれで実現することができました。

ところで、それをアプリケーションレベルで実現したいと考えておりました。

そこで先ほど見つけたこちら:
フォームのリサイズが終了するまでコントロールの大きさを変えない .NET Tips C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/form/preventcontrolresize.html

にある方法を試してみましたところ、確かにフォームの内部の描画が
Resizeの終了時点で行われることが確認できたのですが、この場合
フォームの外形自体が描画されてしまうため、内部に何の描画もない
領域が見えてしまったりして見栄えがいまひとつなことがわかりました。

Resize操作中は、OSレベルと同じように、フォームの外形線だけを
リサイズしたいのですが、これは不可能でしょうか?何卒アドバイスを
頂きたく!よろしくお願いします。
100デフォルトの名無しさん:2008/07/28(月) 22:56:49
onresizebegin/onresizeendでデフォルトの描画処理を停止/再開するようにすれば
101デフォルトの名無しさん:2008/07/28(月) 23:03:32
>>100
ありがとうございます。そうなのです、それが

フォームのリサイズが終了するまでコントロールの大きさを変えない .NET Tips C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/form/preventcontrolresize.html
(onresizeendを利用する方法は、そこの下の方に記載がありました)
にあったので試したのでしたが、その結果は>>99に通りでした。

やはりフォーム外形枠の”線”だけをスクリーンに描画するというのは
アプリケーション自体では不可能でしょうか?
102デフォルトの名無しさん:2008/07/28(月) 23:05:28
GroupBoxに何個かラジオボタンを設置し、そのグループボックスを複数設置
その時、あるグループボックスの中にあるラジオボタンをクリックした際、
指定したグループボックスの中にあるラジオボタンのチェックを解除する方法を教えていただきたいです。

よろしおねがいします。
103デフォルトの名無しさん:2008/07/28(月) 23:08:29
質問というか相談なんですが、
LINQ使わないなら、VS2005のほうがいいんでしょうか?
とりあえず今VS2008を入れてみたんですが、
これはLINQを使うこと前提になってるぽい感じですよね?
自分はADO.NETも理解できてない状態なので、
もしLINQ使うにしても、いきなりLINQより、
ADO.NETやった後のほうが良いかと思うんですが、どうなんでしょうか?
ちなみに、SQLに関しては、PHP+MySQLとAccessの経験があります。
104デフォルトの名無しさん:2008/07/28(月) 23:12:03
>>103
VS2008で.NET Framework 3.5/3.0/2.0 は選べる。C# 3.0 2.0 1.0も選べる。
105デフォルトの名無しさん:2008/07/28(月) 23:12:05
>>103
じゃあLINQ行くかの時にめんどくさいからそのままでおk
106デフォルトの名無しさん:2008/07/28(月) 23:16:53
>>101
そうじゃない。その記事はリサイズ中のコントロールの*レイアウト*の停止
俺が言ってるのはフォーム自体の*描画*の停止

>>102
そのグループボックス内の全てのラジオボタンをChecked=falseにする
もしくは、そのグループボックス内の任意のラジオボタンをChecked=trueにした後で、Checked=falseにする
107デフォルトの名無しさん:2008/07/28(月) 23:26:02
>>104,105
ありがとうございやし!
Frameworkは2.0にしてたんですが、C#まで選択可能とは気付きませんでした。
2008のままでボチボチ勉強してみます。
108デフォルトの名無しさん:2008/07/28(月) 23:28:02
というか、いきなりLINQでいいと思う。
109デフォルトの名無しさん:2008/07/28(月) 23:35:18
varだけはないとやっていけません
110デフォルトの名無しさん:2008/07/28(月) 23:36:09
Xml.XmlReader.GetAttribute()では属性の名前が分からなくてもインデックス指定で取得できるのですが、
Xml.XmlDocument.GetAttribute()では名前がわからないと取得できません・・・

XmlDocumentでXmlReaderのように知らない属性名や値を取得するにはどうしたらいいのでしょうか?
111デフォルトの名無しさん:2008/07/28(月) 23:37:41
>>108
んっと、LINQの文法?がちょっと肌に合わなくて、
いきなりLINQからだと、C#自体挫折しそうなんです。。。
112デフォルトの名無しさん:2008/07/28(月) 23:38:59
varとか自動プロパティとか使いまくりだけど
クエリ式は一切使ってないな
使う場面もない
113デフォルトの名無しさん:2008/07/28(月) 23:47:55
Winフォームでラベルを盛り上げるにはどうしたらいいんでしょうか
凹んだのはできるんですけど盛り上がってるのはつくれないの
(^9’)
114デフォルトの名無しさん:2008/07/28(月) 23:51:20
>>106
どうもです、
>フォーム自体の*描画*の停止
この実現方法についてアドバイスかヒントを
いただけるとありがたく。

resizebegin で SuspendLayout をしてみましたが
できませんでした。
115デフォルトの名無しさん:2008/07/28(月) 23:54:53
border styleFixed3Dにすると凹むんですよ・・・凸にしたいです
116デフォルトの名無しさん:2008/07/28(月) 23:55:33
>>115
オーナードロー
117デフォルトの名無しさん:2008/07/29(火) 00:02:15
そのようなプロパティはないでござる
118デフォルトの名無しさん:2008/07/29(火) 00:07:00
なになにオーナードローとは
自分でオリジナルの・・・・・

もしもし^^;さすがにあるでしょ
いけずー
119デフォルトの名無しさん:2008/07/29(火) 00:08:07
わかった!パネル使えばいいのか!
120デフォルトの名無しさん:2008/07/29(火) 04:32:03
>>82
それ拡張メソッドでやる必要ないだろ。
121デフォルトの名無しさん:2008/07/29(火) 06:41:08
質問です

ttp://www.atmarkit.co.jp/fdotnet/dotnettips/392notifyicon/notifyicon.html
このサイトの方法で、システムトレイにウィンドウが格納されるような動作を実現したのですが、
作ったプログラムを起動した状態でシステムをシャットダウンしようとすると、
作ったプログラムだけが残ってシャットダウンできません。
おそらく、シャットダウンが始まるってもフォームを閉じることができないのだと思います。
閉じるボタンを押すとシステムトレイに格納しつつ、
シャットダウン時にはちゃんと終了させるにはどうすればよいでしょうか。
122デフォルトの名無しさん:2008/07/29(火) 07:22:33
.NET2.0以降ならFormClosingイベントを使えば、閉じる理由がわかる。
Closingイベントは非推奨になってなかったかな。
123デフォルトの名無しさん:2008/07/29(火) 07:43:02
>>122
はい、そうなんです。
FormClosingイベントを使っていて、フォームが閉じられようとする時に
フォームが閉じられるのをキャンセルしてるから、いつまでたっても終了しないと…
これに替わる策というのはあるのでしょうか?
Closingが非推奨なのは知りませんでした。
124デフォルトの名無しさん:2008/07/29(火) 08:03:55
だからー、FormClosing のほうなら e に CloseReason があるだろ
>>122 は言っている
125デフォルトの名無しさん:2008/07/29(火) 08:18:53
無条件でキャンセルするのではなく、アプリの作りにもよるけど、
e.CloseReason == CloseReason.UserClosing
の時だけキャンセルするとかすればいい。

Closingイベントは、VS2005以降は手動で追加しない限り使えないので、気にする必要なし。
126デフォルトの名無しさん:2008/07/29(火) 08:26:43
なるほど、CloseReasonでフォームがクローズされる理由を取得できるということですね。
ありがとうございました。勉強になりました!
127102:2008/07/29(火) 10:36:58
>>106
グループボックス内のラジオボタンを一つずつfalseにしていくのですね
ありがとうございました
128デフォルトの名無しさん:2008/07/29(火) 13:46:29
>>104
C#のバージョンまで選べたっけ?
129デフォルトの名無しさん:2008/07/29(火) 13:48:37
一人で作る場合でもpublicとかprivateとかなるべく使い分けた方が良いんですか?
アクセスを限定すればちょっと早くなったりしますか?
130デフォルトの名無しさん:2008/07/29(火) 13:51:29
アクセスはコンパイル時のチェックだけだ。
でもいつも意識してるほうがいいぞ。
131デフォルトの名無しさん:2008/07/29(火) 14:14:26
>>128
VS2008でC#3.0の機能の使用を制限する方法は無かったと思う。

むしろ何かあったら方法おせーて
132デフォルトの名無しさん:2008/07/29(火) 16:20:08
プロジェクトープロパティービルドー詳細設定ー言語のバージョン、ISO-2でC#2.0相当
133デフォルトの名無しさん:2008/07/29(火) 17:21:11
知らなかったわthx
ISO-1 - ISO/IEC 23270:2003(C#1.0相当)
ISO-2 - ISO/IEC 23270:2006(C#2.0相当)
134デフォルトの名無しさん:2008/07/29(火) 18:20:56
C#でネイティブコードって吐けますか?
C#で作られたプログラムの起動が遅すぎる。
でもちょっと興味もある……。
135デフォルトの名無しさん:2008/07/29(火) 18:22:29
>>134
この質問定期的にわくね。ゴキブリみたい。
136デフォルトの名無しさん:2008/07/29(火) 18:23:18
>>135
そうなのか。みんな同じこと考えてるのな
137デフォルトの名無しさん:2008/07/29(火) 18:35:28
javaにおけるgcjの評価を調べてみると native C#の未来が見えてくる。
138デフォルトの名無しさん:2008/07/29(火) 18:37:10
>>134
とりあえずngen.exeについて調べてみろ。
139デフォルトの名無しさん:2008/07/29(火) 18:38:15
>>137
どうして関係ない話題でうやむやにしようとするのか
知らないなら黙っとけ

>>134
ngen.exe
140デフォルトの名無しさん:2008/07/29(火) 18:45:19
環境ごとに勝手にネイティブイメージ作ってくれればいいのに
いやむしろネイティブコード吐けばいいのに
141デフォルトの名無しさん:2008/07/29(火) 19:19:23
一回実行したら次からはキャッシュから起動して欲しいとは思う
でも32ビットでコンパイルしたコードが64ビットで動くのはすごくないか
142デフォルトの名無しさん:2008/07/29(火) 19:29:31
キャッシュから起動すればいいじゃん
143134:2008/07/29(火) 19:34:02
とりあえず終了時にでもイメージ作るようにすれば扱いやすくなるかな
144デフォルトの名無しさん:2008/07/29(火) 19:42:06
リリースビルド時に自動でngenかけちゃえばいいじゃん。
145デフォルトの名無しさん:2008/07/29(火) 19:43:27
.NETのアプリが遅く感じるのは、
関係するDLLやライブラリ類が多くそのロードに時間がかかっている。
特にメモリの少ないPCでは顕著。それに対してJITやngenの影響は相対的に小さい。

通常のアプリではコードのサイズは大きくても常に動いている部分は意外と小さいのに対して、
.NETのアプリはアクティブに使われるコードの分布が広いのでキャッシュが効きにくい。
マネージド内は実行時の最適化で部分的なパフォーマンスはネイティブよりよくなることもあるが、
ネイティブコードの呼び出しのオーバーヘッドが大きい。このためWinFormなどが重くなりがち。

ライブラリ類の互換性やGCの特性を維持したままネイティブコード化を目指しても
スピード的なメリットはない。この辺はGCJが実証済み。
GCをなくして独自のライブラリを準備していいならあれだがそれをC#と呼べるかは不明。

いっぱい書いたが結論。ネイティブコンパイルができれば万事解決というのは短絡思考。
146デフォルトの名無しさん:2008/07/29(火) 20:35:28
.net Framework 1.0とかJava2の頃から比べたら.net 3.0なんて爆速としか言いようがない
初期は本当にひどかった
147デフォルトの名無しさん:2008/07/29(火) 20:38:34
バージョン上がるごとに機能追加されるだけじゃなくて速度も上がってんの?
148デフォルトの名無しさん:2008/07/29(火) 20:40:41
.net 2.0と.net 3.0と.net 3.5で速度は変わってないよ。
ライブラリが増えただけで基幹部分は変わってないから
149デフォルトの名無しさん:2008/07/29(火) 20:40:47
VS 2005でビルドしたものより2008の方がファイル小さくてしかも速い気がするから、
多分コンパイラ班が頑張ってるんだと思う
150デフォルトの名無しさん:2008/07/29(火) 20:50:15
たしかに2008のが小さくなるね
151デフォルトの名無しさん:2008/07/29(火) 20:53:16
そんなこといわれるとバージョンアップしたくなるじゃないか
2005あたりからstandardでも最適化ついてるんだっけ?
152デフォルトの名無しさん:2008/07/29(火) 20:56:03
C#のコンパイラは.NETのランタイムライブラリの一部だよ。
IDEとは何にも関係ない。
153デフォルトの名無しさん:2008/07/29(火) 20:56:32
expressでも付いてる。最適化は2種類あって
/optimaize+ でコンパイル時の最適化○、JITでの最適化○
無指定 でコンパイル時の最適化×、JITでの最適化○
/debug+ でコンパイル時の最適化×、JITでの最適化×
になる。
154デフォルトの名無しさん:2008/07/29(火) 21:50:22
自分自身を再起動するにはどうしたらいいんでしょう。
155デフォルトの名無しさん:2008/07/29(火) 21:51:23
別のプロセスを立ち上げてから自殺。
そのプロセスは親が死んだのを見届けてから再起動。その後自殺。
156デフォルトの名無しさん:2008/07/29(火) 22:01:26
というか 3.5 は 2.0 "SP1" + ライブラリだからコア部分が何も
変わってないわけではない。
157デフォルトの名無しさん:2008/07/29(火) 22:09:59
VC++メインなんだわ
ちょっと調べたら(って小一時間かかったが)
2003はproから最適化可
2005はstdから最適化可、pgoはpgoから
2008はstdからpgo含め最適化可みたいね
158デフォルトの名無しさん:2008/07/29(火) 23:21:37
>>155に補足
ちょうどプロセス関係のことに手こずってたので (つまり、覚えたばかりのことを教えたがる厨(ry
親プロセスのIDを知るには?
http://www.microsoft.com/japan/msdn/netframework/programming/bcl/faq/SystemDiagnosticsProcessFAQ.aspx#Question3


159デフォルトの名無しさん:2008/07/30(水) 00:10:29
質問させてください
ArrayListをmsdnで調べると、IListインタフェースを実装していますよね?
そこで、Javaのように
IList<decimal> list = new ArrayList<decimal>();
とかやったのですが、ArrayListが非ジェネリクス型だのなんだのといわれてエラーになります

IList<decimal> list = (IList<decimal>)new ArrayList();
とか
IList list = new ArrayList();
なら上手くいくのですが、最初のコードは何が悪いのでしょうか?
msdn見てもよくわかりません

よろしくお願いいたします
160デフォルトの名無しさん:2008/07/30(水) 00:16:29
ArrayListはジェネリック型じゃない
ジェネリック型のはただのList
こんな感じで作る

IList<decimal> list = new System.Collections.Generic.List<decimal>();

あとIList と IList<T>は別物
161デフォルトの名無しさん:2008/07/30(水) 00:16:30
ArrayListのジェネリック版はないから

http://msdn.microsoft.com/ja-jp/library/system.collections.generic(VS.80).aspx
162デフォルトの名無しさん:2008/07/30(水) 00:51:51
java5から導入されたジェネリックはerasureといいコンパイル時にだけ影響する。
コンパイルが済むとその情報は消えてしまう。ただし、メタ情報としては残る。
その為バイトコードの拡張が不要な上、旧コードのとの相性も良い。
その反面プリミティブ型についてはオートボクシングで利便性は向上しているが
ボクシングによる低いパフォーマンスはそのままである。

.NETのはIL(バイトコード)をジェネリック用に拡張していてプリミティブ型のパフォーマンスがよい。
そのかわり非ジェネリックのコレクションとの互換性はない。
163デフォルトの名無しさん:2008/07/30(水) 00:57:53
>>158
再起動をどう定義するかの問題、になるんだろうけど
何か特殊な事情でもない限り、普通はそんなややこしいことしなくても
フツーに別のプロセスを立ち上げて自分は終了するだけで必要十分だと思うけど。
164デフォルトの名無しさん:2008/07/30(水) 01:14:54
>>159
using System.Linq;
ArrayList ar = new ArrayList() { 1,2,3,4,5 };    
List<int> lt = ar.Cast<int>().ToList();
165デフォルトの名無しさん:2008/07/30(水) 01:21:43
>>164
そんな無駄の多い方法を初心者に教えるのはどうかと思うぞ
166デフォルトの名無しさん:2008/07/30(水) 01:26:25
Enumerable.Range(1, 5).ToList()
でいいだろ
167デフォルトの名無しさん:2008/07/30(水) 01:27:35
おまえら初心者スレでLinqは控えなさい
168デフォルトの名無しさん:2008/07/30(水) 01:37:47
ヤダヤダ!
ボクのほうがすごいLinq書けるもん!
>>167のおじちゃんよりLinq書けるよ!
169デフォルトの名無しさん:2008/07/30(水) 01:39:04
本当は全く書けないと見た
170デフォルトの名無しさん:2008/07/30(水) 01:44:16
>>159
ArrayListの使用は非推奨
>>160見て書き直したほうがいいよ

>>164-169
バカじゃねーの?
171デフォルトの名無しさん:2008/07/30(水) 01:45:20
関係ないけど、LINQって何故かLinqって書いちゃうんだよな
172デフォルトの名無しさん:2008/07/30(水) 01:47:56
Linqスレはすさまじい過疎だというのに・・・
173デフォルトの名無しさん:2008/07/30(水) 01:54:16
>>170
バカじゃねーよ?
174デフォルトの名無しさん:2008/07/30(水) 01:58:23
>>170
バカじゃねーよ?
175デフォルトの名無しさん:2008/07/30(水) 01:59:31
ミラじゃねーし
176デフォルトの名無しさん:2008/07/30(水) 02:01:29
>>170
非推奨にはなってないな。型が一定でないコレクションでは使う。
まあList<object>でもいいっちゃいいけど。
177デフォルトの名無しさん:2008/07/30(水) 02:19:19
>>172
過疎ってるよな・・
178デフォルトの名無しさん:2008/07/30(水) 03:01:58
うわー何だこれありえねええ
って思ってたらcomboBoxをtextBoxって書いてた。
179デフォルトの名無しさん:2008/07/30(水) 03:09:12
>>178
どんまい


ListとかDictionaryとか使いにくすぎるんだけど
誰かSTL風コレクションライブラリを作った神はいないの?
180デフォルトの名無しさん:2008/07/30(水) 03:12:57
つ stl/cliへようこそ
181デフォルトの名無しさん:2008/07/30(水) 04:04:09
ListやDictionaryが使いにくいとな
LINQが分かってないんじゃないかね
182デフォルトの名無しさん:2008/07/30(水) 04:31:52
サポートOSの関係で2.0使ってる
いきなりXP以降だからなぁ
趣味ならいいけど仕事では使えん…
183デフォルトの名無しさん:2008/07/30(水) 07:13:14
自前で .Select とか書いちゃえば、
ターゲットが .NET 2.0 でも C# 3.0 使えるけどね。

ライブラリとか売ってるんなら、
Visual Studio 2005 使わざるを得ないとかもあるけども。
184デフォルトの名無しさん:2008/07/30(水) 07:14:32
>>181
C++ からこっちくると、
forward iterator 相当しかないのが不思議に感じるのよね。

まあ、foreach 使えりゃそれでいいやとか思い出すとどうでもよくなるんだけど。
185デフォルトの名無しさん:2008/07/30(水) 19:05:00
Properties.Settings.Default.Reset()
ってVisual Studioで設定した値に戻るんですか?
それともApp.configに書かれてる値になるんですか?

後者だとReload()と同じですよね
186デフォルトの名無しさん:2008/07/30(水) 21:29:04
List<string[]> ListValues = (List<string[]>)SortedList.Valuesで

型 'ValueList[System.String,System.String[]]' のオブジェクトを
型 'System.Collections.Generic.List`1[System.String[]]' にキャストできません。

という例外が起こるのですが、sortedlistの値だけを別のコレクションに取り出したいときはどうしたら良いのでしょうか?
187デフォルトの名無しさん:2008/07/30(水) 21:30:03
.ToList();
188デフォルトの名無しさん:2008/07/30(水) 21:30:33
List<string[]> ListValues = new List<string[]>(SortedList.Values);
189デフォルトの名無しさん:2008/07/30(水) 21:31:12
new List<string[]>(SortedList.Values)
190デフォルトの名無しさん:2008/07/30(水) 21:40:32
出来ました。
我ながらお恥ずかしいです
191デフォルトの名無しさん:2008/07/30(水) 22:11:41
バイト列に16進で00が入っていた時に、GetString(バイト列)でstringに変換したときには、
stringに何が入っているのでしょうか?
たとえば、47だったら、Gになりますよね。
単純にASCII文字だったら00はNULということになりますよね?
stringの場合は、NULは何に相当するのでしょうか?
192デフォルトの名無しさん:2008/07/30(水) 22:13:16
文字列の終了をさすコード?
C言語の場合だけど。
193デフォルトの名無しさん:2008/07/30(水) 22:14:58
'\0'
194191:2008/07/30(水) 22:17:48
あ〜〜〜、何時間も調べたのに分からなかったのに〜
なるほど、\0で処理したら上手くいきました。
本当にどうも有り難うございました。
195デフォルトの名無しさん:2008/07/30(水) 22:33:49
文字列リテラルでNULL文字を入力する方法が知りたいのなら最初からそう書けばいいのに、
どうしてあんな意味不明な文章になるのだろうか
196デフォルトの名無しさん:2008/07/30(水) 22:35:02
>>195
本人が何がわかってないかをわかってない典型的なパターンじゃね?
197デフォルトの名無しさん:2008/07/30(水) 23:58:01
いや、ライブラリからバイト列が返ってくるんですよ。
何文字が入っているかは分からないのです。後ろの方は全部0が入っているだけなので。
それを画面にデバッグ出力出来ればそれで十分な用件があったんです。
普通に、全部をstringにして表示しますよね。1行で書けるし。

それで出力したら、文字列の後ろの方に空白らしきものが沢山表示されるので、
まぁ、Trimで良いかと思ったんですが、どうやら空白ではないので、トリムできないと。
ということで、何をトリムするべきか知りたかったのです。

というか、NUL文字って何の役に立つのですか?
stringでNUL文字が入っていると、何か嬉しいことがあるのですか?
自動的に空白に置換されても良いと思うのですが‥‥
198デフォルトの名無しさん:2008/07/30(水) 23:59:17
>>197
だから文字列が入ってる場合に\0は文字列の終了を指すんだってば
C言語の場合

199デフォルトの名無しさん:2008/07/31(木) 00:02:29
てか\0は数値で言うとただの0だからな
長さ固定のバイト列の余りの部分にはどうしたってそれが入ってくるだろ
200デフォルトの名無しさん:2008/07/31(木) 00:05:01
要するに、「どの文字にも割り当てられてませんよ」ということが保証されてる文字コード。

だからC言語では「文字列の終端」として使ってたし、
固定長でデータ送る際に「文字のない場所に埋めておく値」として使う。
201デフォルトの名無しさん:2008/07/31(木) 00:06:43
それに1バイトの最初のほうは制御コードで文字としては成立しないからな。
202201:2008/07/31(木) 00:07:16
>それに1バイトの最初のほうは制御コードで文字としては成立しないからな。
それに1バイトコードの最初のほうは制御コードで文字としては成立しないからな。
203デフォルトの名無しさん:2008/07/31(木) 00:10:58
foreach (string[] strArray in List<string[]>)
このような文があるんですが、string[].Length文だけ
foreachが回ってしまいます。

List.countは1なのにどうしてこうなるのでしょうか?
204デフォルトの名無しさん:2008/07/31(木) 00:11:58
>>203
そうはなりません
205デフォルトの名無しさん:2008/07/31(木) 00:12:45
>>203
意味わかんない。
とりあえず、元のコードそのまま貼って。
206デフォルトの名無しさん:2008/07/31(木) 00:19:40
>>197
もしかしてC#側でbyte配列を確保してライブラリ関数の引数に渡してる?
207デフォルトの名無しさん:2008/07/31(木) 00:21:51
//List<string[]> list
//list[0]にだけstring[3]型の変数が入ってる
//string[] strArray

foreach (string[] strArray in list)
{
 for(int i=0; i<2; i++)
 {
  Console.WriteLine(strArray[i]);
 }
}

こうすると
strArray[0]
strArray[1]
strArray[2]

strArray[0]
strArray[1]
strArray[2]

strArray[0]
strArray[1]
strArray[2]
208デフォルトの名無しさん:2008/07/31(木) 00:27:43
>>207
i<2なのにstrArray[2]が出てくるわけ?
違うとこの出力が混ざってるんじゃないの
ちゃんとコピペしてよ
209デフォルトの名無しさん:2008/07/31(木) 00:27:59
>//list[0]にだけstring[3]型の変数が入ってる
これが間違いでlist[1]、list[2]にも入ってるかコードが3回実行されてるか
210デフォルトの名無しさん:2008/07/31(木) 00:29:52
質問用にとおまえが改変するから原因がわからなくなる
211デフォルトの名無しさん:2008/07/31(木) 00:35:26
>>197
byte[]の代わりにStringBuilderをライブラリ関数に渡せば一発解決するんじゃね?
まだいるなら、ライブラリ関数のシグネチャを晒してみてよ。
212デフォルトの名無しさん:2008/07/31(木) 00:36:02
>>208
foreach (string[] execValue in execListValues)
{
writer = execValue;

notice = writer[2] + "\n" + tri + " " + bbt
+ "\n数量:" + writer[5] + "\n" + writer[6];

export.write = writer;
export.trade = tri;
export.baibai = bbt;

showNotice(notice);
}

このshowNotice(notice);メソッドがexecValue.Length回実行されてしまうんです
213212:2008/07/31(木) 00:38:59
もしかしたら何かの間違いでexecListValuesに複数のstring[]が入ってるんじゃないかと、
ブレークポイント入れて見てみましたが、execListValues.countは1でした
214デフォルトの名無しさん:2008/07/31(木) 00:40:34
int count = 0;
foreach (string[] execValue in execListValues)
{
writer = execValue;

notice = writer[2] + "\n" + tri + " " + bbt
+ "\n数量:" + writer[5] + "\n" + writer[6];

export.write = writer;
export.trade = tri;
export.baibai = bbt;

showNotice(notice);
count++;
}
Console.WriteLine(count);

こうしてみ
215212:2008/07/31(木) 00:45:52
>>214
showNotice()は画面に表示するメソッドなので
notice = writer[2] + "\n" + trihiki + " " + bbt
+ "\n数量:" + writer[5] + "\n" + writer[6] + "円\n" + count.ToString();
としてみたんですが

全ての表示で0でした
216デフォルトの名無しさん:2008/07/31(木) 00:47:51
OK。ということはforeachループは1回しか回っていない。それはわかるな?
次はshowNotice()の中身だ。
217212:2008/07/31(木) 00:58:34
>>216
foreachを動かしてるメソッドをtimerで起動しているんですが、
インターバルが小さすぎて次のメソッドに追いつかれてしまったみたいです。
timer1.Intervalを大きくしたら正常な動作になりました。

ありがとうございます。
すみませんでした。

showNoticeはこうなってます
private void showNotice(string notice)
{
 notifyIcon1.BalloonTipText = notice;
 notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
 notifyIcon1.ShowBalloonTip(Properties.Settings.Default.PopTime);
 System.Threading.Thread.Sleep(Properties.Settings.Default.PopTime);
 notifyIcon1.Dispose();
}
218デフォルトの名無しさん:2008/07/31(木) 00:59:55
なんか恐ろしいことやっとるのう
219デフォルトの名無しさん:2008/07/31(木) 01:03:21
>>217
その説明とそのコードからは、潜在的なバグの存在をひしひしと感じるんだが……
そこまでは、ここではフォローしきれん。
220デフォルトの名無しさん:2008/07/31(木) 01:04:44
上に同じ
221212:2008/07/31(木) 01:19:22
もうクラスファイルが9個で3000行くらいのコードになり、
ちょっと把握が難しくなってきました。
このメソッドもbackgroundWorkerの中でやってたりします。

どんな所が悪いのかよろしかったら教えてください
経験が浅くてよく分かりません
222デフォルトの名無しさん:2008/07/31(木) 01:49:04
>>221
backgroundWorkerを使っているなら、Timerを使う必要はない。
たとえば、backgroundWorker_DoWorkの中で、

while (...)
{
  // ほぼ一定間隔でやりたい処理
223デフォルトの名無しさん:2008/07/31(木) 01:50:18
途中で書き込んでしまった。すまん。

>>221
backgroundWorkerを使っているなら、Timerを使う必要はない。
たとえば、backgroundWorker_DoWorkの中で、

while (...)
{
  // ほぼ一定間隔でやりたい処理
  Thread.Sleep(1000);
}
とでもすれば、大体一定間隔で処理ができる上に、追いつきを考慮する必要も
なくなるだろ。
224デフォルトの名無しさん:2008/07/31(木) 01:57:44
> System.Threading.Thread.Sleep(Properties.Settings.Default.PopTime);
> notifyIcon1.Dispose();
これは無駄。バルーンはShowBalloonTip()で指定した時間がたてば自動的に消えるから、
わざわざSleepしたりDisposeする必要はない。
というか、notifyIcon1を破棄してしまったら、次に使うときどうするんだ?

あと、これが一番肝心なところなんだけど、こういうコードから推測できるのは、
あなたはクラスの仕様を把握していない。つまり、よくドキュメントを読んでいない、ということ。

どんなクラスにしても、きちんとドキュメントを読んで、仕様を把握して使うようにしないと、
いずれ根深いバグに悩まされることになる。
225デフォルトの名無しさん:2008/07/31(木) 07:18:39
このスレ色々と参考になるなぁ…。
回答者の方々いつもサンクスです。
自分も趣味グラマーなもんでクラス設計の仕方を全然わかってなかったり…。
どうしても動けばいいや適なコードになってしまう。
226デフォルトの名無しさん:2008/07/31(木) 09:47:32
ToolTip.Showで生成したのウィンドウのサイズを知る方法はありませんか?
Win32APIで生成するしかないのでしょうか。
227デフォルトの名無しさん:2008/07/31(木) 09:59:03
>>223
なるほど、目から鱗です
一定間隔の処理はtimer使うものだと思い込んでました

>>224
Disppose()はどうしてもバルーンが消えないから投げやり的に書いてしまったものです

クラスの仕様を把握していないのは確かにそうです
MSDNは冗長的だったり、概念的なものしか書いて無かったり、
どんな動作するのかわかりにくいです。
しかも鯖が重くてアクセスするのも大変で・・・


非常に参考になりました
次からは気をつけたいと思います、ありがとうございます
228デフォルトの名無しさん:2008/07/31(木) 10:02:15
>>226
Popupイベント
229デフォルトの名無しさん:2008/07/31(木) 10:02:41
MSDNはダウンロードしてローカルで見れるぜ
あとConsole.WriteLineはFormアプリでもVSの出力ウインドウに表示されるぜ
230デフォルトの名無しさん:2008/07/31(木) 10:07:28
>>228
表示位置を指定したいので.Showを使っていますが
popupでも可能でしょうか。
231デフォルトの名無しさん:2008/07/31(木) 10:09:36
まず調べて試してから
232デフォルトの名無しさん:2008/07/31(木) 10:15:56
すいません。今さわれる環境に居ないもんで
焦ってしまいました…。
233デフォルトの名無しさん:2008/07/31(木) 10:29:06
>>229
そんなにHDD余ってません><
234デフォルトの名無しさん:2008/07/31(木) 10:36:59
開発環境はあっというまに膨れ上がるから、HDD追加したほうがいいぞ・・・
235226:2008/07/31(木) 11:44:10
取得出来ました。有り難う御座いました。
236デフォルトの名無しさん:2008/07/31(木) 12:30:51
>>229
あれコンソールも出るんだっけか?
Trace使う方がいい気もするが…
237デフォルトの名無しさん:2008/07/31(木) 12:40:41
Debug使った方がコンパイル時消してくれるんじゃなかたっけ?
238デフォルトの名無しさん:2008/07/31(木) 12:47:19
Traceは、デバッグ、リリース関係なく/define:TRACEスイッチに依存するからより柔軟に制御できるようになるよ

さらに以下の2行を追加すると、ファイルとコンソールに出力してくれるようになる
Windowsアプリケーションの場合2行目は無効だが

Trace.Listeners.Add(new TextWriterTraceListener(Application.ExecutablePath + "trace.txt"));
Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
239デフォルトの名無しさん:2008/07/31(木) 12:50:02
さらにTextBoxTextWriterクラスを自作するとTraceの内容をTextBoxに表示できるようになって便利
240デフォルトの名無しさん:2008/07/31(木) 22:13:21
System.IO.Stream stream = webResponse.GetResponseStream()で受け取ったデータを、
StreamReaderを使ってstring変換という手順を挟まずにファイル出力って出来ませんか?
241デフォルトの名無しさん:2008/07/31(木) 22:24:45
Stream からよみとって FileStream に書き出せばいいじゃん
ふらっと的には WebClient の DownloadFile でも
242デフォルトの名無しさん:2008/07/31(木) 22:27:51
どうしてもwebResponseをつかう必要があるなら、こんな感じかな。
using (Stream rs = webResponse.GetResponseStream())
using (FileStream ofs = File.OpenWrite(...))
{
  byte[] buf = new byte[ 1024 * 8 ];
  while (true)
  {
    int len = rs.Read(buf, 0, buf.Length);
    if (len == 0) { break ; }
    ofs.Write(buf, 0, len);
  }
}

でも最適解は>>241の言うとおりWebClient.DownloadFile()だと思う。
243デフォルトの名無しさん:2008/08/01(金) 19:45:20
質問させてください
現在、1個のソリューションに複数のプロジェクトを作成する予定にしています。
その中で複数のプロジェクトから呼ばれるユーティリティ的なクラス群を準備する予定です。
その場合、どこにそれらのクラス群を作るべきでしょうか?
VC#2008のソリューションエクスプローラでは、プロジェクトの中にフォルダは作れるようですが、ソリューション直下にはフォルダが作れないようです
よろしくお願いいたします
244デフォルトの名無しさん:2008/08/01(金) 19:55:38
も一つプロジェクト
245デフォルトの名無しさん:2008/08/01(金) 19:57:20
>>243
プロジェクト
246デフォルトの名無しさん:2008/08/01(金) 20:18:42
C#でテキストのシンタックスハイライトをしようと思ったら
どうやって作るのが一番楽ですか?
RichTextBoxのTextChangedを使うのが普通ですか?
それとも他にC#で使えるシンタックスハイライトに対応した
テキストコンポーネントがあるのでしょうか?
247デフォルトの名無しさん:2008/08/01(金) 20:29:38
RichTextBox使うのが普通だろうな。
codeproject.comにいくつかサンプルがあるよ。
http://www.codeproject.com/KB/cs/shadyrichtext.aspx
http://www.codeproject.com/KB/edit/SyntaxHighlighting.aspx
248デフォルトの名無しさん:2008/08/02(土) 13:06:26
すみません
すごく基本的なこと聞かせてください
msdnの見方なのですが、クラスに存在するメソッドやクラスの推奨、非推奨などはどこを見ればいいのでしょうか?
たとえば、Stringを調べているのですが、
http://msdn.microsoft.com/ja-jp/library/system.string.aspx
を見ても、Stringに存在するメソッドがよくわかりません
また、コレクションはList、List<>、ArrayListなどありますが、どれが推奨なのかよくわかりません
よろしくお願いいたします
249デフォルトの名無しさん:2008/08/02(土) 13:10:28
>>248
その下のほうにある string メンバ のページにメンバ(メソッド、プロパティ、イベント)の一覧がある
非推奨になってるものは解説にはっきりそう書いてあるからそんなに気にしなくていい
コレクションは特に理由がなければSystem.Collections.Generic名前空間の中にあるものを使う
250デフォルトの名無しさん:2008/08/02(土) 13:11:23
>>248
msdnが一瞬毎日新聞英語サイトのmdnにみえてドキッとした
251デフォルトの名無しさん:2008/08/02(土) 13:19:19
Win32API質問箱スレにローカルで利用できるMSDNへのリンクが貼ってあるからそれ使ったほうが効率いいよ
252デフォルトの名無しさん:2008/08/02(土) 13:23:05
msdnって場合によってはサイトの色とか見た目が違う時あるよね?
あれって内容は同期してることは保証されてるのかな?
253デフォルトの名無しさん:2008/08/02(土) 13:28:08
なんでそういう訳のわからん回答(というより迷答)になるんだ?

>>248
左のツリーに「String メンバー」があるし、そのページのコンテツツにも
そこへのリンクがちゃんと存在している。
この書式は基本的にはローカルのMSDNライブラリでも変わらない。

推奨・非推奨の区別の表示は定型化されてない。
ただ、本文には「旧式だからこっちを使え」とか、「こっちを使うことを推奨する」
と明示してあることも多い。
254デフォルトの名無しさん:2008/08/02(土) 13:32:35
非推奨の場合、インテリセンスのキャプションにも非推奨って
出てこなかったっけ?
255デフォルトの名無しさん:2008/08/02(土) 13:35:07
>>250
なんで毎日新聞がでてくる
256デフォルトの名無しさん:2008/08/02(土) 13:35:15
obsoleteだけじゃないの?
257248:2008/08/02(土) 14:11:34
回答ありがとうございました
おかげさまで助かりました
258デフォルトの名無しさん:2008/08/02(土) 15:18:27
プロパティのゲッター・セッターのアクセシビリティが
継承クラスで変更できないのですが
こういう場合は素直にメソッドで変更するのが吉ですか?

public { get; protected set; } を public { get; set;
259デフォルトの名無しさん:2008/08/02(土) 15:19:43
途中で送信してしまいました。

public { get; protected set; } を public { get; set; }
にしたいのですがコンパイラに起こられるので
private { get; set; } public GetXXX(), protected SetXXX(hoge);
みたいにするしかないですかね?
260デフォルトの名無しさん:2008/08/02(土) 15:20:04
変えなけりゃいい
必要なら新しく作れば
261デフォルトの名無しさん:2008/08/02(土) 15:23:13
public new XXX { get { return base.XXX; } set { hoge } }とか
262261:2008/08/02(土) 15:24:38
書き方変だな
public new 型 XXX { get { return base.XXX; } set { なんかセットする処理 } }
263デフォルトの名無しさん:2008/08/02(土) 15:31:27
void Hoge(string[] files)
という関数があって、
listBox1.Items を引数に渡したいんだが

string[] files = new files[listBox1.Items.Count];
listBox1.Items.CopyTo(files);
Hoge(files);

としてるんだけど、もっとシンプルに書く方法ありますか?
264デフォルトの名無しさん:2008/08/02(土) 15:33:33
間違えた
×string[] files = new files[listBox1.Items.Count];
○string[] files = new string[listBox1.Items.Count];
265デフォルトの名無しさん:2008/08/02(土) 15:35:39
>プロパティのゲッター・セッターのアクセシビリティが
>継承クラスで変更できないのですが
狭くすることは出来たよねたしか?

だったらそれを上手く使えばシャドウイング使わなくても出来そうだね。
っていうか昔やったことがあった気がする。
まあbaseクラスを弄れない場合はどうしようもないけど。
266デフォルトの名無しさん:2008/08/02(土) 15:39:03
>>263
普通にIEnumerableを引数にとってString[]を返すstaticメソッドを用意する。
267デフォルトの名無しさん:2008/08/02(土) 16:52:15
相談です。
C#でコマンドラインから起動するときに、引数を取りたいのです。
Main関数があれば
static void Main(string[] args)
でよいのですが、GUIプログラムで、
namespace Program
{
public partial class Form1 : Form
{
private string appId;

public Form1()
{
InitializeComponent();
}
とかで始まる場合、どのようにしたらよいでしょう?

あと、その引数をテキストボックスにセットするには、
private void keywordTextBox_TextChanged(object sender, EventArgs e)
{

}
になんと書けば?
268デフォルトの名無しさん:2008/08/02(土) 16:59:30
Main関数はある
Form1にそのargsを渡しておけばいい
keywordTextBox.Text = args[i];
269デフォルトの名無しさん:2008/08/02(土) 17:05:09
ほんとだ。ありました。Form1.csばかりみてましたが、Program.csにありました。感謝。
private void keywordTextBox_TextChanged(object sender, EventArgs e)
{
keywordTextBox.Text = args[i];
}
はだめなんですけど、こちらはどうやって渡せばよいでしょう?
270デフォルトの名無しさん:2008/08/02(土) 17:06:31
Main の args 使うほうがいいと思うので超絶薦めないが
Environment.GetCommandLineArgs() で取れる。
Main の args とはちょっと違うんだが(先頭に実行ファイル名が入る)。
271デフォルトの名無しさん:2008/08/02(土) 17:13:33
俺はGetCommandLineArgs()のほうが場所を選ばないから好きだな
アクセスはこうする
string[] args = Environment.GetCommandLineArgs();
for (int i = 1; i < args.Length; i++)
{
args[i];
}

テキストボックスに値をセットする場合、TextChangedは関係ない
テキストボックスで変更された値を取得したいとき、TextChangedを使う

コマンドラインパラメータをテキストボックスにセットするなら以下のとおり
string[] args = Environment.GetCommandLineArgs();
textBox1.Text = string.Join(", ", args, 1, args.Length - 1);
272デフォルトの名無しさん:2008/08/02(土) 17:16:18
引数ってどうせ大抵解析が必要だから
おいらならエントリポイントのクラスにプロパティ用意するかな
273デフォルトの名無しさん:2008/08/02(土) 17:23:50
ますます感謝。Environment.GetCommandLineArgs()は昨日使ったばかりなので、そのときは、プログラム名をReplaceで置き換えましたが、ひょっとすると、この - 1を使うとプログラム名なしにできるんでしょうか。
private void keywordTextBox_TextChanged(object sender, EventArgs e)
{
string[] args = Environment.GetCommandLineArgs();
keywordTextBox.Text = string.Join(", ", args, 1, args.Length - 1);
}
としてビルドは正常に終了しました。
しかしっ!
bin\Release>amazon.exe 岡本玲[リターン]
としてみましたが(アマゾンで検索するソフトを作ってます)、検索用のテキストボックスには文字列入らないです…。
274デフォルトの名無しさん:2008/08/02(土) 17:27:06
解析が必要なほど複雑な引数だったらクラスにしてるなぁ

public class Foo
{

public static Foo Create()
{
Foo foo = new Foo();
string[] args = Environment.GetCommandLineArgs();
...

return foo;
}

}
275デフォルトの名無しさん:2008/08/02(土) 17:30:42
>>273
TextChangedから離れろww

string[] args = Environment.GetCommandLineArgs();
keywordTextBox.Text = string.Join(", ", args, 1, args.Length - 1);

以上をFormのコンストラクタに書いてもう一度試してみたらいいよ
276デフォルトの名無しさん:2008/08/02(土) 17:33:06
ワロタw
277デフォルトの名無しさん:2008/08/02(土) 17:56:43
う。笑われた…。ま、めげずに。
コンストラクタ(初耳)とは、いちばん先頭のことですね。
「クラスのオブジェクトを作成するときに呼び出す特別なメソッドのこと」(勉強中)。
public Form1()
{
InitializeComponent();
string[] args = Environment.GetCommandLineArgs();
keywordTextBox.Text = string.Join(", ", args, 1, args.Length - 1);
}
として、できました!
で、ここでさらにボタン(goButton)を押す(検索を開始する)には?
278デフォルトの名無しさん:2008/08/02(土) 18:00:16
>>277
keywordTextBox.Textが空でなかったら、goButtonのClickイベントを呼び出す
279デフォルトの名無しさん:2008/08/02(土) 18:03:48
>>278
goButtonってアマゾンのサイトのボタンなんじゃね?
280デフォルトの名無しさん:2008/08/02(土) 18:09:06
>>279
ん?そうなのか?ってことはアプリの中身は何もできていない状態ってこと?
281デフォルトの名無しさん:2008/08/02(土) 18:38:19
またまたサンキューです。
「C# イベント呼び出し」「C# クリックイベント」で検索し、
public Form1()
{
InitializeComponent();
string[] args = Environment.GetCommandLineArgs();
keywordTextBox.Text = string.Join(", ", args, 1, args.Length - 1);
goButton.PerformClick();
}
としてみましたが、待てど暮らせどクリックできず…。

いや、アプリの中身はできてて動いてますよ〜。
手動でキーワードを入れて、〔検索〕ボタン(名前はgoButton)を押せば、Amazonを検索できてます。
282デフォルトの名無しさん:2008/08/02(土) 18:57:30
>>281
なんでもかんでもコンストラクタに書けばいいってもんじゃないぞ。
FormのLoadイベントに書いてみ
283デフォルトの名無しさん:2008/08/02(土) 19:19:24
できました!
あとは引数のないときのif文について。

string[] args = Environment.GetCommandLineArgs();
if (args != null)
{
keywordTextBox.Text = string.Join(", ", args, 1, args.Length - 1);
}
で、ビルドはできるようになりました。
bin\Release>amazon.exe 岡本玲[リターン]
で、検索して起動も完璧!(大感謝です)。
が、
bin\Release>amazon.exe[リターン]
だと、引数を設定しろとのパネルが出ちゃいます。
284デフォルトの名無しさん:2008/08/02(土) 19:27:36
>>283
どの行でエラーが発生してるのか把握できてる?
ブレークポイントの設定やステップ実行のやり方はわかる?

で、tryとcatchについて調べてみよう。
285デフォルトの名無しさん:2008/08/02(土) 19:37:50
や、try-catchの知識はいずれ必要だがここでは違うだろ
まず引数の数や中身を確認しろという話だ
286デフォルトの名無しさん:2008/08/02(土) 19:39:51
ナイスアドバイス。
どの行でエラーが起きているか把握してません(よわい…)
ちょっと飯食ってきます。
287デフォルトの名無しさん:2008/08/02(土) 20:02:19
デバッグモードでコンパイルしないとデバッグできないよ
上のほうのツールバーにリリースになってるところがあるからクリックしてデバッグに変えてみ

それからコマンドラインの引数はプロジェクトのプロパティで設定できる
プロジェクトツリーの根元の項目を右クリックしてプロパティ
288デフォルトの名無しさん:2008/08/02(土) 20:06:20
private void Form_Load(object sender, EventArgs e)
{

string[] args = Environment.GetCommandLineArgs();
if (args.Length != 1)
{
keywordTextBox.Text = string.Join(", ", args, 1, args.Length - 1);
goButton_Click(this, EventArgs.Empty);
}

}

private void goButton_Click(object sender, EventArgs e)
{
// 検索処理

}
289デフォルトの名無しさん:2008/08/03(日) 00:02:02
文字ごとに処理をする関数を作りたいのですが
Stringで渡した方がいいでしょうか?Char[]で渡した方がいいのでしょうか?
290デフォルトの名無しさん:2008/08/03(日) 00:06:37
どっちでも受け取れるよう、引数をIList<char>型にしておけばいい。
291デフォルトの名無しさん:2008/08/03(日) 00:18:15
>>290
あるあ・・・ねーよwww
292デフォルトの名無しさん:2008/08/03(日) 00:28:39
確かに俺も一瞬あるあるっていいかけたwww

>>289
あくまで文字列操作なんだったら string 渡しとけ。

冗談抜きで「文字コードの配列」として以上の意味を全く持ってない場合なら char[] でもいいけど。
293デフォルトの名無しさん:2008/08/03(日) 00:29:23
>>289
どっちでも使いやすい方でいい気もするんだけど、
自分以外の人間も使うメソッドならStrigの方がいいんじゃないの?

char[]だといろいろ余計なチェックが必要になるじゃん。
294デフォルトの名無しさん:2008/08/03(日) 00:32:24
>>290
IEnumerable<char>だろjk
295デフォルトの名無しさん:2008/08/03(日) 00:35:51
IList<char>とかやっちゃうやつはオブジェクト指向の暗黒面に捕らわれてる
296デフォルトの名無しさん:2008/08/03(日) 00:36:52
下らんこと言って楽しいのかね。
いや人から見て面白いと思ってるんだろうか。
こういう下らないヲタ系プログラマは粛清してやりたいよまったく。
297デフォルトの名無しさん:2008/08/03(日) 00:38:46
>>296
お前みたいなやつのほうがウザイさ加減が上。
298289:2008/08/03(日) 01:06:07
サンクス
今のところは自分だけで使うのでStringにしておきます。
299デフォルトの名無しさん:2008/08/03(日) 01:28:33
まあ、夏休みに入ったからな。
300290:2008/08/03(日) 02:29:55
>>296
サーセンww
301マジで初心者:2008/08/03(日) 02:50:32
本当に初心者です。ホームページ上の一部の文字情報をとってくるためには
どのような関数?を使用したらよいのですか?
302デフォルトの名無しさん:2008/08/03(日) 04:19:44
初心者って名乗るやつは2ちゃんで嫌われるってことを知らないのかね初心者は
303デフォルトの名無しさん:2008/08/03(日) 04:48:30
>>295
あるある。意味もなく間口の広いメソッドを作って、自分しか使わないとか。
304デフォルトの名無しさん:2008/08/03(日) 05:13:36
ファイルコピーの完了を監視できないでしょうか?
FileSystemWatcherだと、完了までは確認できないみたいで。。。
とある掲示板では、コピー中だとファイルが開けないので、
開けるようになるまで試行して、開けたら完了とみなす。みたいな事が
書かれていたのですが、他の方法は無いものでしょうか?
305デフォルトの名無しさん:2008/08/03(日) 07:05:12
どういう状況なのか微妙にわからないけど
Processクラスでcopyコマンドの完了まで待機するんじゃだめなの?
306デフォルトの名無しさん:2008/08/03(日) 09:32:12
おはようございます。みなさん昨日はいろいろありがとうございました。たくさんできてうれしくなって缶ビールを飲んだら、すっかり気持ちよくなって、起きたらもう朝でした。幸せ者です。
>>284
try-catchは、エラーが予測されるある処理を実行して、エラーが出たら別の処理に移るもので、今回は、そのcatchがエラーを出している、ということはたぶんわかっています。
ブレークポイントとステップ実行は、まだこれからです。ちょっとアップアップです。
>>285
ふむふむ。
>>287
ふむふむ。え〜と、たぶんいまのところずっとデバッグモードでコンパイルしていると思います。っていうか、違いがあることを知りました。
ツールバーは使ったことがなかった…。リリース/デバッグ切り替えは見つからなかったのですけど、オプションの設定とかが必要なんでしょうかね。
コマンドラインの引数はプロパティで設定できるんですか!
おお、なんかいろいろ設定できますね。
>>288
これかっ! できました。ありがとうございます。
307デフォルトの名無しさん:2008/08/03(日) 09:40:06
酒を抜いてから書き込んでくれ
308デフォルトの名無しさん:2008/08/03(日) 09:51:22
飲んだのは500ミリの缶ビール1本ですから。もう抜けてま〜す。
で、さらに質問。
bin\Release>amazon.exe 岡本玲[リターン]
のときはばっちり動くのですが、
bin\Release>amazon.exe filename.txt[リターン]
として、
filename.txt
岡本玲[リターン]
仮面ライダーキバ[リターン]
とする場合に、その個々の要素で検索するには、たぶん配列の理解が必要、ということでよいんですよね?
ほかにあとはファイルIOも必要か。
このあいだファイルを読んで、行番号をつける、というのを書けたので、行番号の代わりに、amazon.exeと書けばよいわけだから…。

if arg[0] == *.txt
{
readline ://ファイルを読む処理
writer.WriteLine("{0}\t{1}", "amazon.exe ",lines);
//作ったファイルを実行!
}
else
{
//いまの処理
}
とかでよいと思います。

Q ifの条件って、これでよい?
Q これ、テンポラリーのファイルを作らなくても実行できるものですか?
309デフォルトの名無しさん:2008/08/03(日) 09:58:42
>>302
じゃあ、初心者用と名乗ってるこのスレは、2ちゃんで嫌われ者なんだね。
310デフォルトの名無しさん:2008/08/03(日) 10:07:03
ぐぐれ
・Path.GetExtension()
・File.Exists()
・FileStream→StreamReader.ReadLine()
・Process.Start()
311デフォルトの名無しさん:2008/08/03(日) 10:39:22
おいおいそのやりかたはどうなのよ?
312デフォルトの名無しさん:2008/08/03(日) 12:32:02
>>310
要求仕様には忠実だなwww

>>308
「//いまの処理」の所を、検索ワードを引数に取る関数として切り出す。
・ファイルが渡された場合、1行ずつ取得して↑の関数に一つずつ渡して処理させる。
313デフォルトの名無しさん:2008/08/03(日) 12:47:28
非推奨のメソッドを使うと具体的にどんな問題があるんですか?
314デフォルトの名無しさん:2008/08/03(日) 12:55:21
SP一つ上がっただけで急に消えたりとかバグが発覚しても直されなかったりとか
315デフォルトの名無しさん:2008/08/03(日) 13:52:40
class B
{
 public String Show() { return hoge(); }
 protected String hoge() { return "B";}
}
class C:B
{
  protected String hoge() { return "C";}
}

(new C).Show() がCを返すにはどのようなキーワードを使えばいいんですか?隠蔽するならnewを使えってIDEはいってるけど・・・
それともこの場合はabstruct class Aの中でabstruct String hoge()とpublic String hoge()を用意した方がいいんでしょうか?
316デフォルトの名無しさん:2008/08/03(日) 13:57:05
何が言いたいのかよく分からんけどhogeを仮想にするだけじゃないの?
317デフォルトの名無しさん:2008/08/03(日) 13:57:18
virtualとoverride
318デフォルトの名無しさん:2008/08/03(日) 14:28:14
Java 屋さんと見た。
319デフォルトの名無しさん:2008/08/03(日) 15:00:49
>>317 サンクス。滅多に使わないから仮想メソッドとか忘れてたw
>>318 残念。デルフィアン(?)です。Delphi.netは糞です。クラス名にTがつかないDelphiなんてDelphiじゃありません。
320デフォルトの名無しさん:2008/08/03(日) 15:50:51
ここ最近質問者のキャラが濃くなってる気がする
321デフォルトの名無しさん:2008/08/03(日) 17:34:11
cookieヘッダを自前で作るにはどうすればええの?

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
Uri uri = new Uri(url);
CookieContainer cook = new CookieContainer();
//ここでcookieを追加したい。
req.CookieContainer = cook;

req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";

サーバーから受け取って保存するんじゃなくて、pythonでいう
cookie_value = 'NAME="a"; MAIL="a"; PON="***";'
req = urllib2.Request(req_url)
req.add_header('Cookie', cookie_value)

みたいなことがしたい。
322デフォルトの名無しさん:2008/08/03(日) 17:42:13
すいません、自己解決しました。
cook.SetCookies(uri,cookieheader);
323デフォルトの名無しさん:2008/08/03(日) 20:19:40
>>308

using System.Text;
using System.Collections.Generic;
using System.IO;

string[] args = Environment.GetCommandLineArgs();
List<string> list = new List<string>(args.Length);
for (int i = 1; i < args.Length; i++)
{

if (File.Exists(args[i]))
{
list.AddRange(File.ReadAllLines(args[i], Encoding.GetEncoding("shift-jis")));
}
else
{
list.Add(args[i]);
}

}

keywordTextBox.Text = string.Join(" ", list.ToArray());
goButton_Click(this, EventArgs.Empty);
324デフォルトの名無しさん:2008/08/03(日) 20:32:50
Q ifの条件って、これでよい?
if (StringComparer.CurrentCultureIgnoreCase.Equals(File.GetExtension(args[i]), ".txt") && File.Exists(args[i]))
{}

Q これ、テンポラリーのファイルを作らなくても実行できるものですか?
できる
325デフォルトの名無しさん:2008/08/03(日) 21:16:16
質問です
起動したFormを常に先頭(IEより前に)に出すのは可能でしょうか?
326デフォルトの名無しさん:2008/08/03(日) 21:23:54
TopMostぐらいかな
SetParentは別プロセス禁止って明記されてるからなぁ
327デフォルトの名無しさん:2008/08/03(日) 21:25:44
はい
328デフォルトの名無しさん:2008/08/03(日) 22:09:54
>>326
できました
ありがとうございます
329デフォルトの名無しさん:2008/08/04(月) 05:59:35
>>326
今MSDNライブラリを確認したけど、そんなこと書いてないぞ。
330デフォルトの名無しさん:2008/08/04(月) 06:19:53
>>329
> 新しい親ウィンドウと子ウィンドウは、同一アプリケーションに属していなければなりません。
331デフォルトの名無しさん:2008/08/04(月) 06:38:29
同一アプリケーションとは書いてあるが、同一プロセスではないな
332デフォルトの名無しさん:2008/08/04(月) 09:15:07
C#から使えるエディタコンポーネントで
キーワード表示や行番号表示に対応したものってありますか?
今までに見つけたものだと、キーワードが1色しか設定できなかったり
行番号に対応していなかったりしていたんですが。
333デフォルトの名無しさん:2008/08/04(月) 15:21:09
MonoDevelopから引っ張ってくれば
GPLだけどw
334デフォルトの名無しさん:2008/08/04(月) 17:11:06
別のスレッドで実体化したフォームが、スレッドを閉じるまでフリーズしてしまうんですが、
ButtonなどからhogeForm.Close()とか呼び出すにはどうしたら良いのでしょうか?

Application.Doevents()を書いてみたりしたのですが、効果はありませんでした
335デフォルトの名無しさん:2008/08/04(月) 17:33:42
独自用語使うのはやめれ スレッドで実体化だのスレッドを閉じるだの
そもそも普通はGUIは全てGUIスレッド一つで扱うもんだが何故別スレッドにした?
336デフォルトの名無しさん:2008/08/04(月) 18:03:26
>>335
メインスレッドは極力軽くしたいと思って、別のスレッドでnewしてたんですが、
GUIの処理はメインスレッドに戻ってやるものだったんですね。

ありがとうございます
337デフォルトの名無しさん:2008/08/04(月) 22:04:59
http://msdn.microsoft.com/ja-jp/library/acy3edy3(VS.80).aspx
によると、Main()のアクセス修飾子をpublicにしてはならないそうなのですが、
どうしてでしょうか?
338デフォルトの名無しさん:2008/08/04(月) 22:08:10
弊害はあっても必要性はないから。
小学生でも考えればわかるじゃん。
339デフォルトの名無しさん:2008/08/04(月) 23:10:20
ttp://dobon.net/vb/dotnet/programing/playmidifile.html
ここを参考にwmpでサウンドファイルの再生をしようとしているのですが、
音が出ません。

具体的にはthis.mediaPlayer.controls.play();
で以下の例外がプロパティに代入されています(何故かスローされない)。
どうすれば再生できるのでしょうか。


{"型 'WMPLib.WindowsMediaPlayerClass' の COM オブジェクトを
インターフェイス型 'WMPLib.IWMPPlaylist' にキャストできません。
IID '{D5F0F4F1-130C-11D3-B14E-00C04F79FAA6}'
が指定されたインターフェイスの COM コンポーネント上での
QueryInterface 呼び出しのときに次のエラーが発生したため、
この操作に失敗しました: インターフェイスがサポートされていません
(HRESULT からの例外: 0x80004002 (E_NOINTERFACE))。"}
340デフォルトの名無しさん:2008/08/05(火) 00:35:09
>>338
その弊害を教えろって琴田と思うぞ、うん
341339:2008/08/05(火) 00:57:38
自己解決しました。
アパートネントモデルがSTAである必要があるんですね・・・

BeginInvokeで呼び出したメソッドからInvokeするのっておかしくないですよね?
342デフォルトの名無しさん:2008/08/05(火) 20:17:02
treeViewでかれこれ5時間くらいつまっています。
任意のノードをインデックスで選択状態にしたいのですが、やり方がわかりません。
treeView1.SelectedNode.Indexにインデックスを直接代入しようとしたら、
『読み取り専用』だと言われました。悲しいです。
343デフォルトの名無しさん:2008/08/05(火) 20:32:05
WPFを使わないフォームアプリってVistaでもGDIで描画されちゃうの?
むしろ遅いって事?
344デフォルトの名無しさん:2008/08/05(火) 21:19:22
>>343
大丈夫。悪い方向への変化は感じない。
345デフォルトの名無しさん:2008/08/05(火) 21:23:22
>>342
TreeView.Nodesの中からインデックスでTreeNode取得してTreeView.SelectedNodeに代入
つかTreeViewは階層があるからインデックスっつってもどんなの指してんのかよく分からんが
346デフォルトの名無しさん:2008/08/06(水) 08:26:37
TextBoxのスクロールバーが、長い文を改行した時でも元に戻らないのですが、
これをリセットするにはどうしたらいいのでしょうか?

具体的には開業後にも直前にあった文章の位置までスクロール出来てしまい、
意味の無い余白を表示出来てしまいます。
これはnotepad.exeでも変わらないので、Windowsの仕様と言う事になるのでしょうか?
347デフォルトの名無しさん:2008/08/06(水) 09:55:49
>>346
つ RichTextBox
348デフォルトの名無しさん:2008/08/06(水) 11:35:45
>>346
意味が分からん。
具体例で頼む。
349デフォルトの名無しさん:2008/08/06(水) 12:29:04
意味はじゅうぶんわかるけどな。
3行分のMultiLineなTextBoxを作る。
改行を10回打つ。
BSを10回打つ。
スクロールエリアは10行分のままでスクロールバーも消えない。

ってことだろ?

ならTextBoxの仕様。自分で行数数えてフォントの高さをかけて表示・非表示を
制御するか。RichTextBox使う。
350デフォルトの名無しさん:2008/08/06(水) 12:52:28
>>349
すでに取り違えてるしw
横スクロールのほうでしょ。
縦はちゃんと動作するよ。
351デフォルトの名無しさん:2008/08/06(水) 13:02:20
>>350
すまん。その通りだ。
352デフォルトの名無しさん:2008/08/06(水) 13:24:22
横スクロールなら横スクロールって書けや。
質問するなら推敲して誤字は直せよ。
353デフォルトの名無しさん:2008/08/06(水) 13:37:40
まあでも、Editコントロールは最大横幅の情報を常に持っていて
最長の行が短くなってもこれを調整することは無い仕様、ということだろうね。
まあ行が短くなるたびに全行スキャンしなきゃならんし、このコントロールが
できたのは大昔だし、こんなもんなんじゃない?
全部消すとスクロールバー自体が消えるから、入れなおせばたんとなるけどな。
354デフォルトの名無しさん:2008/08/06(水) 13:42:54
で、お礼のレスもない。
355デフォルトの名無しさん:2008/08/06(水) 13:43:56
普通に読めば分かるじゃん
356デフォルトの名無しさん:2008/08/06(水) 16:40:50
TextBoxのスクロールバーが、元に戻らないのですが、
リセットするにはどうしたらいい?

開業後にスクロール出来てしまい、
意味無いす。
これでWindowsになるの?
357デフォルトの名無しさん:2008/08/06(水) 16:51:21
日本語でおk
358デフォルトの名無しさん:2008/08/06(水) 16:52:19
英語でもおk
359342:2008/08/06(水) 16:59:22
>>345
ありがとうございます。できました。
階層ごとにインデックス振られてるから、全部いっぺんに指定できると思ったんですが、
一個ずつじゃないとできないんですね。
360デフォルトの名無しさん:2008/08/06(水) 18:02:28
エラー 2 引数 '2': 'int' から 'char' に変換できません。
というエラーがstringのSplitで出るんですが、定義を見てもインテリジェンスをみてもint countとあります。
なんでこのエラーが出るんでしょうか?

361デフォルトの名無しさん:2008/08/06(水) 18:07:11
インテリジェンスw

第一引数の型が合ってないから想定外のオーバーロードになってる
362デフォルトの名無しさん:2008/08/06(水) 18:23:24
気になる、、、どんなコード書いた?
363デフォルトの名無しさん:2008/08/06(水) 18:35:49
インテリジェンスじゃなくてインテリセンスでした・・・

setting.Split( "=" ,2 , StringSplitOptions.RemoveEmptyEntries);
って感じです。'='でもやったんですが駄目でした。 インストールしくじってるんでしょうか。
Splitの定義を見てもあってると思うんですが。
364デフォルトの名無しさん:2008/08/06(水) 18:38:32
ちなみに
setting.Split('=', '2','o');
とかでビルドが通る・・・
365デフォルトの名無しさん:2008/08/06(水) 18:51:44
配列かそうでないかはちゃんと見たほうがいいぞ。
>setting.Split('=', '2','o');

setting.Split( new char[] {'=', '2','o'} );
と同義だろう。
ということで、"=" は new string[] {"="} かnew char[] {'='} あたりでどうか。
366デフォルトの名無しさん:2008/08/06(水) 18:55:56
>>346
おい、お礼はまだか
367デフォルトの名無しさん:2008/08/06(水) 19:06:44
366はマジで書いてるわけじゃないとは思うが。(いや本当のところは分からんけどw)

お礼は当然すべきだと俺も思うし、質問だけしてトンズラする奴に腹が立つ気持ちも
わかるんだが、だからって「お礼しろ」ってのもなんだかなあw

回答する側だって本当の動機は「人に教えを垂れたい」っていうエゴなわけで、
それに気づかない奴ってのもかなり痛い奴だなあと個人的には思うんだよね。

あとdobonさんのとこの掲示板なんかでマルチポストを執拗に報告してる奴とかさあw
368デフォルトの名無しさん:2008/08/06(水) 19:09:16
>>365
おおう、できました。
ありがとうございました。
369デフォルトの名無しさん:2008/08/06(水) 19:09:44
オレもお礼の強要はネタにしか思えんけどw、
回答が役に立ったかどうかは気になるから、報告があると安心するけどね。
370デフォルトの名無しさん:2008/08/06(水) 19:35:40
静的なクラスでスレッド作ってた時は軽かったんですが、
Static消した途端にあほみたいに重くなるのって理由あるんでしょうか?
371デフォルトの名無しさん:2008/08/06(水) 19:39:39
>>370
たぶん、というより確実に、重くなった原因は他にあると思う。
372デフォルトの名無しさん:2008/08/06(水) 19:44:28
何が重いのかどんだけ重くなるのか
373デフォルトの名無しさん:2008/08/06(水) 21:10:01
質問させてください
IList<decimal> list = new List<decimal>();
list.add....

とか書いて作成したlistをソートしたいと考えています
decimalですので単に大小を比較してソートするだけなのですが、IList<T>型にはSortとかいうメソッドはないのでしょうか?
APIみてもよくわかりません

よろしくお願いいたします
374346:2008/08/06(水) 21:19:07
今読みました。
何か知らぬ間に話が膨らんでるようで申し訳ないです

RichTextBoxを使えば取りあえずの要求は満たされるんですね。
ありがとう
375デフォルトの名無しさん:2008/08/06(水) 21:19:53
>>373
IListとListは違うよ
376デフォルトの名無しさん:2008/08/06(水) 21:22:19
論理演算子が良くわからないんですが、
&&と&の違いって何なのでしょうか?
377デフォルトの名無しさん:2008/08/06(水) 21:30:58
左側が真のとき右側を評価するかどうか
378デフォルトの名無しさん:2008/08/06(水) 21:31:49
って真じゃない偽だ
379デフォルトの名無しさん:2008/08/06(水) 21:35:05
if (A){if (B)}
がif (A && B)って事ですか

C & C = true
って事ですね
380デフォルトの名無しさん:2008/08/06(水) 21:45:45
>>379
>if (A){if (B)}がif (A && B)って事ですか
そいう言うこと
>C & C = true
どういうこと?

A && B は(Aがfalseのとき)Bを評価しない分高速だが、Bが実行されるときとされないときが出てくる。
たとえば、Bがobj.Close()というメソッドだった時 obj.Close()が呼び出されない場合がある。
それに対し&は処理が遅い分、どの式も必ず評価される
381デフォルトの名無しさん:2008/08/06(水) 21:53:08
if(func1() & func2()){}

みたいにfunc2()が評価される事を意識して&が使われるのってどうなの?
第三者に対して分かりにくくね?
382デフォルトの名無しさん:2008/08/06(水) 21:59:31
ifの評価式のところでは副作用があることをやっちゃいけないと思うんだ
なので俺だったらこうする

bool a = func1();
bool b = func2();
if (a && b ){}
383デフォルトの名無しさん:2008/08/06(水) 22:24:05
初心者用スレなんだからさあw

そういう風に書くと常にそう書かないと思い込む
教条主義的というか馬鹿の一つ覚えする奴が出るだろう。
384デフォルトの名無しさん:2008/08/06(水) 22:42:12
この程度でそんな思い込む奴いたらそもそもどうしようもないからどうでもいい
385デフォルトの名無しさん:2008/08/06(水) 23:16:00
ドラッグドロップイベントも引数に(object sender, RoutedEventArgs e)
って書いておけば間違いないですか?
EventSetter使うべきですか?

イベントの自動生成はどうして無くなっちゃったんでしょうか、便利だったのに・・・
386デフォルトの名無しさん:2008/08/07(木) 00:04:22
>>384
それは言わない約束です><
387デフォルトの名無しさん:2008/08/07(木) 00:33:26
StreamService.Instance.Remove<FutureData>(FutureDataUpdated);

上記のソースの<FutureData>の<>ってなんですか?
()は引数だってのはわかるんですが、<>はなに?
388デフォルトの名無しさん:2008/08/07(木) 00:40:01
ジェネリックでググルかMSDN。
この程度であわててたらLinqでどうなるかわからんね。
389デフォルトの名無しさん:2008/08/07(木) 00:48:24
>>385
DragOverやDropイベントをMSDNで引く
→イベントのデリゲートの型がわかる
→今度はそのデリゲートのページを見る
→適切な引数がわかる
390デフォルトの名無しさん:2008/08/07(木) 00:59:13
>>389
コントロールの要素内にイベント名入れたらインテリセンス出てきました。
すみませんでした

391デフォルトの名無しさん:2008/08/07(木) 01:03:49
System.Windows.Input.KeyEventArgsで、
[Ctrl]+[Key.hoge]を判別するにはどうしたらいいのでしょうか?

System.Windows.Forms.KeyEventArgsでは、
e.ControlでCtrlキー、e.AltでAltキーの押下が判別できましたが・・・
392デフォルトの名無しさん:2008/08/07(木) 01:17:27
373です
>>375
msdn読んで、IList<T>にはSortメソッドが存在せず、List<T>にはSortメソッド存在することは理解しました。
しかし、なぜIList<T>にSortが存在しないのかやはりわかりません
IList<T>の解説を読むと
「IList<(Of <(T>)>) ジェネリック インターフェイスは、ICollection<(Of <(T>)>) ジェネリック インターフェイスの子孫であり、すべてのジェネリック リストの基本インターフェイスです。」
とあります
それなのに、SortメソッドがIList<T>になくList<T>にだけあるのはいまいちぴんときません

そもそも、基本的な質問なのですが、リスト構造を使いたい場合
List<XX> list = new List<XX>
という書き方は間違いなのでしょうか?
インタフェースが存在するなら、生成は実際のクラスで行うにせよ、アクセスはインタフェースを介して行うのが常識だと思っていましたが、違うのでしょうか?

ついでに、さらに質問ですが、IList<T>のAPI読んでも、IList<T>の実装クラス一覧が見当たりません
この辺はどこを見れば良いのでしょうか?

何度もすみませんが、よろしくお願いいたします

393デフォルトの名無しさん:2008/08/07(木) 02:36:54
>>392
だから、List<>とIList<>は名前が似てるだけで他に特別な関係があるわけじゃねーんだよ。
394デフォルトの名無しさん:2008/08/07(木) 02:38:25
>>392
> インタフェースが存在するなら、生成は実際のクラスで行うにせよ、
> アクセスはインタフェースを介して行うのが常識だと思っていましたが、違うのでしょうか?

どこで聞きかじった知識なのか知らんが、そんな常識は捨ててくれ。今すぐ。
395デフォルトの名無しさん:2008/08/07(木) 02:46:09
>>393
MSDN読むとList<T>はIList<T>の実装のように見えますけど、違うのでしょうか?

>>394
じゃ、なんのため、インタフェースがあるのでしょうか?
396デフォルトの名無しさん:2008/08/07(木) 02:52:04
多重継承を実現するため
397デフォルトの名無しさん:2008/08/07(木) 03:04:28
IList<>はインターフェイスを継承させるだけのクラスで、
実際にはそこから派生したListやDictionaryなんかを使うものでしょ?
398デフォルトの名無しさん:2008/08/07(木) 03:12:49
>>395
そう。IList<>はただのList<>の親クラス。

お前はどんなクラスでもObjectにキャストしてから使うのか。
399デフォルトの名無しさん:2008/08/07(木) 03:16:43
原始的なIListに高度なSortはいらないという設計になってるだけでしょ
ぶんまわすだけならその使用法で問題ないと思うが
Sortしたいならそのようなinterfaceを持つものを使うしかないよ
自作でも何でも
400デフォルトの名無しさん:2008/08/07(木) 03:56:28
.Net 3.5ならIListというかIEnumerableにOrderByがある
まあListならSortを使ったほうが効率的だろうけど
401デフォルトの名無しさん:2008/08/07(木) 05:15:12
>>392>>395
ソートはリスト(クラス名とかじゃなくて概念そのものね)の構成要素じゃないし、
IList<T>を最小構成にしたかったのでは

インターフェイスは必要だから/必要と考えられたからあるのであって、
必要がなければ無理に使わなくてもいいし、その必要性が理解できていないレベルなら
使うという選択肢自体削っていいと思う
402デフォルトの名無しさん:2008/08/07(木) 05:22:48
回答側も夏まっさかりか・・・
403デフォルトの名無しさん:2008/08/07(木) 06:20:13
「SortしたいならListのまま使え」でFAなのに、何を騒いでいるんだ?
404デフォルトの名無しさん:2008/08/07(木) 06:55:59
>>392
> それなのに、SortメソッドがIList<T>になくList<T>にだけあるのはいまいちぴんときません
インターフェイスはその機能を実現する最小限の機能セットであるべきだから
IListにSortメソッドが含まれると、IListを実現するすべてのクラスでSortを実装しなければならなくなり、使い回しにくくなってしまう
車が運転できますといった場合、カーナビの操作までは含まれないような感じ

> インタフェースが存在するなら、生成は実際のクラスで行うにせよ、アクセスはインタフェースを介して行うのが常識だと思っていましたが、違うのでしょうか?
局所的に使うだけなら意味ないよ
メソッドの引数、戻り値、クラスのプロパティやフィールドなどで使うなら意味がある

たとえば、メソッドの引数として使えば、以下のように、Listや他のIListから派生したクラスが使えて便利になる
ただし、この場合はIEnumerable<T>を使えばもっと多くの種類のコレクションクラスが使えるようになる
void DoSomething(IList<string> list)
{}

> ついでに、さらに質問ですが、IList<T>のAPI読んでも、IList<T>の実装クラス一覧が見当たりません
> この辺はどこを見れば良いのでしょうか?
リフレクションを使って自分で調べるしかない。俺は自作の検索ツールを使ってる
405デフォルトの名無しさん:2008/08/07(木) 07:14:28
>>382
if (a != null && a.Foo())
{}
とかは普通に便利だろ

>>376
'&'は論理演算子じゃなくて、ビット演算子
Booleanを扱う'&&'とは根本的に違う
どっちかというと'+'とか'-'とかに近い

ビット演算子というのは、数字を2進数として扱い、ビットごとにANDをとったりする
010 & 011 = 010
010 & 101 = 000
というような計算を行うもの

[Flags]属性付きの列挙型でよく使う
406デフォルトの名無しさん:2008/08/07(木) 07:18:29
382は副作用がある場合についていってるんだし
boolに対する&は論理演算だし
407デフォルトの名無しさん:2008/08/07(木) 07:35:45
>>406
bool型への'&'は1桁の2進数を処理するビット演算だから論理演算じゃないだろ
副作用の問題だって、論理演算のように見えるビット演算だから混乱を招きやすいわけで、
理解するまで'&&'だけ使っとけって言ってやればいいじゃん
なぜわざわざ初心者を混乱させようとするんだ
408デフォルトの名無しさん:2008/08/07(木) 07:42:47
>>395
IList<T> は、単に list[i] で要素を取れることだけ保証したインターフェース。
Sort は要件に入ってない。
どうしてもインターフェース化したいなら ISortable とかを別インターフェースにすべきだろう。

>>405
Perl ではよく使うけどね、短絡 &&, || の副作用を積極的に使うの。
ただ、C# ではコーディングマナーとしてはそれは良くないとされてるはず。

& がビット単位なのは C++。
C# の場合、違いは短絡評価の有無だけ。

a && b は
operator false(a) ? a : operatora & (a, b)
という挙動になる。
409デフォルトの名無しさん:2008/08/07(木) 08:23:47
hoge != null && hoge.IsHoge なんかはよくやっちゃうけど
410デフォルトの名無しさん:2008/08/07(木) 08:56:25
>>407
おまえが混乱させてんだろーが
411デフォルトの名無しさん:2008/08/07(木) 09:22:31
>>410
偉そうに無意味な知識をひけらかして混乱させている連中のことを言ったわけだが
反応するところを見ると自覚はあったわけだw
412デフォルトの名無しさん:2008/08/07(木) 09:35:27
意味わからん、俺書くの初めてだし。
俺は>>406>>407の流れに対して言っただけ。
うそ言ってるから混乱させてるのはお前だろっておもっただけ。
413デフォルトの名無しさん:2008/08/07(木) 09:37:03
ああ、そういう意味では、特に1行目に対して言っただけ。
3行目は同意。
414デフォルトの名無しさん:2008/08/07(木) 11:02:36
ループ待機させてるスレッドが意図しないタイミングで無くなってしまうんですが、
スレッドが消える要件にはどんなものがありますか?

状況
・例外は起こっていません
・ブレークポイントをループ直後のにはさんでいますがそこまで進みません
415デフォルトの名無しさん:2008/08/07(木) 11:09:00
ループ直前でブレイクさせてみたら
416414:2008/08/07(木) 11:09:33
自己解決しました
breakと書くところをreturnって書いてましたorz
417デフォルトの名無しさん:2008/08/07(木) 11:12:06
どじっ娘かよw
418デフォルトの名無しさん:2008/08/07(木) 16:37:54
>>392
最近 DI を始めましたって感じかもしれないね。
あれ始めてすぐは何にでもインターフェイスがなければならないと思うようになって、
依存性が高かろうが低かろうが、標準ライブラリのクラスだろうがDIしないと気がすまないようになる。
一過性の病気というか麻疹みたいなものだ。
419デフォルトの名無しさん:2008/08/07(木) 16:44:01
PaintBoxでResizeイベント中にImageを弄ったら
どうやらもう一度Resizeが呼ばれるらしいのですがなんとかなりませんか
420デフォルトの名無しさん:2008/08/07(木) 20:41:01
>>419
とりあえずフラグ作って2回目の呼び出しを無視したら?

Resizeって無限に呼び出されずに2回だけ呼び出されるんだな……なんでだろ?
421デフォルトの名無しさん:2008/08/07(木) 20:46:33
というか、何でImageを弄る必要があるんだろう。
サイズが変わったからってImageを弄る必要は普通はないはずだと思うけどな。

ところでふと思ったが、ResizeとSizeChangedって何が違うんだっけ?
422デフォルトの名無しさん:2008/08/07(木) 21:37:18
>>420-421
SizeChangedイベントを使うとうまくいきました
ありがとうございます
423デフォルトの名無しさん:2008/08/07(木) 21:43:17
>>418
DI以前にプログラムそのものが始めてです(DIはつい最近知りました)
Java、C#、rubyを触ってます

色々な先生から話を聞きましたが、Collectionのような外部とのやり取りが決まっていて内部の実装方法にたくさんのやり方がある場合インタフェースは有効な手段だと感じています
とりあえず、List<T>はインタフェースを介さずアクセスする方向で進めていきます

424デフォルトの名無しさん:2008/08/07(木) 22:08:15
要件にあった必要最小限のインターフェースを使うって方針で間違ってない。
Sort が必要なら List<T> そのまま使えばOK。
425デフォルトの名無しさん:2008/08/07(木) 22:14:47
↑デタラメ
426デフォルトの名無しさん:2008/08/07(木) 22:17:13
>>423
逆に、
List<T>というただ一つの実装方法を使う時には
インターフェイスは不要な手段ということでは?
427デフォルトの名無しさん:2008/08/07(木) 22:54:49
>>426
まだ未熟な人間ですが、たとえ、実装が1個しかなくても、リストのような提供する機能がはっきりしていて、実装方法が複数考えられる場合インタフェースでアクセスすることが望ましいと考えています
リスト構造は実装方法が色々と考案されており、これから新たにList<T>と同等の機能を提供する別の実装が提供される可能性があります(もしくは自作する可能性もあります)
その場合、使用するクラスを変更した場合、インタフェースを介してアクセスしていれば、インスタンス生成部を変更するだけで修正が終わるなどの利点があると考えています



428デフォルトの名無しさん:2008/08/07(木) 23:00:32
そりゃ前提条件を変えれば結論が変わる事もある
429デフォルトの名無しさん:2008/08/07(木) 23:06:35
C++ の STL なんかだと、sort はコンテナのメンバ関数じゃなくて、
std::sort(random_access_iterator begin, random_access_iterator end)
よね。

ただし、std::list なんかは、↑ランダムアクセスイテレータ持ってないけども
list 専用のアルゴリズムでソート可能なんで list::sort を持ってる。

C# もそれに則ってるんじゃないのんだろうか。
整列は Array.Sort とか Enumerable.OrderBy を使うのが基本で、
List<T>.Sort は List<T> 専用のアルゴリズムのソート。
430デフォルトの名無しさん:2008/08/08(金) 00:07:59
IList<T>はランダムアクセスイテレータを持ってるわけだけど
インターフェース越しの呼び出しは遅いからなあ
配列にコピーしてからやったほうが早そう
431デフォルトの名無しさん:2008/08/08(金) 00:43:33
C#にダックタイピングはいらんですよ
432デフォルトの名無しさん:2008/08/08(金) 01:15:35
極めて細かい粒度(メソッド単位)で全てインタフェース化したら、Listは幾つのインタフェースを実装するんだろうね?
細かすぎる粒度は、全体の見通しを悪くして、仕様を複雑化させるだけだと思うんだ。(要はバランス)

もし自分が納得いかない場合は、納得できる物を自分で作れば良い。
君以外の大多数の人々は現状で満足している事を忘れるべきではない。
433426:2008/08/08(金) 03:20:54
>>427
今までの他の人たちのレスを繰り返すことになるかもしれないけど、

単にSort()を持ったインターフェイスが欲しいのならば、
ISortable を作れば良いし、
ISortableList : IList , ISortable みたいなインターフェイスを作ってみてもいいかもしれない。

List<T>と同等の機能の別実装ならば、
普通に継承してオーバーライドしてしまえば、ほとんど問題解決しない?
それ以上の可能性のために冗長な機能を付ける必要はないのでは?


あと、IList<T>自体はSynchronizedCollection<T>にも実装されているし、
「インデックスによって個別にアクセスできるオブジェクトのコレクションを表します。」
となっていて、そういうふうに設計されている。
List<T>.Sort()があるからIList<T>.Sort()を作れ、というのは不自然かなと思う。
434デフォルトの名無しさん:2008/08/08(金) 03:30:39
アルゴリズムに関してはIEnumerableだけあればいいんだよ
LINQはそれに気づかせてくれた
435デフォルトの名無しさん:2008/08/08(金) 03:44:13
データが然程多くなく、かつリソースが潤沢ならな
436デフォルトの名無しさん:2008/08/08(金) 14:55:00
using System;

class Exercise
{
static void main()
{
Console.Write("input a:");
int a = int.Parse(Console.ReadLine());
Console.Write("input b:");
int b = int.Parse(Console.ReadLine());

Console.Write(a + b);
Console.Write(a - b);
Console.Write(a * b);
Console.Write(a / b);
}
}

と入力すると
エラーをはくのですが、文法で間違っているところはどこでしょうか?
437436:2008/08/08(金) 14:56:07
実際には
static void main()の前などには空白を入れています
438デフォルトの名無しさん:2008/08/08(金) 15:00:31
main→Main
439デフォルトの名無しさん:2008/08/08(金) 15:00:40
なんでエラーを書かないんだろうね?
多分読みもしてないんだろうね
440デフォルトの名無しさん:2008/08/08(金) 15:02:20
自己解決しました。
それと、

Console.Write(a + b);
Console.Write(a - b);
Console.Write(a * b);
Console.Write(a / b);

だと横一列に結果がでてくるので改行したいのですが
\nはどこに書けばいいんでしょうか?
441デフォルトの名無しさん:2008/08/08(金) 15:03:25
そりゃ馬鹿だから
442デフォルトの名無しさん:2008/08/08(金) 15:04:08
>>440
Console.WriteLine();を使え
443デフォルトの名無しさん:2008/08/08(金) 15:04:14
改行したい場所に書けばいい
444デフォルトの名無しさん:2008/08/08(金) 15:05:59
なにが自己解決やねん
445デフォルトの名無しさん:2008/08/08(金) 15:13:10
>>442
カスの質問にお答えしていただいてありがとうございます

>>443
Console.Write(a + b)\n;
Console.Write(a + b);\n;
Console.Write(a + b,\n);

などを試しているのですができません
くだらなさすぎる質問ですみません
446デフォルトの名無しさん:2008/08/08(金) 15:14:27
>>438
書き込むときに更新していなかったで気づきませんでした
ありがとうございます
447デフォルトの名無しさん:2008/08/08(金) 15:16:00
Console.WriteLine(a + b);
448デフォルトの名無しさん:2008/08/08(金) 15:16:35
Console.Write(a + b);
Console.WriteLine();
449デフォルトの名無しさん:2008/08/08(金) 15:17:45
Console.Write("{0}\n",a + b);
450デフォルトの名無しさん:2008/08/08(金) 15:23:41
Environment.NewLine
451デフォルトの名無しさん:2008/08/08(金) 15:24:03
ふつうは>>447の方法だなw
452デフォルトの名無しさん:2008/08/08(金) 15:25:15
>>445
>>442の意味が全くわかってないの?
453デフォルトの名無しさん:2008/08/08(金) 15:27:18
>>447
>>448
>>449
ありがとうございます。

ネットでC#について説明しているところを順番に読んでやっているのですが
Console.Write("{0}\n",a + b);  のなかの
{0} の意味が良くわかりません。

例えば、演習の回答に
Console.Write("{0} + {1} = {2}\n", a, b, a + b);
このように書いてあるのですが、良くわかりません

454デフォルトの名無しさん:2008/08/08(金) 15:28:09
>>452
わかっています
ただ、\nでやる場合はどうしたらいいかが
気になったので質問させていただきました
455デフォルトの名無しさん:2008/08/08(金) 15:31:44
そういうのは質問時に含めるとかしないとな。
あと、期待した答えじゃないレスを無視とかしてたら
誰も相手にしてくれなくなっちゃうよ。
456デフォルトの名無しさん:2008/08/08(金) 15:32:35
Console.Write("" + (a + b) + "\n");
457デフォルトの名無しさん:2008/08/08(金) 15:34:31
>>455
無視してるつもりはなかったのですが
そのようにとらえているのであれば、すみません

もうちょっと詳しく説明が載っている本を買って勉強したいと思います
458デフォルトの名無しさん:2008/08/08(金) 15:35:22
>>456
ありがとうございます
そのような方法もあるんですね
459デフォルトの名無しさん:2008/08/08(金) 15:35:32
Console.Write("{0} + {1} = {2}\n", a, b, a + b);
{0}にはaが, {1}にはbが, {2}にはa+bが入る
460デフォルトの名無しさん:2008/08/08(金) 15:35:34
Console.Write("{0} + {1} = {2}\n", a, b, a + b);は
Console.Write(a + " + " + b + " = " + (a + b));と同じ
文字列の後に続く2つ目の引数を0番、それ以降1番, 2番, …として
{0}のところが0番、{1}のところが2番、{2}のところが2番、…にそれぞれ置き換えられる
461デフォルトの名無しさん:2008/08/08(金) 15:36:07
{0}は最初の引数、{1}は二番目の引数・・・といった感じで入る
462デフォルトの名無しさん:2008/08/08(金) 15:37:56
そんなにMSDNのConsole.Writeの記述は読み解きにくいのだろうか
463デフォルトの名無しさん:2008/08/08(金) 15:39:39
>>459
ありがとうございます
そういう意味だったんですね
464デフォルトの名無しさん:2008/08/08(金) 15:42:16
そんなん見た感じで分かるじゃん
465デフォルトの名無しさん:2008/08/08(金) 15:44:10
>>464
自分は馬鹿なのでそのようなことができませんでした
466デフォルトの名無しさん:2008/08/08(金) 15:46:15
とりあえず実行してみるといい
467デフォルトの名無しさん:2008/08/08(金) 15:50:04
「馬鹿」は免罪符じゃねーぞゴミ
468デフォルトの名無しさん:2008/08/08(金) 15:52:06
馬鹿につける薬は無い
二度と来るな
469デフォルトの名無しさん:2008/08/08(金) 15:53:18
お前らも>>1読もうな
470デフォルトの名無しさん:2008/08/08(金) 15:54:54
やさしくしているじゃないか
471デフォルトの名無しさん:2008/08/08(金) 15:57:18
精神的に向上心の無い者は馬鹿だ、と太宰治も書いている
向上心の無い奴に教えても無駄だね
472デフォルトの名無しさん:2008/08/08(金) 15:58:12
煽りはスルーしてね
473デフォルトの名無しさん:2008/08/08(金) 15:59:35
Regex.Replaceの(string, MatchEvaluator)のオーバーロードって何に使うの?
474デフォルトの名無しさん:2008/08/08(金) 16:05:40
>>471
それ漱石……

>>473
マッチ文字列によって置換後の文字列を変更する場合
正規表現が"[ab]"だとして、MatchEvaluatorでマッチしたのがaだったらAに変換、bだったらBに変換、とか。
475デフォルトの名無しさん:2008/08/08(金) 16:11:17
>>474
Regex.Replace(string, MatchEvaluator)にはその正規表現を受け取る引数が無いんだけど
476475:2008/08/08(金) 16:11:51
ああすまん勘違い
477デフォルトの名無しさん:2008/08/08(金) 21:40:17
メインでは無いスレッドから呼び出したスタティッククラスのメソッドでInvokeして、
メインスレッドのインスタンスにアクセスしたいのですが、

エラー1 静的でないフィールド、メソッド、またはプロパティ
'System.Windows.Forms.Control.Invoke(System.Delegate)'
で、オブジェクト参照が必要です。

と言われてしまいます。
なので、静的でないフィールドを宣言使用すると、
「静的クラスでインスタンスメンバを宣言することはできません」
と言われます。

要求を満たすにはどうしたらいいのでしょうか?
478デフォルトの名無しさん:2008/08/08(金) 21:45:09
「なので、」って何が「なので」よ。

>エラー1 静的でないフィールド、メソッド、またはプロパティ
>'System.Windows.Forms.Control.Invoke(System.Delegate)'
>で、オブジェクト参照が必要です。

この例外のメッセージに書いてあるまんまだと思うんだけど。
479デフォルトの名無しさん:2008/08/08(金) 21:47:27
メインスレッドのインスタンスって意味不明だな
一般にインスタンスはスレッドに縛られない

コントロールにアクセスする以外はInvokeする必要は無いよ?
480477:2008/08/08(金) 22:38:51
良くまとまって無かったみたいですみません

まずメイン(Form1の)スレッドでは無いループ処理のスレッドで、
try~catch文のcatchの中から前述のスタティックメソッドを呼び出したいのですが、
そのメソッドはForm1のパブリックメソッドを呼び出すように記述しており、

ここで
"有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドから
コントロール 'textBox1' がアクセスされました。"
と、例外を出してしまいました。

そこで、スタティッククラスのスタティックメソッドからInvokeすれば良いんじゃないかと思い、
取りあえず書いてみたところ前述のようにコンパイルエラーが出ました。
481デフォルトの名無しさん:2008/08/08(金) 22:41:34
なんか要領を得んなあ。
最小限のコードを晒してくれ
482デフォルトの名無しさん:2008/08/08(金) 23:01:36
>>480
またこういうサポセンのお姉さんを泣かせるエスパ召還タイプの人か。

まずチミの言ってるInvokeってのはISynchronizeInvoke.Invokeだってこと分かってる?

つまりISynchronizeInvokeを実装したクラスのインスタンス(早い話がコントロール)
の参照を持ってなきゃ呼べない。
この当たりの当たり前のこと理解してる?
483こんな感じです:2008/08/08(金) 23:03:50
webClass{
 void methodHoge(){
  try{
  }catch (WebException we){
   WebExceptionClass.WebExceptionHandler(we);
   return false;
  }
 }
}

static class WebExceptionClass{
 public static void WebExceptionHandler(WebException webException){
  switch (webException.Status){
   case WebExceptionStatus.ConnectFailure:
    Form1.Form1Instance.stringbuilder.Append(webException.Status.ToString());
    Form1.Form1Instance.stringbuilderUpdate();
    break;
  }
 }
}

public partial class Form1 : Form{
 private static Form1 _form1Instance;
 public static Form1 Form1Instance{
  get{return _form1Instance;}
  set{_form1Instance = value;}
 }

 public void stringbuilderUpdate(){
  TextBox1Text = stringbuilder.ToString();
 }
}
484デフォルトの名無しさん:2008/08/08(金) 23:14:45
元VBerでしょ君。

VBが悪い言語だとは思わんが、VBerってこういうカプセル化もなにもあったもんじゃない
コードを平気で書くんだよななぜか。

しかもコミュニケーション不全症候群ときてるw

文章ってのは読み手の厚意を期待してテキトーに手を抜いて書くものじゃなくて、
どんな意地悪な奴が批判的に読もうと思っても一意に解釈するしかないように推敲して書くんだよ。
485デフォルトの名無しさん:2008/08/08(金) 23:17:27
>>482
System.Windows.Forms.Control.Invokeではないんですか?
methodHogeを呼び出すループでもInvokeしているんですがインテリセンスではControl.Invokeになってます
486デフォルトの名無しさん:2008/08/08(金) 23:24:32
>>484
VBは全く経験がありません。

Javaを1ヵ月と、Cを1ヵ月の経験があります。
C#は2ヵ月くらいです
テキトーではなく本当にどこが悪いのかわからないんです。
487デフォルトの名無しさん:2008/08/08(金) 23:41:03
>>486
まず君の「問題」を他人に正確に伝える努力をしよう。

ひょっとすると君自身は「そうしてる」つもりかもしれないが、
客観的には成功しているとは思えない。

君がやっていることは「俺は困ってるんです助けてください」
と同情を求めているだけ。

誰もエスパーじゃないんだから、君が君自身の問題を正確に表現しない限り
誰も助けようがないだろう。
488デフォルトの名無しさん:2008/08/09(土) 00:00:47
VBには暗黙のFormインスタンスというものがあるが、C#にはない。
何らかの方法でWebExceptionHandlerがFormインスタンスを参照できるようにプログラムを書かないといけない。
489デフォルトの名無しさん:2008/08/09(土) 00:09:51
>>488
Form1Instanceではなぜできないのでしょうか?
シングルスレッドの時は問題なく出来たのですが
490488:2008/08/09(土) 00:23:03
>>489
あーすまん。暗黙のインスタンスは関係なかったね。こうでいいんじゃないの?ほか突っ込みどころ満載なのは無視するとして。
Form1.Form1Instance.Invoke((MethodInvoker)Form1.Form1Instance.stringbuilderUpdate);
491デフォルトの名無しさん:2008/08/09(土) 01:05:49
>>490
駄目みたいです

InvalidOperationException
Message="有効ではないスレッド間の操作:
コントロールが作成されたスレッド以外のスレッドからコントロール 'textBox1' がアクセスされました。"

他の突っ込み所とはどういったところでしょうか?
492477:2008/08/09(土) 01:40:01
class Form1に
public void text_Rewrite()
{
 if (this.textBox1.InvokeRequired)
 {
  this.Invoke((MethodInvoker)delegate() { stringbuilderUpdate(); });
 }
 else
 {
  stringbuilderUpdate();
 }
}

を追加してstringbuilderUpdateのかわりに呼び出すようにしたらうまく出来ました。
ありがとうございました
493デフォルトの名無しさん:2008/08/09(土) 13:05:32
WebBrowser(Sys.Win.Forms)で、ホイールクリックによって「新しいウィンドウ(タブ)を開く」を実装したいのですが、ホイールを押してもスクロールカーソルが表示されるだけでリンクが動作しません。
いい方法があればご教授ください。
494デフォルトの名無しさん:2008/08/09(土) 15:06:53
>>493

foreach (HtmlElement link in webBrowser.Document.Links)
{
link.MouseUp += new HtmlElementEventHandler(link_MouseUp);
}

private void link_MouseUp(object sender, HtmlElementEventArgs e)
{
if (e.MouseButtonsPressed == MouseButtons.Middle)
{
// 色々
}
}
495デフォルトの名無しさん:2008/08/09(土) 15:12:14
動的に生成されるアンカー要素にはどう対応する?
496デフォルトの名無しさん:2008/08/09(土) 15:13:46
書式に合った文字列かを判別する方法ってありますか?
設定ファイルなどで
"#####0"
などと定義しておいて、対象の文字列が、6桁の数値になっている。
みたいな感じで、定義したフォーマットにあっているか判別できるといいなぁと。

Formatなどで、数値などを特定の書式に変換はできますが、
逆に書式に合った数値なのかを判別できないものかと。。。
497デフォルトの名無しさん:2008/08/09(土) 15:20:53
正規表現使えば良いんじゃね
498デフォルトの名無しさん:2008/08/09(土) 15:39:22
>>496
普通は特定のフォーマットみたいなのは正規表現を使う
System.Text.RegularExpressions 以下に対象のクラスが
ある

MSDN ならココ参照
http://msdn.microsoft.com/ja-jp/library/hs600312.aspx

ちなみに、6桁の数値(ASCII)ならパターンは @"^[0-9]{6}$"
499デフォルトの名無しさん:2008/08/09(土) 15:52:36
>>494
ありがとうございます。
まさかそんなところにあったとは・・・。
WebBrowserにMouse周りのイベントがないのに納得

しかし、スクロール機能が先に効いてしまい、MouseUpが取れません。
この機能をキャンセルすることってできますか?
500デフォルトの名無しさん:2008/08/09(土) 22:30:58
すみません
度忘れしてしまったので教えてください

VBなどでもループ処理中になるとテキストボックスなどに文字を表示して
も表示がされるように、システム?に一時的に制御を明け渡す命令がありましたよね・・・

あれってなんでしたっけ?orz
501デフォルトの名無しさん:2008/08/09(土) 22:33:28
Application.Doeventsのことをいってるんだろうけど、
スレッドを自由に起動できるドトネトでは基本的にこれは「いらない子」のはずだ。
502500:2008/08/09(土) 22:44:50
たいしたツールではないんですがファイルを読み込んで加工した上で出力を大量に
行うんですが経過が更新されないもんで・・・
503デフォルトの名無しさん:2008/08/09(土) 22:47:51
>>502
だからUIスレッドでデータ処理するなよ
504デフォルトの名無しさん:2008/08/09(土) 22:54:21
早くマルチスレッドのお勉強をしましょうね
505デフォルトの名無しさん:2008/08/09(土) 23:01:02
取りあえずBackgroundWorkerから始めよう
506デフォルトの名無しさん:2008/08/09(土) 23:34:29
うるせーよ
教えろ
507デフォルトの名無しさん:2008/08/09(土) 23:47:46
MSDNれカス
508デフォルトの名無しさん:2008/08/10(日) 00:01:46
>>506
>>501で答えは出ているはずだが。
509500:2008/08/10(日) 00:13:51
>>506
つーか関係ない書き込みすんなw

BackgroundWorkerいいですね〜勉強してみます。
510デフォルトの名無しさん:2008/08/10(日) 00:18:05
俺は普段ThreadStart/Threadで済ます
511デフォルトの名無しさん:2008/08/10(日) 00:29:14
BackgroundWorker と Thread のわかりやすい違いって何?

見当外れの質問ならスマン。
512デフォルトの名無しさん:2008/08/10(日) 00:37:47
UIスレッドにアクセスするのにInvoke使うかイベント使うか
513デフォルトの名無しさん:2008/08/10(日) 01:09:13
>>512
backgroundworkerのrunworkerイベントとかprogresschangedイベントって
必ず呼び出し元のスレッド(UIスレッド)で実行されるようになっているけれど
これってどういう実装したらいいんだろう。

Compact Framewrokにはbackgroundworkerがないもんで、似たものを自分で
作りたいんだけど、普通にイベント実装しただけでは当然のことながらbackgroundworker
側のスレッドで実行されてしまうし。
514デフォルトの名無しさん:2008/08/10(日) 02:03:48
>>513
こっそりコントロール作ってCreateControlしといてそれのBeginInvoke呼び出せ
515デフォルトの名無しさん:2008/08/10(日) 02:26:37
ちょっと確認したらCreateControlもないのか。CreateHandleも。
代わりにHandleを事前に参照しとけばなんとかなるかな。
516デフォルトの名無しさん:2008/08/10(日) 03:48:09
FtpWebRequest に、WebClient の ProgressPercentage みたいな機能ありませんか?
517デフォルトの名無しさん:2008/08/10(日) 04:11:38
FTPにはファイルサイズを数値で取得するような手段が無いからな
518デフォルトの名無しさん:2008/08/10(日) 06:42:50
C#でwinnyつくれる?
519デフォルトの名無しさん:2008/08/10(日) 06:51:47
>>513
ISynchronizeInvokeインターフェイスを使う

if (ISynchronizeInvoke.InvokeRequired)
{
ISynchronizeInvoke.Invoke.BeginInvoke(デリゲート);
}
else
{
(デリゲート).DynamicInvoke();
}

詳しく知りたければSynchronizingObjectプロパティを実装しているクラスをReflectorで調べる
520デフォルトの名無しさん:2008/08/10(日) 06:57:33
>>511
BackgroundWorkerはThreadPoolのスレッドを使い回すので効率的
Threadはスレッドを新規に立ち上げる必要があるので負荷がかかる
521デフォルトの名無しさん:2008/08/10(日) 07:28:08
お客様の中に>>499をご存知の方はおられませんかー?
522デフォルトの名無しさん:2008/08/10(日) 09:52:10
独習C#第2版を読んでC#を学習しています。

私はPCにVisual C# 2005 Express Editionを入れているので、Windowsのコマンドプロンプトで
プログラムをコンパイルするには、

SET Path=%Path%;C:\Windows\Microsoft.NET\Framework\v2.0.50727

というコマンドをコマンドプロンプトを起動するたびに実行しなければなりません。

しかし、以前読んだJavaの入門書では初めにWindowsのユーザー環境変数を設定するように
書いてあり、一度設定するだけで済み、その後のコンパイルが楽チンでした。

そこで、もしかしたらC#でも上記のコマンドを実行する代わりに、新しいユーザー環境変数を以下の
ように設定すれば良いかなと思ったのですが、このような認識で誤りはないでしょうか?

変数名
PATH
変数値
C:\Windows\Microsoft.NET\Framework\v2.0.50727
523デフォルトの名無しさん:2008/08/10(日) 09:55:14

で区切って足していけばOkだよ
524デフォルトの名無しさん:2008/08/10(日) 09:59:39
>>515
>>514

いいアイデアかと思ったけどCFではサポートされてないんですねえ。。。
Controlを継承して、BgWorkerCfを作って 非同期処理からイベント発動
するときに this.Invoke(ProgressChanged, new object[]{this, e})
とかやって、コントロールは非表示にしておけばできないこともないすかね…。

>>519
これも 検討したんですが、compact frameworkではdynamicinvokeがサポート
されていないんですよね…。。。。
525デフォルトの名無しさん:2008/08/10(日) 10:12:01
SDKコマンドプロンプトがその辺の設定を全部やってくれるはず
526デフォルトの名無しさん:2008/08/10(日) 10:40:24
>>523
>>525

回答ありがとうございました。
527デフォルトの名無しさん:2008/08/10(日) 10:53:17
>>524
> いいアイデアかと思ったけどCFではサポートされてないんですねえ。。。
ん? 何が? HandleとBeginInvokeはCompact Frameworkでも使えるはずだけど?
コントロールはハンドルさえ作っとけばFormに追加する必要も無いはずだよ、Compact Framework独自の制限が無い限り
528デフォルトの名無しさん:2008/08/10(日) 11:24:39
何かよくわからないけど、後に役立ちそうなレスは保存そしておこ
529デフォルトの名無しさん:2008/08/10(日) 12:05:50
BackgroundWorker を使ってみた。

・DoWork
ここで色々やる。
Form上のコントロールへのアクセスはできない。

・RunWorkerCompleted
・ProgressChanged
ここでForm上のコントロールに結果を反映させる。
結果はe.Resultまたはe.UserStateで渡される。


何かやって、終わったら(もしくは途中で)結果をobjectとして呼び出し元に反映する。
シンプルで時間がかかる処理には便利。
こんな感じの理解で良いのかな? ツッコミ等あればよろしく
530デフォルトの名無しさん:2008/08/10(日) 13:19:24
すみませんが、どなたか教えてください。

開発環境:VisualC#2008Express

デザイン画面を使っているとInitializeComponent()やLoadイベントのハンドラ等が表示時にコンパイルされますよね?
この時に自分で書いたコードの一部をコンパイルされないようにしたいんです。
(そこを通るとコード外のリソースにアクセスしにいって、デザイン画面がバグるので)

デザイン画面用のコンパイル時のみ#defineされているものとかあるのでしょうか?
それがあれば、#if !とかで制御できると思うのですが…。

よろしくお願いします。
531デフォルトの名無しさん:2008/08/10(日) 13:23:19
if (DesignMode)
コンパイルはされるけど実行されなくなる
532デフォルトの名無しさん:2008/08/10(日) 13:29:36
NUnitのテストケースをステップ実行させたいのですが、
どういったツールを利用すれば可能になるのでしょうか?
533デフォルトの名無しさん:2008/08/10(日) 13:31:03
>>531
ありがとうございます。
期待していた動作が得られました。

プリプロセッサか関数属性かどっちかにあるんじゃないかと思ってたんですが、Componentのプロパティなんですね。
なんとなく意外な感じです。
534デフォルトの名無しさん:2008/08/10(日) 13:33:36
>>532
Debugger.Launch()とか
535デフォルトの名無しさん:2008/08/10(日) 14:30:24
>>534
nunit.exeを、でしょうか。
結構面倒な手順を踏まないといけないんですね...
536デフォルトの名無しさん:2008/08/10(日) 15:36:04
いやデバッグしたいコード中で
うまくいったらラッキー
537デフォルトの名無しさん:2008/08/10(日) 16:52:08
テストドリブンドットネットとかでできなかったっけ?
通常実行かデバッグ実行か選べた気がする
538デフォルトの名無しさん:2008/08/10(日) 18:00:37
CodeDomProviderでC#のコードをコンパイルする時、そのコードの中でSystem以外の名前空間に対してusing使っちゃいけないんでしょうか?
539デフォルトの名無しさん:2008/08/10(日) 18:22:37
別に構わんが、アセンブリへの参照は追加しとけ。
540デフォルトの名無しさん:2008/08/10(日) 18:50:44
>>539
あ、なるほど
ありがとうございました
541デフォルトの名無しさん:2008/08/10(日) 21:00:32
Javaのコンストラクタ内で利用するsuperと同様の機能はC#にありますか?
あるとしたらどのように書けばよいのでしょうか
542デフォルトの名無しさん:2008/08/10(日) 21:06:33

クラス名(int a) : base(a)
{
}
543デフォルトの名無しさん:2008/08/10(日) 21:08:03
ヘルプでコンストラクタ調べれ
544デフォルトの名無しさん:2008/08/10(日) 21:11:09
どうもです
545デフォルトの名無しさん:2008/08/10(日) 22:42:03
>>497,498
ありがとうございます
助かりました^^
546デフォルトの名無しさん:2008/08/10(日) 23:07:44

WebClient uploadClient = null;

private void btnUP_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string filename = openFileDialog1.FileName;
Uri u = new Uri("http://xxxxxxxxx/up/");
if (uploadClient == null)
{
uploadClient = new WebClient();
uploadClient.UploadProgressChanged += new UploadProgressChangedEventHandler(uploadClient_UploadProgressChanged);
uploadClient.UploadFileCompleted += new UploadFileCompletedEventHandler(uploadClient_UploadFileCompleted);
}
uploadClient.UploadFileAsync(u, filename);
}
}

このようなプログラムを実行してもファイルがUPできないんですが、どこがおかしいか教えてもらえないでしょうか
547デフォルトの名無しさん:2008/08/10(日) 23:10:52
TradeDivision 列挙体
メンバ名 内容
Sell 売り
Buy 買い

TradeDivision td;

上記のような列挙体があって、設定されているメンバ名をとりだしたい場合はどうすればいいのでしょうか?



548デフォルトの名無しさん:2008/08/10(日) 23:13:05
>>547
日本語ないしC#でおk
549デフォルトの名無しさん:2008/08/10(日) 23:18:38
よくわからんが、ToString()しとけ
550デフォルトの名無しさん:2008/08/10(日) 23:34:08
>>547
clickのツールのアドインを作っているのかな?
それからメンバ名の取り出しじゃなくて、内容の文字列(売り、買い)を取り出したいのかな?
551デフォルトの名無しさん:2008/08/10(日) 23:45:43
C#の言語での質問というわけではないんですが…。

VisualStudioのソリューションエクスプローラーでフォルダを作って
作成したファイルを分類すると、勝手に名前空間が書き換えられます。

実際にフォルダができる必要もないんですが、こちらはまあいいとしても名前空間の書き換えは困ります。
コードに影響を与えず、上手いことソリューションエクスプローラー上でファイルを分類する方法は無いでしょうか?
552デフォルトの名無しさん:2008/08/10(日) 23:58:42
googleのような電卓(テキストボックスに1+1*8を入力すると9と出力する)を作りたいのですが、
どのように作ればいいのかさっぱりわかりません。

どなたか教えていただけないでしょうか?
553デフォルトの名無しさん:2008/08/11(月) 00:10:34
tp://dobon.net/vb/dotnet/programing/eval.html
554デフォルトの名無しさん:2008/08/11(月) 00:13:09
>>551
別に整理しても自動で名前空間は書き換えられないだろ。
フォルダの方に新規にクラス作成すると確かに名前空間付くけど、
それは作ってから消すか、トップレベルに作ったものをドラッグで移動すればいいんだし。
555デフォルトの名無しさん:2008/08/11(月) 00:37:49
>>554
ちょっと試してみましたが、書き換えられるものと書き換えられないものがありますね。

・〜.xsd以下のDataSet関連派生クラス群は移動すると書き換えられる。

・Formの場合、デザイナ生成コードの箇所のみ名前空間が書き換えられてビルドできなくなる。
(ということがあったと思うんですが、今試したら再現しませんでした。気のせいだったのかな…)

・単なるコードファイルは問題なし。

自動生成したデータセット関連以外なら移動しても大丈夫なのかな。
上も移動した後、消せばいいのかも知れないけどデザイナで編集したときとかが不安。
まあ、とりあえずテストして大丈夫な場合とそうでない場合をもうちょい調べてみます。

ありがとうございます。
556デフォルトの名無しさん:2008/08/11(月) 00:45:55
>>550
おおー そうです。
これだけでclickのツールってよくわかりましたね^^
557デフォルトの名無しさん:2008/08/11(月) 01:04:04
>>556
//列挙体の設定
TradeDivision td = TradeDivision.Buy;
//内容の文字列(売り、買い)の取得
string str = CodeService.GetString(td);

で出来ると思う。
質問内容によっては先物板のclickのスレ等で質問で質問したほうが
いいかもしれないけど過疎っているからなあ・・
558デフォルトの名無しさん:2008/08/11(月) 01:24:16
>>557
ありがとうございます。助かります!
559デフォルトの名無しさん:2008/08/11(月) 12:34:13
数字や文字を文字コード(ASCII)に変換する方法ってありますか?
560デフォルトの名無しさん:2008/08/11(月) 12:40:48
>>559
つ 【System.Text.Encoding】
561デフォルトの名無しさん:2008/08/11(月) 12:49:21
>>556
C#でツール書ける環境提供してるのってクリックだけじゃんw
562デフォルトの名無しさん:2008/08/11(月) 12:52:10
>>560
thx
563デフォルトの名無しさん:2008/08/11(月) 13:50:11
>>527

Controlクラス継承してBackGroundWorkerCf クラスを定義、

呼び出し元で
BackgroundWorker bw = new BackgroundWorker();
IntPtr = bw.Handle;
とハンドル参照してハンドル作成

BackgroundWorkerCfクラスのイベント発動時に
this.Invoke(new Action<ProgressChangedEventArgs>(OnProgressChanged),new object[]{new ProgressChangedEventArgs(progress,null)});
てな具合にしたら、きちんと呼び元のスレッドで実行されました。
564デフォルトの名無しさん:2008/08/11(月) 14:04:06
Control派生しちゃうとフォームに貼り付けられるから好みじゃないな
565デフォルトの名無しさん:2008/08/11(月) 14:05:22
ん? 呼び元のスレッドってそれはつまりUIスレッドに渡せなかったってことか?
566デフォルトの名無しさん:2008/08/11(月) 15:00:51
>>564
こういうのはUIスレッドへの同期専用に軽量のコントロールをシングルトンで
持つのが普通じゃないのかなあ。俺はそうしてるけど。

チームなり自分個人なりのクラスライブラリってあるでしょ?
そういうのの適当なクラスに静的メソッドとしてもっておけば
毎回くだらないことで悩んで時間つぶさないで済む。
567デフォルトの名無しさん:2008/08/11(月) 15:15:59
シングルトンじゃコントロール生成するスレッドの制御が難しくなるから不適当。
568デフォルトの名無しさん:2008/08/11(月) 15:27:59
それはないと思うよ。

UIスレッドに同期する必要があるオブジェクトのインスタンスの生成をUIスレッドで
行う場合はそもそも何も考える必要はないし、そうでない場合も
いろいろ工夫の仕方はある。

一番簡単なのは、
private static control uiSyncObj = new Control();

とでもしておくこと。
そもそもUIスレッドで起動するアプリならこれで何も問題ないはずじゃないの?
569デフォルトの名無しさん:2008/08/11(月) 15:30:37
Controlを同期用に渡してやるのも単純でいいよ。
new BackgroundWorkerCF(textBox1);
570デフォルトの名無しさん:2008/08/11(月) 15:32:45
>>568
普通はありえないけどUIスレッドが複数あった場合はものすっごく混乱する。
571デフォルトの名無しさん:2008/08/11(月) 15:33:50
>>569
俺は568だけど、それは問題がある場合が多い。

だって簡単に言えば、イベントを受信する側のフォームの寿命っていいうのは
しばしばアプリの寿命と違うからね。
572567:2008/08/11(月) 15:42:19
>>568
あー、ちょっと前提がずれてた。
Form1にInvoke用メンバとして持たすなら問題ないね。
BackgroundWorker代替クラスのメンバとして持たす場合を想定してた。
573デフォルトの名無しさん:2008/08/11(月) 15:54:02
後処理のことをいえばVSでフォームにBackgroundWorkerを追加しても
System.ComponentModel.IContainer components
に追加してくれないのは不満だな。
これに追加してくれればスレッドよりも先にフォームが閉じられても対処されるのに。
574デフォルトの名無しさん:2008/08/11(月) 15:59:17
派生させてIContainer引数に取るコンストラクタを自作
実に不毛だな
575デフォルトの名無しさん:2008/08/11(月) 17:08:08
using (WebBrowser b = new WebBrowser())
{

b.DocumentCompleted += delegate(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlDocument doc = b.Document;
Console.WriteLine(doc.Title);
};

b.Navigate("http://www.google.co.jp/");

while (true)
{
Thread.Sleep(100);
}

}

WebBrowserクラスを使ってHtmlDocumentを取得したいのですが、
上のコードがいつまで経っても終わりません
間違っているところとかあるでしょうか……
576デフォルトの名無しさん:2008/08/11(月) 17:09:53
えーと、無限ループで待機してもDocumentCompletedが呼ばれないという意味です
577デフォルトの名無しさん:2008/08/11(月) 17:30:39
そりゃお前、スレッドが占有されてたらDocumentCompleted呼び出される余地はないだろう
578デフォルトの名無しさん:2008/08/11(月) 18:53:36
うぉおおおおおおおおおおおおおおおおおおおおおおお
FormのDisposedはその名に反して終了時に呼び出されん!?

とりあえず
  static void Main()
  {
   Application.EnableVisualStyles();
   Application.SetCompatibleTextRenderingDefault(false);

   Form1 form1 = null;

   AppDomain.CurrentDomain.ProcessExit += (sender, eventargs) => {
    if (null != form1) {
     form1.Dispose();
    }
   };

   ...
  }
みたいにしてるんだけどカコワルイ。 終了処理とかどこに書くん? デストラクタもないしorz
579デフォルトの名無しさん:2008/08/11(月) 18:56:18
終了時ってのがいつのことなのかわからんが呼ばれるんじゃね?
つか普通はClosedあたりに書くんじゃね?
580デフォルトの名無しさん:2008/08/11(月) 18:57:58
>>578
Form.FormClosedとかとかApplication.ApplicationExitとかはだめなの?
581デフォルトの名無しさん:2008/08/11(月) 19:36:08
Mainの最後じゃあかんの?
582デフォルトの名無しさん:2008/08/11(月) 22:13:23
初レスです。
C#(.NET 3.5 & WPF)でP2P分散データベースを構築するアプリケーションを作ろうとしているのですが、データベースとしては何を使うべきでしょうか。
# ローカルデータベースやデータセットなどがあると思いますが、どちらを使えばいいのかイマイチわかっていません。。。
データ量は100万以上を想定しています。
よろしくお願いいたします。
583デフォルトの名無しさん:2008/08/11(月) 22:16:30
>データセット
ありえない
584デフォルトの名無しさん:2008/08/11(月) 22:17:20
それはC#スレよりもDB系のスレで聞く方が。
585デフォルトの名無しさん:2008/08/11(月) 22:32:48
>>583
>>584
早速ありがとうございます!
データセットは大量のデータを扱うには難しいということを事前に聞いていたので、ローカルデータベースの方で検討してみようかと思います。

ちなみに、直接的には関係ないのですが、データセットとローカルデータベースでは、いったい何が違うのでしょうか。
# そもそもなぜ同じような機能を持っているものが複数あるのか疑問なのですが…
586デフォルトの名無しさん:2008/08/11(月) 22:36:22
>>583 はSystem.Data.DataSetのことだと思ってありえないといってるのだと思うよ。
君が言ってるのは普通のOSファイルのことだろ?
データの持ち方によっては単純で有効だよ。
587デフォルトの名無しさん:2008/08/11(月) 22:38:28
>>582
Sqlite
588デフォルトの名無しさん:2008/08/11(月) 22:53:19
db4o
589デフォルトの名無しさん:2008/08/11(月) 22:54:18
SqlServerCE
590582:2008/08/11(月) 22:56:22
>>586
すみません。
そこまで理解できていませんでした。
イメージとしては、頻繁に使うデータ(メモリ)・全データ(ディスク/ファイル)と考えています。
# やはり数万〜数十万になるデータをすべてメモリ中に置くのは無理があると思うので、多少パフォーマンスを犠牲にしても、ファイルとして置くのがいいのかなと考えています。

もちろん、クエリや検索条件などはデータセットなどで持つことを考えています。(XMLとして書き出すこともできますし)
もし他に有効なデータの持ち方などがありましたらご指摘くださると幸いです。
591582:2008/08/11(月) 23:01:12
>>587
>>588
>>589
皆様ありがとうございます!
今まで全然聞いたことがなかったキーワードが次々と…。
早速調べてみようと思います。
592デフォルトの名無しさん:2008/08/11(月) 23:03:11
データセットってOSの普通のファイルをさす用語であったのか…しらんかったよ…
593デフォルトの名無しさん:2008/08/12(火) 13:40:10
ディスクをDASDと言う世界での話しか?
594デフォルトの名無しさん:2008/08/12(火) 13:47:22
だすどキター
595デフォルトの名無しさん:2008/08/12(火) 14:46:46
byte型の配列を用意して、もし、配列がnullだったら1を入れるとしたいのですが、nullだとエラーがでます
byteの場合は何で比較すればいいでしょうか?
596デフォルトの名無しさん:2008/08/12(火) 14:48:01
いみがわかりまへん
597デフォルトの名無しさん:2008/08/12(火) 14:50:30
byte[] i;
i = System.Text.Encoding.ASCII.GetBytes(trackBar3.Value.ToString());
if (!i[0])
i[0] = 48;

これでエラーがでるのです
598デフォルトの名無しさん:2008/08/12(火) 14:53:08
( ゚д゚)ポカーン

(゚д゚ )

( ゚д゚ )
599デフォルトの名無しさん:2008/08/12(火) 14:56:03
こっち見んなw
600デフォルトの名無しさん:2008/08/12(火) 15:04:14
( /д゚ )
601デフォルトの名無しさん:2008/08/12(火) 15:05:20
左 1.5
602デフォルトの名無しさん:2008/08/12(火) 15:12:02
>>597
頼むから教えてくれ
603デフォルトの名無しさん:2008/08/12(火) 15:12:50
>>602
エラーメッセージは?
604デフォルトの名無しさん:2008/08/12(火) 15:14:40
エラー CS0023: 演算子 '!' を 'byte' 型のオペランドに適用することはできません。


if (i[0 == null])
i[0] = 48;

にしたら
警告 CS0472: 型 'int' の値が型 'int?' の 'null' に等しくなることはないので、式の結果は常に 'false' になります。

になります
605デフォルトの名無しさん:2008/08/12(火) 15:16:24
つーかなんで配列の中で0==NULLとかやってるの?
606デフォルトの名無しさん:2008/08/12(火) 15:17:44
if (i[0 == null]) ではなくif (i[0] == null)でした
書き込みミスです
607デフォルトの名無しさん:2008/08/12(火) 15:18:56
素直に0x00で比較すればいいんじゃねーの?
NULLは別の意味じゃねーの?
608デフォルトの名無しさん:2008/08/12(火) 15:23:01
なりませんでした・・・・

スライダでデータを取得したものを文字コードにして、i[0]とi[1]に格納するのですが、
スライダの値がひとけたになるとi[0]に値がないみたいでエラーが起きてしまいます。
無理なのでしょうか?
609デフォルトの名無しさん:2008/08/12(火) 15:27:03
>>597

byte[] i;
i = new int[0];
if (!i[0])
i[0] = 48;

これでエラーがでるのです
610デフォルトの名無しさん:2008/08/12(火) 15:28:45
スライダーの値(int?)を何でわざわざアスキーコードで取り出すんだろ?
611デフォルトの名無しさん:2008/08/12(火) 15:28:50
言ってることが根底からわけが分からない
612デフォルトの名無しさん:2008/08/12(火) 15:41:35
>>597

byteは値型なのでnullは代入できない。
i[0]は決してnullになることはない。

エラー云々の前に 整数型を文字列型にしてさらにそれをASCIIバイト配列に
するなんていう無意味かつ変態的な設計を根本から見直せ。



613デフォルトの名無しさん:2008/08/12(火) 15:44:32
C#ではnullは「変数にインスタンスが入ってない」という意味
byteは数値なのでnullにならない
よってbyteとnullは比較できない

ifの中身は数値ではダメ
if(i[0]) とか if(!i[0]) とかは不正
if(i[0] == 0)とかif(i[0] != 0)とかしないといけない

!はbool型の値をひっくりかえすもので数値に対しては適用できない
614デフォルトの名無しさん:2008/08/12(火) 15:44:58
そのトラックバーだっけ?
を文字として取り出して何に使うのか書いたら?

なんか目的を実現するための方法が間違ってる気がする
615デフォルトの名無しさん:2008/08/12(火) 15:47:54
Cでトリッキーなことやってるのをそのまま移植しようとしてるとか?
616デフォルトの名無しさん:2008/08/12(火) 15:49:06
何がしたいのか分からないので正解を書きようがない
617デフォルトの名無しさん:2008/08/12(火) 15:51:58
だなあ。
C#なりの正解を教えることもできん。

トラックバーの数字を文字として扱いたいならそのまんま
.ToString()
つけておけばいいし書式したければ
ToString("00")
とかすればいいし。

bytでほしけりゃ
Convert.ToByteとかあるしなあ。
618デフォルトの名無しさん:2008/08/12(火) 16:02:21
nullとの比較というのが本当は何がしたかったのかも分からない
619デフォルトの名無しさん:2008/08/12(火) 16:03:53
というか、c#わかってないまま無理してこのまま進めるより

CもしくはC++でこういうことをやってたのをc#で実現するにはどうすればいいですか?

と聞いてくれたほうがなんぼかいい
620デフォルトの名無しさん:2008/08/12(火) 16:13:36
>>617
できました。ありがとうございました

>>612
>>2のサイトにのってサイトでサンプルでのってたのが、byteでした

>>他
すいませんでした
621デフォルトの名無しさん:2008/08/12(火) 16:17:26
多次元配列の定義と同時に値を代入する方法について質問です。
以下だとエラーが出るのですが、正しい書き方を教えてください

const int[,,] sz =new int[5,4,8] {
0,0,0,1,-1,0,-1,1,
0,0,0,1,-1,0,-1,1,
0,0,0,1,-1,0,-1,1,
0,0,0,1,-1,0,-1,1,

0,0,0,-1,0,1,-1,0,
0,0,-1,0,1,0,0,1,
0,0,0,-1,0,1,1,0,
0,0,-1,0,1,0,0,-1,

0,0,0,1,1,0,1,-1,
0,0,0,1,1,0,1,-1,
0,0,1,0,0,-1,-1,-1,
0,0,0,-1,-1,0,-1,1,

0,0,-1,1,0,1,1,0,
0,0,1,1,1,0,0,-1,
0,0,1,-1,0,-1,-1,0,
0,0,-1,-1,-1,0,0,1,

0,0,-1,0,1,0,2,0,
0,0,0,1,0,-1,0,-2,
0,0,1,0,-1,0,-2,0,
0,0,0,-1,0,1,0,2,
};
622デフォルトの名無しさん:2008/08/12(火) 16:19:10
{
{0,0,0,1,-1,0,-1,1}
{0,0,0,1,-1,0,-1,1}
{0,0,0,1,-1,0,-1,1}
{0,0,0,1,-1,0,-1,1}
},

これが5こ?
623デフォルトの名無しさん:2008/08/12(火) 16:19:51
{
{0,0,0,1,-1,0,-1,1},
{0,0,0,1,-1,0,-1,1},
{0,0,0,1,-1,0,-1,1},
{0,0,0,1,-1,0,-1,1},
},

こうだ

624デフォルトの名無しさん:2008/08/12(火) 16:31:29
エラーが出るんならそれを書け
625621:2008/08/12(火) 16:34:02
>>623-624
ありがとうございます。
constを外したらとりあえずできました。
このままでもプログラム動作的には問題ないですが、
変更するものではないので、できればconstにしたいです。

constにすると、以下のようなエラーです。>>624

エラー 1 'Tetris.BZ.sz' の型は 'int[*,*,*]' です。文字列以外の参照型のconst は null と共にのみ初期化できます。
626デフォルトの名無しさん:2008/08/12(火) 16:51:20
new int[0] の配列サイズは0だぜ
627デフォルトの名無しさん:2008/08/12(火) 16:52:22
>>625
static readonlyにしれ。
constは円周率とか自然対数とか絶対不変の定数に使うもので、
変更するものではないからといって使うものではない。
ちょっと前にふらっとか相談室でそんな議論がでていたな。
628デフォルトの名無しさん:2008/08/12(火) 16:56:25
メッセージ通り、参照型はconstにできない。
多次元だとReadOnlyCollectionも無理だな。
どうしてもってんなら適当なインデクサを持たせたラップクラス作ることになるな。
629デフォルトの名無しさん:2008/08/12(火) 17:03:02
constに指定したものは、コンパイル時にリテラルに置き換えられる。
→リテラルといえるようなもの以外は指定できない。
だったかな。

クラス変数(定数?)に指定するなら>>627の通り。
ブロック内で使うのは良い選択だと思うのだがどうだろう?
630デフォルトの名無しさん:2008/08/12(火) 18:09:22
MSDNライブラリにはControl.BeginInvokeはあってもDelegate.BeginInvokeはありませんよね。
なのにどちらも使う事が出来たりよくわかりません。
どうしてDelegate.BeginInvokeはインテリセンスも効かないのでしょうか?
631デフォルトの名無しさん:2008/08/12(火) 18:13:05
Delegate/MulticastDelegateクラスにはInvoke/BeginInvokeは存在してない
コンパイラがデリゲート型を作る際MulticastDelegateから派生させてそれらを用意する
632デフォルトの名無しさん:2008/08/12(火) 18:17:37
>>630
デリゲートの Invoke, BeginInvoke, EndInvoke は C# コンパイラが生成してるもの。
System.Delegate クラスのメンバじゃない。

Action a1; なら a1.BeginInvoke(callback, obj)、
Action<T> a2; なら a2.BeginInvoke(arg1, callback, obj)
みたいな、デリゲートの方に応じた引数を取れるのは
デリゲートの型を見てコンパイラが自動生成してるメソッドだから。
こういう仕組みはクラスの継承とかでは無理。
633デフォルトの名無しさん:2008/08/12(火) 18:30:51
なるほど、コンパイラが自動でやっていたんですか
よくわかりました、ありがとう
634デフォルトの名無しさん:2008/08/12(火) 19:24:06
ちなみに、自動生成されるよってことだけならここで軽く触れられている。
http://msdn.microsoft.com/ja-jp/library/2e08f6yc.aspx
635デフォルトの名無しさん:2008/08/13(水) 11:58:38
すみません
特定のクラスからのみアクセス可能な修飾子などは作成可能でしょうか?
もしくは、同一パッケージ内からのみアクセス可能、同一ファイルからのみアクセス可能などの設定は可能でしょうか?

とあるクラスAを作成し、Aのあるメソッドの戻り値のクラスとしてBを考えています
BはA以外からインスタンス化されることはないので、Aからのみ作成可能にしたいです(そうでなければ、なるべくBを生成可能な範囲を小さくしたいです)
なにか、上手い方法などありましたら、よろしくお願いいたします
636デフォルトの名無しさん:2008/08/13(水) 12:05:01
>>635
特定のクラスのみ → 無理
同一パッケージ、というか同一名前空間から → internal
同一ファイル → それもない

A からのみインスタンス化されるクラス B

public なインターフェースを継承した、A 内 private クラスを作れ
637デフォルトの名無しさん:2008/08/13(水) 12:10:02
string型をchar型に変換したいのですが
どのように記述すればよいでしょうか?
638デフォルトの名無しさん:2008/08/13(水) 12:10:35
>同一パッケージ、というか同一名前空間から → internal 

internalはアセンブリスコープ。DLLやEXEの範囲内。

ちなみにJ#でpackageスコープで定義したクラスはC#からpublicに見える。今日にも使える無駄知識^^;
639デフォルトの名無しさん:2008/08/13(水) 12:13:14
>>637
char [] hoge = "HOGE".ToCharArray()
640デフォルトの名無しさん:2008/08/13(水) 12:45:10
コンストラクタをprivateにすりゃいい
641デフォルトの名無しさん:2008/08/13(水) 13:13:57
レスありがとうございます
もともとクラスをpublicにして、コンストラクタを特定のクラスからのみ利用可能にしようと考えていました

もうちょっと、勉強してみます
642デフォルトの名無しさん:2008/08/13(水) 13:45:53
すみません、開発でWindowsFormで.NET 3.5を使用したら、
ユーザ環境でも.NET3.5が必要なのは当然ですが、

ASP.NETで3.5を使用した場合には、
IISの入っているサーバに3.5を入れるだけで良いのでしょうか?
それとも、ブラウザの入っている各クライアントにも3.5が必要になるのでしょうか?

そんなことになったら、MacやLinuxで見えなくなりますよね。
いや、もしかして、ASP.NETってそういうものなのでしょうか?
643デフォルトの名無しさん:2008/08/13(水) 13:48:36
クライアントにはHTML返すだけ、と言えば分かるか?
644デフォルトの名無しさん:2008/08/13(水) 13:53:03
>>643
どうも有り難うございます。
でも、便利なコントロールあるじゃないですか。
あれも、コントロールはクライアントローカルのものが使用される訳ではなく、
全てIISサーバからJSとして送られているということで良いのでしょうか?
645デフォルトの名無しさん:2008/08/13(水) 13:56:08
MSDNライブラリの左下フレームはTreeViewだ
一度ソース見てみるといいよ
646デフォルトの名無しさん:2008/08/13(水) 13:56:42
あ、ソースってHTMLページのな
647デフォルトの名無しさん:2008/08/13(水) 14:00:53
どうも有り難うございます。
なるほど、壮大な無駄な気がしましたが、
良く考えると、キャッシュされるから問題ないのかも〜。

ありがとうございました。
648デフォルトの名無しさん:2008/08/13(水) 14:12:34
いつも思うけどMSDNのTreeViewは、やりすぎ
無駄に重いし却って使いづらいよね
649デフォルトの名無しさん:2008/08/13(水) 14:24:08
元の順序が保存されるSortメソッドってありますか
650デフォルトの名無しさん:2008/08/13(水) 14:29:45
元の順序を第二ソートキーにすれ
651デフォルトの名無しさん:2008/08/13(水) 14:55:01
>>649
LINQ to Objectのソートはstable sort。
ただしLINQ to XXX全般では保証されないので注意とのこと。
ttp://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1420485&SiteID=1
652デフォルトの名無しさん:2008/08/13(水) 16:35:51
>>642
Windows.Formsでターゲットを.NET 3.5にしてても、
実際に3.5や3.0の機能を使わなければ2.0だけで動くよ
653デフォルトの名無しさん:2008/08/13(水) 17:02:44
質問です。サーバーのプログラムを作っていて、起動時にウィンドウを表示せずに、タスクトレイに常駐させたいと思っています。

private void Form1_Load(object sender, EventArgs e)
{
restartServer();
this.ShowInTaskbar = false;
}
とすると、ウィンドウは表示されませんが、タスクトレイにもアイコンはなく、タスクマネージャで見るとイメージ名はありますが、クライアントからアクセスしても反応がありません。タスクトレイにアイコンがないので終了もできません。

private void Form1_Load(object sender, EventArgs e)
{
restartServer();
this.WindowState = FormWindowState.Minimized ;
}
とすると、起動時にウィンドウは開かないのですが、タイトルバーだけのウィンドウがスタートボタンの上に出ています。

自動生成したProgram.csで、
Application.Run(new Form1());
を、
Application.Run();
にもしてみましたが、これでも
this.ShowInTaskbar = false;
の場合と同じ症状です。
アドバイスいただけるとうれしいです。
654デフォルトの名無しさん:2008/08/13(水) 17:11:30
restartServer()はどっから持ってきたの?
前提がわからないので、適当に書くけど、
通常、タスクトレイのアイコンはウィンドウとつながってるイメージになるので、
普通にウィンドウを作るんじゃないかな。
ウィンドウ出したくなければ非表示にすればいい。

サーバーというのはサービスにするのとは別の話?
655デフォルトの名無しさん:2008/08/13(水) 17:13:39
>>650,651
ありがとうございます
656デフォルトの名無しさん:2008/08/13(水) 17:20:15
>>653
肝心のタスクトレイに表示するブツはどうなってんだ
657デフォルトの名無しさん:2008/08/13(水) 17:26:52
Notifyiconはどこにいるの?
658デフォルトの名無しさん:2008/08/13(水) 17:31:33
C++でいう#define 的なものは使えますか?
複数のクラスを超えて有効にしたい固定数値などあるのですが。
659デフォルトの名無しさん:2008/08/13(水) 17:32:54
固定数値なら定数ならconstそれ以外ならstatic readonly使いなさいな
660デフォルトの名無しさん:2008/08/13(水) 17:42:36
早速コメント感謝。
>654
restartServer()ですが、起動時にサーバーをリスタートしています。初期化する目的と思います。

サービスにするのとは別の話です。
これについては特に今回の処理とは関係ないかと。

>656
ブツ?
は、notifyIconは、デザイン画面では下のほうにあります。

Form1.csのプログラム上では、次のようになってます。

private void notifyIcon_Click(object sender, EventArgs e)
{
this.Visible = true;
if (this.WindowState == FormWindowState.Minimized)
{
this.WindowState = FormWindowState.Normal;
}
this.Activate();
}
661デフォルトの名無しさん:2008/08/13(水) 17:58:16
>this.ShowInTaskbar = false;
のままで、 notifyIcon1.Visible = true はできるだろ?
そもそもプロパティでtrueにしとけばいい話ではあるが。
662デフォルトの名無しさん:2008/08/13(水) 18:15:18
>661
できます。プロパティでtrueになってます。

private void Form1_Load(object sender, EventArgs e)
{
this.ShowInTaskbar = false;
}

private void notifyIcon_Click(object sender, EventArgs e)
{
this.Visible = true;
if (this.WindowState == FormWindowState.Minimized)
{
this.WindowState = FormWindowState.Normal;
}
this.Activate();
}

としました。これだと起動時にウィンドウが開いてしまいます。
ウィンドウを開かずにタスクトレイに入れるにはどうしたらよいでしょう?
663デフォルトの名無しさん:2008/08/13(水) 18:19:23
通知用にFormを使わない手もあるけど、
使うならShowInTaskbar をfalseでminimaizeで起動すれば
ウィンドウ出ないはずだけどな。プロパティで全部設定してみたらどうなる?
664デフォルトの名無しさん:2008/08/13(水) 18:28:39
おつきあいいただきありがとうございます。
private void Form1_Load(object sender, EventArgs e)
{
this.ShowInTaskbar = false;
this.WindowState = FormWindowState.Minimized ;
}
としたところ、
ウィンドウ-開かない
タスクバー-表示
タスクトレイ-表示
となりました。
GUIのForm1のプロパティでも、ShowInTaskbarの値はfalseです。

Taskbar=falseなのに、タスクバーに表示されている理由がわからん…。
665デフォルトの名無しさん:2008/08/13(水) 18:32:37
どっか別の場所で表示させてるんじゃないのか?
666デフォルトの名無しさん:2008/08/13(水) 18:41:34
なるほど。

private void Form1_VisibleChanged(object sender, EventArgs e)
{
this.ShowInTaskbar = this.Visible;
}
というところがあったので、ここをコメントアウトしました。
すると、

private void Form1_Load(object sender, EventArgs e)
{
this.ShowInTaskbar = false;
this.WindowState = FormWindowState.Minimized ;
}

private void Form1_VisibleChanged(object sender, EventArgs e)
{
//this.ShowInTaskbar = this.Visible;
}

すると、最初に書いたとおりで、タスクバーには表示しなくなりましたが、タイトルバーだけのウィンドウが表示されるようになり、終了できなくなります。
667デフォルトの名無しさん:2008/08/13(水) 21:38:49
今動かしているプログラムではなく、新規に
プロジェクト作って試してみては如何か。
あなたのソース全体は誰も分からない故。
668デフォルトの名無しさん:2008/08/13(水) 21:58:53
新規にWinFormのプロジェクト作る
NotifyIconはっつけて表示されるようにプロパティ設定
そのMouseClickイベントでthis.Show()するようにする
Mainで
Form1 form1 = new Form1();
Application.Run();
GC.KeepAlive(form1);

最低限でこんぐらいだっけ?
669デフォルトの名無しさん:2008/08/13(水) 22:04:16
>>668
Application.Run(form1);じゃね?
670デフォルトの名無しさん:2008/08/13(水) 22:27:41
>>669
それじゃform1が表示されちゃう
671デフォルトの名無しさん:2008/08/13(水) 22:41:54
すまん脊髄反射でボケかましちまった
672デフォルトの名無しさん:2008/08/13(水) 23:11:40
長いがフルでアップ。ダブルクリックで終了だ。iconはてけと〜に用意してくれ。
using System;
using System.Drawing;
using System.Windows.Forms;
class HideForm : Form {
  public HideForm() { 
    ShowInTaskbar = false;
    WindowState = FormWindowState.Minimized;
    FormBorderStyle = FormBorderStyle.None;
    Size = new Size(0, 0);
    notifyIcon = new NotifyIcon();
    notifyIcon.Icon = new Icon("notify.ico");
    notifyIcon.Visible = true;
    notifyIcon.DoubleClick += (e, args) => Close();
  }
  protected override void Dispose(bool disposing) {
    if (disposing) notifyIcon.Dispose();
    base.Dispose(disposing);
  }
  NotifyIcon notifyIcon;
}
class Startup {
 static void Main() { Application.Run(new HideForm()); }
}
673デフォルトの名無しさん:2008/08/14(木) 12:29:19
>>667-672
みなさまアドバイス感謝です。じっくり見直してみます。
674デフォルトの名無しさん:2008/08/14(木) 17:35:00
基本的な質問かも知れませんが、質問させてください
ソリューションAの中でプロジェクトA-1とプロジェクトA-2を作っています
プロジェクトA-1の内部は名前空間a.A1以下にしています
プロジェクトA-2の内部は名前空間a.A2以下にしています
プロジェクトA-1でプロジェクトA-2のクラスを使いたい為に、プロジェクトA-1のソースコードで
using a.A2;
と記述していますが、
「型または名前空間名A2はaに存在しません。アセンブリ参照が不足しています。」
とか言われて上手くいきません
VC#2008でプロジェクトA-1を右クリックして、プロジェクトの依存関係でA-2にチェックを入れたりしましたが駄目でした
アドバイスお願いいたします

675デフォルトの名無しさん:2008/08/14(木) 17:39:20
A-1でA-2をプロジェクト参照すれ
676デフォルトの名無しさん:2008/08/14(木) 17:47:19
>>674
プロジェクトの依存関係はコンパイルする順番を制御するだけだからこの場合は関係ないよ
677デフォルトの名無しさん:2008/08/14(木) 17:48:21
>>675 の言うように、参照の追加で。
依存関係は、更新したときに相方を先にビルドしなおすことが必要なときに設定。
678デフォルトの名無しさん:2008/08/14(木) 18:32:20
というか、参照設定をすれば、依存関係も自動的に設定される。
679デフォルトの名無しさん:2008/08/14(木) 19:10:40
674です
レスありがとうございます
参照も確認していました
A-1でA-2のプロジェクトを参照していました

原因はわかりませんが、その後再起動したところ、直っていました
ありがとうございました
680デフォルトの名無しさん:2008/08/14(木) 19:28:19
このあいだ、検索ソフトで引数を取って、引数をテキストボックスにいれ、検索ボタンを押す、という処理を教えていただいたものです。
その節はたいへんありがとうございました。
さて、今回ですが、起動時に引数を取ることはできるのですが、さらに、そのうえで、起動後にも(1)コマンドラインから(2)TCP/IP経由で他のマシンから引数を取得して検索を開始するにはどうしたらよいでしょう?
アドバイスお願いします。

ちなみに、起動時に引数を取る処理は、
static void Main(string[] args)
としたうえで、

string[] args = Environment.GetCommandLineArgs();
if (args.Length != 1)
{
findstring.Text = string.Join(", ", args, 1, args.Length - 1);
startbutton_Click(this, EventArgs.Empty);//〔検索〕ボタンをクリックして検索実行。
}
と処理しています。

681デフォルトの名無しさん:2008/08/15(金) 00:29:20
ToolStripMenuItemの背景色を取得するにはどうしたら良いのでしょうか。
SystemColorsからは取得できなさそうな雰囲気なのですが、、、
682デフォルトの名無しさん:2008/08/15(金) 00:59:34
無線LANからネットワークにつながっているのかの確認方法
そのときのESSIDの取得方法
が分かりません

ヒントでも良いので、教えて下さい
683デフォルトの名無しさん:2008/08/15(金) 01:43:14
賢者様にお尋ね申す。
文字列に変換する方法として以下の方法は適切でしょうか?イリーガルでしょうか?

System.Diagnostics.FileVersionInfo ver = System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);
MessageBox.Show(this, "" + ver, "バージョン情報", MessageBoxButtons.OK, MessageBoxIcon.Information);
684デフォルトの名無しさん:2008/08/15(金) 01:59:18
>>682
ManagementClass mc = new ManagementClass(@"root\WMI", "MSNdis_80211_BaseServiceSetIdentifier", new ObjectGetOptions());
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
byte[] temp = (byte[])mo["Ndis80211MacAddress"];
String[] token = new String;
String BSSID = null;
for (int i = 0; i < 6; i++)
{
token = Convert.ToString(temp, 16);
token = token.PadLeft(2, '0');
BSSID = BSSID + token;
}
BSSID = BSSID.ToUpper();
Console.WriteLine("BSSID :" + BSSID);
}
}
685デフォルトの名無しさん:2008/08/15(金) 02:24:18
>>683
ver.ToString()

String.Concatは暗黙的にToStringを呼んで文字列にしてから連結してる。
686デフォルトの名無しさん:2008/08/15(金) 02:59:21
>>685
ありがとうございます。
明示的にToString()した方がスマートですね。
687デフォルトの名無しさん:2008/08/15(金) 03:47:42
>>685
それそこまで言うほど重要じゃないから

重要なのは、値型をobjectで渡さないことと、引数が配列になってしまうのを防ぐこと

値型をToString()していないと、ボックス化のコストが余計にかかる

引数を配列で渡すはめになると、配列を生成する分、メモリと時間のコストがかかる
public static string Concat(object[] args)
public static string Concat(string[] values)

文字を連結するときはできるだけ以下の引数と一致するようにすることが大事
public static string Concat(object arg0)
public static string Concat(object arg0, object arg1)
public static string Concat(object arg0, object arg1, object arg2)
public static string Concat(object arg0, object arg1, object arg2, object arg3)
public static string Concat(string str0, string str1)
public static string Concat(string str0, string str1, string str2)
public static string Concat(string str0, string str1, string str2, string str3)
688デフォルトの名無しさん:2008/08/15(金) 04:05:47
どうしてC#はメソッド名の初めは大文字からなんでしょうか。ずいぶんなれてきたんですけど・・
メリットを紹介しているサイトとかないでしょうか?
689デフォルトの名無しさん:2008/08/15(金) 04:07:32
>>688
設計した人の好み?
自前クラスだと自分で決められなかったっけ?
690デフォルトの名無しさん:2008/08/15(金) 04:16:55
大文字かどうかよりも、固定されていることが大事なんだと思う
691デフォルトの名無しさん:2008/08/15(金) 04:21:06
http://msdn.microsoft.com/ja-jp/library/cc433282(VS.71).aspx
最近の言語で、パブリックメソッドの先頭を大文字にしないのを
慣習としてるのは、むしろ稀なんじゃないか。
692デフォルトの名無しさん:2008/08/15(金) 04:27:07
最近の〜がどの程度だか分からないが、Javaって小文字だったよね
693デフォルトの名無しさん:2008/08/15(金) 04:29:20
いやだから言語設計した人の好みだって
694デフォルトの名無しさん:2008/08/15(金) 04:34:32
>>691
「最近の言語」ってたとえば何を念頭においてるんだ。
.NET Fx上で動く言語を除いたらそんなにたくさん思い浮かばんぞ。
695デフォルトの名無しさん:2008/08/15(金) 05:37:21
>>691
それ、ソース元がmsなんだけど…もしかして信者?
696デフォルトの名無しさん:2008/08/15(金) 05:39:03
>>690
メソッドはメモリ上では固定の場所に格納されるんですけど、何が固定されてるんですか?
697デフォルトの名無しさん:2008/08/15(金) 05:50:55
統一ってことだろjk
698デフォルトの名無しさん:2008/08/15(金) 08:25:02
統一するなら、ハンガリアン表記もあるのとMSらしいと思いませんか?
699デフォルトの名無しさん:2008/08/15(金) 08:27:21
まだやってたのか

所詮はコンパイルまで必要な名称なだけでコンパイルしちゃえば大文字だろうが小文字だろうがどうでもいい。
昔から変数の名前だってそうだろ?

ルールというか慣習なんかもあってメソッドの頭を大文字にするならそれにあわせればいい。

細かいことにこだわってて仕事になるのか?
こだわるならバグが入らないようなコーディングや、テストとかにこだわれ
700デフォルトの名無しさん:2008/08/15(金) 09:01:57
変数名はどうでもいいらしいけど、動的呼び出しとかフィールドアクセスのときはどうするの?
701デフォルトの名無しさん:2008/08/15(金) 09:41:48
>>699
え、だからそういう流れになって来たのをお前がまた復唱しただけだぞそれ
702デフォルトの名無しさん:2008/08/15(金) 10:06:12
マルチプロセスをマルチスレッドみたいに簡単に扱えるクラスって無いかな?
703デフォルトの名無しさん:2008/08/15(金) 10:12:34
ちょっと上でそれっぽいこと話してたような。
メインスレッドで負荷のかかることスンナとか言われてたな
704デフォルトの名無しさん:2008/08/15(金) 11:21:27
>>699
細かい事(たかた2chの1スレッドで話題にされていること)にこだわってるのは
君自身じゃないの?

俺の意見を言わせてもらえば、答えは案外簡単で、
Camel形式より人にとって自然だからでしょ。

別の言い方を比喩的に言えば、Camel形式の方が「情報量が高い」わけで
それをメソッドみたいな「ありがちな」ものに割り当てるのは合理的じゃないからだ。

>>699的にコンパイラの立場にたったものの言い方はあまり意味はない。
だってコード書くのは人間だからな。
705デフォルトの名無しさん:2008/08/15(金) 11:32:30
>>700
CLRにはVBやPascalのような大文字小文字を区別しない処理系向けに、
リフレクションに大文字小文字を区別しないオプションが存在している。
706デフォルトの名無しさん:2008/08/15(金) 11:36:02
MSはWindows APIのときから大文字Camelだったから、
その流れを汲んだんだと俺は思っている。
707デフォルトの名無しさん:2008/08/15(金) 12:09:27
タバコの話をしてるの?
708デフォルトの名無しさん:2008/08/15(金) 12:10:24
おじさんたちw
709デフォルトの名無しさん:2008/08/15(金) 12:33:24
どうでもいいことにこだわる
それがかっこいい
710デフォルトの名無しさん:2008/08/15(金) 12:37:28
>>684
ありがとうございました。それでやってみます。
711デフォルトの名無しさん:2008/08/15(金) 12:39:21
>>703
WebBrowserを使って自動で数ページ移動するのに時間がかかる場合も
重い処理に入るんですかね
712デフォルトの名無しさん:2008/08/15(金) 14:52:04
うわぁぁぁあ
SP1にしたらコンパイル通らねええ

勝手に仕様変えるのおかしいだろ、常識的に考えて
713デフォルトの名無しさん:2008/08/15(金) 14:58:39
まさにMSの陰謀というか哲学でしょ
714デフォルトの名無しさん:2008/08/15(金) 15:28:27
コンパイル通らなくなるような変更何かあったっけ?
715デフォルトの名無しさん:2008/08/15(金) 15:40:43
2008 → 2008 SP1 では C# に変更ないはずだが。
716デフォルトの名無しさん:2008/08/15(金) 15:46:02
常識的に考えると >>712 の言っていることの方が変に聞こえるんだよな
717デフォルトの名無しさん:2008/08/15(金) 15:54:14
事情により大量のWebアクセスをするプログラムをC#でつくったのですが
プライオリティを下げてもFormの描画も止まり、他のプログラムもCPUをもって
かれてしまいます。

Webアクセスを別スレッドにして、プライオリティを下げれば解決できるのでしょうか?
C#でのやり方もよく分からないので、ご教授お願いします。
718デフォルトの名無しさん:2008/08/15(金) 15:59:01
>>500-が参考になるかも
719デフォルトの名無しさん:2008/08/15(金) 16:00:54
>>714 >>717
プロジェクトの設定でProperties.Settings.Defaultの設定をする部分。
ここで以前はソースコード中のenumの値が設定できたと思うんだけど、
アセンブリ参照しないとユーザー定義の型が設定できない。

前は出来たと思う、って言うかそのままだとコンパイル通らない
720デフォルトの名無しさん:2008/08/15(金) 16:01:34
>>717
プライオリティ下げてもメインスレッドのループ部分でApplication.Doeventsを発行しないまま
処理してるとFormの描画とかは行われないですよ。

で、Formとは別のスレッドでループ部分を処理させて、Form部分はそれの監視と状況報告として
再描画などを行う感じで分けるか面倒ならループの中にApplication.Doeventsをいれるか。
721717:2008/08/15(金) 16:13:33
みなさん、ありがとうございます。
とりあえずDoeventsやってみます。
あと、実はプロセスの優先度をC#だけでやる方法も分かってなかったりします。
API使って…もっとスマートな方法あると思うのですが、いろいろ調べでも分かりませんでした。

たびたびすいませんが、ヒントを教えてもらえないでしょうか?
722デフォルトの名無しさん:2008/08/15(金) 16:16:47
UIスレッドでデータ処理をするなよ。
通信なんてもってのほか。
723717:2008/08/15(金) 16:27:56
僕もそう思います。
最初はそんなつもりじゃなかったんだけど、初めてのC#で
ユーザーからの要望が「通信処理入れてくれ」ってので徐々に
肥大化して参ってます。

そのうち1からC++かC#で書き直します。
724デフォルトの名無しさん:2008/08/15(金) 16:29:03
>>723
いやだから>>500からその手の説明もしてくれてるから。
目を通してみるといいよ。
725500:2008/08/15(金) 16:30:38
ツールの中にBackgroundWorkerってあるからこれを使えばUIスレッドと分けれるんで。
ググってみるとサンプルもでてくるよ。
ちなみに>>500だからw俺w
726デフォルトの名無しさん:2008/08/15(金) 16:35:18
>>721

スレッドの優先度いじくって何とか仕様とするのをやめれ。
無駄だから。

UIを固まらせたくないなら、webclientのDownloadAsync系のメソッド使って
非同期で通信してProgressChangedイベントでUIスレッドに通知し、
適宜Control.Refresh()なりを呼ぶのが一番単純だと思う。
727717:2008/08/15(金) 16:35:23
ありがとうございます。試してみます。
しかし、このスレ凄い親切ですね。
728デフォルトの名無しさん:2008/08/15(金) 16:54:41
自分からテスト専門です、って宣言してる派遣テスターって何なの?

将来プログラマとかSEになりたい、とかならわかるけど。
向上心ないよね、頑固だし。
そういう派遣テスターって、仕様書は読めない、
テスト仕様書も作れない、テストプログラムも作れない
やれることは「テキトーにプログラムを触る」ことだけ。

俺は派遣プだけどさ、こういう派遣テスターがいると
派遣全体がバカにされるんだよ。
テスト専門派遣なんて氏んで欲しいよ、まったく。

今日も正社員の人が派遣テスターに仕様書を読んで
テスト仕様書を作ってください、って説教してたよ。
その派遣は頑固に「何故、仕様書が必要なんですか?」って
反論してたから、きっとテスト専門派遣テスターだな。
仕様書も読まず、テスト仕様書も作らず、ただテキトーに
プログラム触るだけで給料もらおうなんて頭おかしいんじゃねーの?

あ〜あ、あの派遣テスターが3ヵ月後に切られるまで、
仕様書も読まねーでテキトーにテストしたバグ票がまわってくんのかよ。
そんな糞なもん、読んで処理する派遣プの身にもなってくれよ。
うわ〜、しかもそいつが切られる3ヵ月以内に中間納品あるじゃねーか!
テスト仕様書もなしにテキトーにテストして納品か。
中間納品後にソッコウクレームでデスマ必至だな。俺の休みも返上かよ。

派遣専門テスターさんよ、少しは向上心持てよ!
頑固な性格直して仕様書読めよ!テスト仕様書作れよ!
729デフォルトの名無しさん:2008/08/15(金) 16:58:02
C#と何か関係あるのか?
730デフォルトの名無しさん:2008/08/15(金) 16:58:46
コピp(ry
731デフォルトの名無しさん:2008/08/15(金) 16:59:19
コピペだな
732デフォルトの名無しさん:2008/08/15(金) 17:02:06
そうだったのか!
だまされたぁぁあぁ
733デフォルトの名無しさん:2008/08/15(金) 17:03:45
テスト専門派遣のガイドライン
ttp://society6.2ch.net/test/read.cgi/gline/1139460483/
734デフォルトの名無しさん:2008/08/15(金) 17:08:42
>やれることは「テキトーにプログラムを触る」ことだけ。
それは仕事じゃないだろw
735デフォルトの名無しさん:2008/08/15(金) 19:55:08
質問。
各クラスが持つメソッド等の一覧を探してます。
ActionScriptにおける
http://livedocs.adobe.com/flex/2_jp/langref/
のサイトに相当するようなページってどこにあるんでしょうか。
Visual C#のヘルプとMSDNは探してみたんですが、それらしいものが見つかりませんでした。
736デフォルトの名無しさん:2008/08/15(金) 20:03:32
基本クラスライブラリのならMSDNライブラリにもヘルプにもあるし
それ以外ならそれを作った奴に聞け
737735:2008/08/15(金) 20:49:57
ふぅ。MSDNライブラリで発見しました。
.NET開発の下位にあるとは思いませんでした。
お騒がせしました。
738デフォルトの名無しさん:2008/08/15(金) 23:17:39
質問です。

開発環境:VisualStudio2008
外部のdllを参照しているのですが,出力されるEXEにDLLを組み込むことは可能でしょうか?
739デフォルトの名無しさん:2008/08/15(金) 23:19:48
>>738
EXEに組み込んだらそれはダイナミックリンクとはいわない。
740デフォルトの名無しさん:2008/08/15(金) 23:23:13
>>739
確かに。
741デフォルトの名無しさん:2008/08/15(金) 23:39:36
ILMerge
742デフォルトの名無しさん:2008/08/15(金) 23:40:58
>>738
まぁ普通組み込む意味ねーよなとしか個人的に思えないけど
質問に答えてみると、それだけの情報じゃわかんない
答えるには、DLL が .NET なのかそして Pure IL なのかライセ
ンス大丈夫なのかとか細かい条件が必要
743デフォルトの名無しさん:2008/08/15(金) 23:41:50
>>738
アセンブリーキャッシュのDLLの静的リンクはできないはず

自前のDLLとEXEならフリーソフトを使って一つのファイルにできる
名前忘れたが
744デフォルトの名無しさん:2008/08/15(金) 23:43:44
>>742
アセンブリを2個読み込むより1個読み込むほうが早いしメモリも喰わないから意味はある
ネイティブDLLならしらね
745デフォルトの名無しさん:2008/08/15(金) 23:48:17
署名してあったらダメだけどね。
746デフォルトの名無しさん:2008/08/15(金) 23:51:43
HDDが遅かったりメモリが少なかったりじゃあるまいし、この時代にそんな事やっても意味ねえよ
747デフォルトの名無しさん:2008/08/15(金) 23:55:27
>>744
そういや baseaddress きちんと指定したらどうなんだろう。いつの間にか
オプションに追加されてたから意味ある気がするが・・・
ネイティブ重いのはその辺だった気がするけど CLR のロードはなんか
色々ありそうだし・・・
748デフォルトの名無しさん:2008/08/16(土) 02:15:29
>>746
.NETはアセンブリを読み込んだ後ハッシュをチャックしたり、コンパイルの準備をしたりしなきゃならないんだから
読み込むDLLが少ないほうがいいに決まってるだろ

ただ実行すればいいネイティブDLLとはわけが違う
749デフォルトの名無しさん:2008/08/16(土) 02:22:50
なるほど、君は気が狂ってるんだね
750hebolio:2008/08/16(土) 03:01:48
私はへぼwebプログラマーなんですけども。
仕事中にこっそり自分のサーバと通信するアプリケーションを作りたいと思い、
windowsアプリケーションを作成したくここにたどりつきました。
(ブラウザだとばればれなんですよ。)
C#でサンプルつくるような見本はwebにちらばってるのですが、
.exeファイルにして実行できるようにするにはどうすればいいのですかね。
アプリつくって実行ファイルにして配布するところまでいきたいです。
.csとか言うファイルを変換したりするのですかね。
いい書籍があれば教えてくだ
751デフォルトの名無しさん:2008/08/16(土) 03:03:44
Windowsアプリならばれないという根拠はなに?
752デフォルトの名無しさん:2008/08/16(土) 03:20:50
もうコテハンという時点で・・・ あ、こぴp
753デフォルトの名無しさん:2008/08/16(土) 07:20:05
処理系って何ですか?
よく「あなたが言っているのは処理系の話で、○○とは違う」
と言われます
754デフォルトの名無しさん:2008/08/16(土) 10:00:19
>>750
F5を押したあとに、プロジェクトのフォルダを探し回ればexeが見つかるだろ。
755デフォルトの名無しさん:2008/08/16(土) 11:45:35
Httpwebrequest.Timeoutってどれくらいに設定するのが通例ですか?
756デフォルトの名無しさん:2008/08/16(土) 11:59:36
RFC嫁。
757デフォルトの名無しさん:2008/08/16(土) 12:03:10
>>756
な、何番を読んだら・・・
758デフォルトの名無しさん:2008/08/16(土) 12:09:27
759デフォルトの名無しさん:2008/08/16(土) 12:23:52
クライアント側の話だからアプリの都合で決めたらいいんじゃね?
760デフォルトの名無しさん:2008/08/16(土) 16:25:55
フォームが最大化したこと、また、元のサイズに戻されたことを知るにはどんなイベントを捕まえればよいのでしょうか。
761デフォルトの名無しさん:2008/08/16(土) 17:11:09
お前はその程度の事をいちいち質問しに来るのか?馬鹿なの?
762デフォルトの名無しさん:2008/08/16(土) 17:33:59
>>761
いいぞ,もっと言ってやれ。
763デフォルトの名無しさん:2008/08/16(土) 17:53:40
今サウンドファイル再生にWMPlib.DLLを使っています。
URL与えて、WindowsMediaPlayer.start()を呼び出しても再生までに500millisec程ラグがあります。
このラグを短く、せめて半分にしたいのですがMCIやDirectXを使えばもう少し早くなるのでしょうか?
764デフォルトの名無しさん:2008/08/16(土) 18:47:33
>>760
SizeChangedイベントとWindowStateプロパティかな
765デフォルトの名無しさん:2008/08/16(土) 19:04:40
>>761

ここはふらっとスレなんだから そう言うなよ。
766デフォルトの名無しさん:2008/08/16(土) 19:11:15
>>764
SizeChangedとWindowStateですかー、気づきませんでした。
ありがとうございました。
767デフォルトの名無しさん:2008/08/16(土) 19:28:44
お前らのテンプレートをzipでくれ
768デフォルトの名無しさん:2008/08/16(土) 20:50:07
>>767
金無いんなら頭使え。
使う頭無いなら氏ね。
769デフォルトの名無しさん:2008/08/16(土) 20:51:27
煽りに反応しないよう心がけましょう
770デフォルトの名無しさん:2008/08/16(土) 21:09:39
>>768
テンプレ持ってない低学歴には用はない
771デフォルトの名無しさん:2008/08/16(土) 21:51:50
↑よかったら俺のウンコ食べてくれないか?
772デフォルトの名無しさん:2008/08/16(土) 23:19:28
食べる
773デフォルトの名無しさん:2008/08/17(日) 00:31:36
常駐型のアプリを作っているのですが、

エンターをを押したらメッセージボックスを出す

といったようなプログラムを作るには、どうしたらいいのでしょうか。

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
MessageBox.Show("test");
}
}

これだとフォームがアクティブになってないと反応してくれません。
どうしたらいいでしょうか?
774デフォルトの名無しさん:2008/08/17(日) 00:32:32
フックしないと駄目なんじゃね?
775デフォルトの名無しさん:2008/08/17(日) 00:50:37
つかEnter押すたびにメッセージボックス出てたらそのPC使いもんにならんだろJK
776デフォルトの名無しさん:2008/08/17(日) 00:51:17
>>775
すいません、これは例えです。
何かキーを押したときに特定の動作をさせたいんです。
777デフォルトの名無しさん:2008/08/17(日) 00:52:12
下げ忘れた('A`)
778デフォルトの名無しさん:2008/08/17(日) 00:57:56
「C# ホットキー」でググるんだ。
779デフォルトの名無しさん:2008/08/17(日) 01:14:19
>>778

ありがとうございます!
780デフォルトの名無しさん:2008/08/17(日) 01:16:14
また下げ忘れた('A`)
781デフォルトの名無しさん:2008/08/17(日) 01:17:33
うぜえ氏ねよ
782デフォルトの名無しさん:2008/08/17(日) 01:41:05
別に下げなくたっていいだろ
783デフォルトの名無しさん:2008/08/17(日) 01:58:45
ホットキーも知らずにC#か。
784デフォルトの名無しさん:2008/08/17(日) 03:56:32
ホットケー
785デフォルトの名無しさん:2008/08/17(日) 04:28:20
786デフォルトの名無しさん:2008/08/17(日) 08:08:58
ホットキーって何?飛べるの?
787デフォルトの名無しさん:2008/08/17(日) 13:51:57
C#でプログラムの開発を行っています。
felicaのカードのIDをbyte型で取得した数値をStringに変換したのですがどのようにすればいいでしょうか?
また、byte型の数値が1桁の場合0を追加して2桁にして出力したいと考えています。
byte[0] =1
byte[1] =1
byte[2] =6
byte[3] =1
byte[4] =136
byte[5] =11
byte[6] =162
byte[7] =24
の場合、String型で010106011361116224
と出力したいということです。

for(int i=0;i<IDm_No.Length;i++) //IDm_Noにbyte型で上記の数字が入ってます
{

}
私の書き方が悪いんだと思うのですが、System.Text.Encoding.GetEncodingを使用してもうまくできませんでした。
わかる方いましたら教えていただけないでしょうか?
よろしくお願いします。
788デフォルトの名無しさん:2008/08/17(日) 14:00:06
StringBulder b = new StringBulder();
for(int i=0;i<IDm_No.Length;i++) 
{
s.Append(IDm_no[i].ToString());
}
string id = b.ToString();

これで、その出力結果とおなじのがidに入ると思う。

felicaのことはまったく知らんけど、>>786はなにか仕様を勘違いしてるような気がするが・・・
789デフォルトの名無しさん:2008/08/17(日) 14:01:25
まちがえてた。
ToString()のところはToString("D02")だな。
790デフォルトの名無しさん:2008/08/17(日) 14:02:30
>>788
それ
s.Append(IDm_no[i].ToString("D2"));

ってしないとダメでしょ。
っていうかせっかくStringBuilder使うならAppendFormat使わなきゃ。
そうすればforループが不要になるよ。
791デフォルトの名無しさん:2008/08/17(日) 14:03:52
つづりも間違えてたから、書き直した。

StringBuilder b = new StringBuilder();
for(int i=0;i<IDm_No.Length;i++) 
{
b.Append(IDm_no[i].ToString("D02"));
}
string id = b.ToString();
792デフォルトの名無しさん:2008/08/17(日) 14:06:07
StringBuilder使う必要がなくなるじゃん。
ってか仕様おかしいよね…
793デフォルトの名無しさん:2008/08/17(日) 14:07:14
>>790
byte型の配列が8バイトって決まってないと、使えないジャン。
まあ、見た感じ8バイトっぽいけど。
794デフォルトの名無しさん:2008/08/17(日) 14:15:10
そして戻せないというw
795デフォルトの名無しさん:2008/08/17(日) 14:20:11
796デフォルトの名無しさん:2008/08/17(日) 14:25:23
byte[]とstring間で相互に変換できなくていいのか
797デフォルトの名無しさん:2008/08/17(日) 14:27:04
16進変換かね。
本当の仕様は。
798デフォルトの名無しさん:2008/08/17(日) 14:36:12
(;ω;)ブワッ
実行途中の過程を見たらなぜか10進で表示されていたので気にしないでいました。。。
ちゃんと見たら16進で出力されていたので、10進に直して出力したい。の間違いです。

ごめんなさい orz
799787:2008/08/17(日) 14:54:30
自己解決しました。
お騒がせしてすいませんでしたorz
800デフォルトの名無しさん:2008/08/17(日) 14:56:52
いいえ
801デフォルトの名無しさん:2008/08/17(日) 18:57:58
TextboxでNotepad.exeのクローンみたいなのを作っているのですが、
ひらがなをタイプして変換しようとしてもカタカナにする事しかできません。
これは仕様なのでしょうか?
802デフォルトの名無しさん:2008/08/17(日) 19:06:36
仕様じゃない。君の使い方がおかしいのだろ。
フォントとかIMEの設定とかどうなってる?
803デフォルトの名無しさん:2008/08/17(日) 21:38:33
C#でwmvとかaviの動画の切り出し(1秒目から4秒目を切り出す)ってどうやるんですか?
804デフォルトの名無しさん:2008/08/17(日) 21:43:44
>>802
Textbox.IMEControlはNoControlです。
IMEはMS_IME2007で入力モードひらがな、変換モード一般です。
フォントはメイリオです。

Janeなど他のアプリケーションでは問題なく、.NetでTextboxを使うアプリだけで起こります。
ttp://www.uploda.org/uporg1615911.png
805デフォルトの名無しさん:2008/08/17(日) 23:46:36
匿名メソッドはどういう場面で使うのでしょうか?
使わないと困るような事ってあるんでしょうか?
806デフォルトの名無しさん:2008/08/17(日) 23:57:11
いちいち定義するのが面倒だとか
クロージャっぽくしたいときとか
807デフォルトの名無しさん:2008/08/18(月) 02:13:24
if文でワイルドカード使えないの?
808デフォルトの名無しさん:2008/08/18(月) 02:24:54
は?
809デフォルトの名無しさん:2008/08/18(月) 02:28:30
>>807
おまえは
なにを
いっているんだ
810デフォルトの名無しさん:2008/08/18(月) 02:40:30
>>807
具体的に何がしたいんだ?
ファイルでも検索したいの?
811デフォルトの名無しさん:2008/08/18(月) 02:46:40
if (old* > 18)
812デフォルトの名無しさん:2008/08/18(月) 03:02:47
配列やリストやループをお勉強しましょうね
813デフォルトの名無しさん:2008/08/18(月) 07:40:32
>>805

2,3行までのメソッドをデリゲートで呼び出すなら、わざわざdelegateやメソッドを
定義するより 楽ちんだって言うことだとおもうよ。

あと、匿名メソッドの場合は 匿名メソッドの属するスコープのローカル変数を
参照できるというメリットがある。

List<int> il = ......; というList<int>があるとして このうち5以下の数字のみ
取り出したリストを取得するには

List<int> il2 = il.FindAll(delegate(int x) { return x <= 5; });
または List<int> lf = il.FindAll(delegate((x) => x<5);
とできるけど 匿名メソッドの場合、

さらにこのスコープのローカル変数で int maxNumというのがあるとして
List<int> il2 = il.FindAll(delegate(int x) { return x <= maxNum; });
List<int> il2 = il.FindAll((x) => x < maxNum);
という風に匿名メソッド(またはラムダ式)の中から ローカル変数maxNumを参照できる。

これは名前付きメソッドとdelegateでは単純な方法では実現できない。

814デフォルトの名無しさん:2008/08/18(月) 07:42:44
>>813

>または List<int> lf = il.FindAll(delegate((x) => x<5);
は、
または List<int> lf = il.FindAll((x) => x<5); のまちがいです。
815デフォルトの名無しさん:2008/08/18(月) 07:42:52
ソースが読みにくくなるだけじゃん
816デフォルトの名無しさん:2008/08/18(月) 07:46:22
>>815

おれも可読性は落ちると思うよ。
原則1行のメソッドにしか使わない。

でも一回覚えてしまうと 楽ちんなんだよね。
817デフォルトの名無しさん:2008/08/18(月) 07:53:49
可読性考えて使える人間なら問題ないだろうけど・・・

ラムダのテストってどうすんの?
818デフォルトの名無しさん:2008/08/18(月) 08:34:55
>>817
それだけでテストの対象になるような区切りだったら、
ラムダ式使わないでちゃんとしたメソッドにする。

メソッドをわざわざ書くのもばかばかしいような細かさのものにだけ使う。
819デフォルトの名無しさん:2008/08/18(月) 10:08:53
コマンドラインで、引数がないときとあるときで処理をわけたいです。
引数がないとき ヘルプを表示
引数があるとき 実行。

static void Main(string[] args)
if (args[0] == ""){
// ヘルプを表示
Console.WriteLine("Usage: tmp filename");
}
else{
// 実行
Console.WriteLine("execute");
}
だと、ifの条件の行で「ハンドルされていない例外。インデックスが配列の境界外です」が出ます。
ifの条件をどう書けばいいでしょう?
if (args[0] == NULL)
とかは試したけどだめでした。
820デフォルトの名無しさん:2008/08/18(月) 10:18:12
オレもコンソールあんまやらんけど、、
if (args.Length == 0)
でどう?
821デフォルトの名無しさん:2008/08/18(月) 10:25:04
>>819

たぶん 引数がないときは argsは長さ0の配列として初期化されているんじゃ
ないの?

だから、 if(args.Length > 0)…(引数有り) 、else…(引数無し)で場合分けすればよいかと。
822デフォルトの名無しさん:2008/08/18(月) 10:29:49
配列の初期化しないと
823デフォルトの名無しさん:2008/08/18(月) 10:39:26
マイネットワークのftpフォルダを開く処理を教えてください。
System.Diagnostics.Process.Start(@"NetHood\ftp.server.com");
824デフォルトの名無しさん:2008/08/18(月) 10:50:34
>822
初期化なんてしたらせっかくもらった引数がきえちまうだろ
825デフォルトの名無しさん:2008/08/18(月) 14:52:37
>>820>>821
thanks!
826デフォルトの名無しさん:2008/08/18(月) 14:57:20
でもさぁ、
普通に書いて、エラーが出たらヘルプ表示の方がよくない?

try
catch
だっけか?
827デフォルトの名無しさん:2008/08/18(月) 15:02:05
お前は何を言っているんだ
828デフォルトの名無しさん:2008/08/18(月) 15:04:13
「でもさぁ、
普通に書いて、エラーが出たらヘルプ表示の方がよくない?

try
catch
だっけか?」

と言ってる
829デフォルトの名無しさん:2008/08/18(月) 15:06:14
>>826
かならず引数を必要とするプログラムなら、
単独で起動することはないので、
単独で起動するときに、かんたんなusageを出し、
helpで詳しいヘルプを出す、というのはありじゃないですか?
ちなみに作ってるのはファイルアップローダーなので、
入力待ちになっても困る。
830デフォルトの名無しさん:2008/08/18(月) 15:22:24
ごめん、ごめん 826です。

えっと、要はエラーになる要因を最初に探すより、やってみてエラーになったら考えるのはどう?って事です。

以下、Delphiでごめん。

if( a <> 0 )then
b := c / a
else
b := 0;

よりも

try
b := c / a
except
b := 0;
end;

の方が可読性がいいんじゃないかなと・・・

831デフォルトの名無しさん:2008/08/18(月) 15:25:41
そういうことに例外を使うな、というのが一応のガイドラインになってる。
832デフォルトの名無しさん:2008/08/18(月) 15:33:22
何でもかんでもtry/catchで処理するのは感心しないな。
特に初心者は、味をしめて手軽な逃げ道として乱用しがちになる。
深く考えずに例外処理使うから、後々困るし、全然理解が深まらない。
833デフォルトの名無しさん:2008/08/18(月) 15:33:34
>>826
C#初心者なので、Delphiは未見だし、
すぐにはまだ使えそうにないですが、
なるほど。とりあえず引き出しに入れときます。
アドバイスには感謝します。

現時点では、可読性というほど複雑なことはできずにいます。
なにしろ、コメント行とシステムが書いてくれた行を抜くと、
12〜3行しかないプログラムです。
834デフォルトの名無しさん:2008/08/18(月) 15:37:01
Delphi使いが答えてても荒れない質問スレ
素晴らしい
835デフォルトの名無しさん:2008/08/18(月) 15:37:52
>>830
可読性といいつつも、なんでC#スレでデルファイなわけ?

そのコードだけど、ゼロで割ることについての例外だけど、なんか哲学的だと思う。
836デフォルトの名無しさん:2008/08/18(月) 15:39:11
質問です。
ファイルを読み、表示しています。
これで任意の行(たとえば3行目だけ)を取り出すには、
なにをどこに書けばいいんでしょうか。
3行目だから、lines[3]かと考え、
Console.WriteLine(lines[3]);
だと3文字目を取り出してしまうのです。

ついでに文字列が一致した行を出力するには?

StreamReader readContents = new StreamReader(filename);
while ((lines = readContents.ReadLine()) != null)
{
Console.WriteLine(lines);
}
readContents.Close();
837デフォルトの名無しさん:2008/08/18(月) 15:49:30
変数名の付け方間違ってる。linesじゃなくてline。

ReadLineは一行読むメソッドなんだから何行読んだか数えればいい。
一致したかどうかなんてそれこそ行ごとにチェックしてけばいいだろ。

……while文は理解できてる?
838デフォルトの名無しさん:2008/08/18(月) 15:51:21
while で各行ごとにループしている。linesは1行分しか入ってなくて、毎回使いまわし。
つまり、3回目のループの時が3行目。
一致というのがどの意味での一致かわからないが、String.IndexOfを使うか正規表現Regexあたりで。
839デフォルトの名無しさん:2008/08/18(月) 16:08:47
>>837
whileで使い回しているのはわかってきた感じです。
毎回line(旧lines)の内容を書き換えているので、3行目で処理しないと消えてしまうわけです。

>>838
カウントですね!

while ((line = readContents.ReadLine()) != null)
{
}
for (int i = 1; 1 < i ; i++) { //1から数えてるつもり。
Console.WriteLine(line[3]);
}
で近づいてきました?
840デフォルトの名無しさん:2008/08/18(月) 16:26:17
うん、あさってくらいに行ってるね。
841デフォルトの名無しさん:2008/08/18(月) 16:29:50
StreamReader readContents = new StreamReader(filename);

int i = 0;
while ((line = readContents.ReadLine()) != null)
{
i++;
if(i == 3) Console.WriteLine(line);
}
readContents.Close();

こうかな
842デフォルトの名無しさん:2008/08/18(月) 16:33:07
わざとやってんなら死ねよ
843デフォルトの名無しさん:2008/08/18(月) 16:57:31
>>841
ありがと〜。ぜんぜん違ってました。…。
なるほど。こういう風に行を指定するんですね。
844デフォルトの名無しさん:2008/08/18(月) 16:58:54
自分は List<T> と Collection は似たようなものという認識なのですが、
これでいいでしょうか?

そうだとすると、List<T>の方が Conatins() メソッドなどが在る分便利なので
Collectionは無駄にように感じるのですが、絶対にCollectionを使わないといけない
ようなケースがあるとしたらどんな場合でしょうか。
845デフォルトの名無しさん:2008/08/18(月) 17:03:51
VBだともっと簡単なんだよ!
846デフォルトの名無しさん:2008/08/18(月) 17:08:01
Collectionと言われても標準ライブラリにはVB互換用コレクションぐらいしかないので
この場合一般的な意味でのコレクションと言うことになるのだろうか
だがそれにしてはメソッドの有無など具体的な話になっているな
847デフォルトの名無しさん:2008/08/18(月) 17:09:00
昔のやつとジェネリックについての話とか?
848デフォルトの名無しさん:2008/08/18(月) 17:10:29
ICollectionのことだと思うけど
ICollectionはListもDictionaryも含んでる
ICollectionはListにもDictionaryにも使える共通の処理を書くときに使える

まあまず使わないけど
849844:2008/08/18(月) 17:24:57
>>846
>Collectionと言われても標準ライブラリにはVB互換用コレクションぐらいしかない

それです、その>Collectionでした。

>>848
>ICollectionはListにもDictionaryにも使える共通の処理を書くときに使える
>まあまず使わないけど

やはり List<T> でいつも決めうちで使うという感じで特に問題ないですか?
850デフォルトの名無しさん:2008/08/18(月) 17:34:15
なんだほんとにMicrosoft.VisualBasic.Collectionのことだったのか
そんなのの存在は忘れていい
851デフォルトの名無しさん:2008/08/18(月) 17:55:46
Microsoft.CSharpがVB並に充実するのはいつですか?
852デフォルトの名無しさん:2008/08/18(月) 17:58:47
TCPClientを使ってFileStreamで読み込んだファイルを送信したいのですが、
大きなファイルを読み込むとbyte型配列に代入する時にOutOfMemoryになってしまいます。

巨大ファイルを送るいい方法ってありませんか?
853デフォルトの名無しさん:2008/08/18(月) 18:01:17
>>851
C#が欲しい機能はSystem.***に入ってくれるので

>>852
一部読み込んで書き込んで一部読み込んで書き込んでを繰り返す
854デフォルトの名無しさん:2008/08/18(月) 18:03:10
結局VB使っとけばいいんじゃね?MSの手厚いサポートがあるしw
855デフォルトの名無しさん:2008/08/18(月) 18:04:37
Microsoft.VisualBasicはC#からでも殆ど使えるし、どうしてもって言うなら使えばいいよね
856デフォルトの名無しさん:2008/08/18(月) 18:08:39
Microsoft.VisualBasicを使うのはかまわんが、
Microsoft.VisualBasic.Compatibility.dllを使うのは辞めてくれ。
それもC#から
857デフォルトの名無しさん:2008/08/18(月) 18:14:48
DirListBoxとか使いたくなるときはある
858デフォルトの名無しさん:2008/08/18(月) 18:15:07
>>836
何をやりたいのかよくわからんけど
string[] lines = ReadAllText(filename);
で全行を読み込んでから好きな行を取り出すのが簡単
string s = null;
if (lines.Length > 3)
{
s = lines[2];
}

3行目だけ欲しくて残りはいらない場合は、
using (StreamReader sr = new StreamReader(filename))
{
string line = null;
int i = 0;
do
{
line = sr.ReadLine();
if (i == 2)
{
Console.WriteLine(s);
break;
}
i++;
} while (line != null);
}

using 構文を使っていない人は初心者だからあまり信用しないように
859デフォルトの名無しさん:2008/08/18(月) 18:15:44
>>853
byte[] buffer = new byte[1024];

while (true)
{
int readSize = ふぁいるすとりーむ.Read(buffer, 0, buffer.Length);
if (readSize == 0)
break;
}

こう言うことですか?
860デフォルトの名無しさん:2008/08/18(月) 18:19:06
>>859
まあそうだが書き込み忘れんなよ
861デフォルトの名無しさん:2008/08/18(月) 18:24:29
>>860
助かりました
ありがとうございます
862836:2008/08/18(月) 19:39:03
>>858
ありがとうございます。いろいろ方法あるんですね。
全文を読み込む方法も知りたいと思っていました。

ちなみになにをするかというと、
いまはWebから情報をダウンロードしてきて、
必要な行だけ抜き出す、という処理を書いてます。

ほかにもこの処理は基本的なテクニックなので、
テキストファイルから抜き出すとか、
けっこうひんぱんに必要だと思っているのですが、
できなくてこの1カ月くらいトライ&エラーをくり返してました。

基本的なテクニックなので、いろいろな方法を学べて、
応用していきたいと思ってます。
863デフォルトの名無しさん:2008/08/18(月) 20:37:23
その基本的なテクニックは、もっと初歩の基本的なテクニックをやってからじゃないか?
864デフォルトの名無しさん:2008/08/18(月) 20:58:58
入門書を読んでサンプルコードを書いて動かして理解するところからだな
ifは書けてるけどforはなんのこっちゃ分かってないようだし
stringも配列も分かってない
865デフォルトの名無しさん:2008/08/18(月) 21:36:50
プログラムを作っているとif文の入れ子構造が深くなったり
ifやswitchだらけで非常に見辛くなってくるのですが
これをもっと減らし、上手く書く為には何を覚えていけばいいのでしょうか。
ある程度のプログラムになってくると、そういう物なんでしょうか…。。
866デフォルトの名無しさん:2008/08/18(月) 21:38:08
>>865
if文の深いネストに対抗する手段はただ一つ。
複数の関数に分割せよ。
867デフォルトの名無しさん:2008/08/18(月) 21:38:42
それはオブジェクト指向を実践できていない証左。
868デフォルトの名無しさん:2008/08/18(月) 21:41:14
usingが深くなる事はよくあるけどif文が深くなった事はないなあ
869デフォルトの名無しさん:2008/08/18(月) 21:45:32
Firefoxのダウンロードマネージャーみたいに動的にパネルを追加していくのってどうしたらいいんだろ・・・
870デフォルトの名無しさん:2008/08/18(月) 21:48:32
お前の日記帳じゃないんだ
871デフォルトの名無しさん:2008/08/18(月) 22:18:14
StackとかDictionaryは.ForEach()を持ってないの?
872デフォルトの名無しさん:2008/08/18(月) 23:00:27
やっぱりJavaはダサダサ言語なんじゃん。なんか硬いっつーかw
873デフォルトの名無しさん:2008/08/18(月) 23:57:25
何をいっておる。
Javaこそきれいなオブジェクト指向言語ではないか。
C#で開発しているが、JAVA派である。
874836:2008/08/18(月) 23:59:19
3行目を出力するを応用して、
引数の文字列を含む行を出力しようとしています。
if(lineNumber == 3 ) Console.WriteLine(line);

Console.WriteLine(line.IndexOf(args[0]));
で見ると、args[0]を含む行は+の数字で、それ以外は-だったので、
if (line.IndexOf(args[0]) > 1)
としてみました。
が、これがうまくヒットせず空振りしてます。
どのあたりがまずいでしょう?
875デフォルトの名無しさん:2008/08/19(火) 00:01:55
それだと2文字目以降に含む行がヒットするはずだ
876デフォルトの名無しさん:2008/08/19(火) 00:34:10
>>865 例えば、frg1がtrueのときにfuncに処理させる場合、
void Func ( ) {
 if ( frg1 ) { hoge( ) ; ・・・ }
}
を、
void Func( ) {
 if( ! frg1 ) { return; }
 hoge( ) ; ・・・
}
とすればネストを一つ減らせる。
メソッドの最後まで効く if ブロックにしか使えんが、探すと結構使えるとこがあるはず。

>>874
演算子の使い方がわかってなさそうなのが一番まずい。
それとC#のIndexはすべて0から。つまりIndexOfが返す数値は・・・。
あと、正直>874の間違いを理解してから使うべきだと思うが、StringクラスにはContains(string)っていう便利なメソッドがある。
if ( line.Contains( args[0] ) ) { ・・・ でおk。
877デフォルトの名無しさん:2008/08/19(火) 01:43:06
>>873
たしかに綺麗だが、そのせいで不便。
ちょっと汚いくらいがちょうどいい。
878デフォルトの名無しさん:2008/08/19(火) 05:37:16
>>830
おいらもDel厨でC#に移行中だけど感動したけどDelphiでもそれはやっちゃ駄目だと思う
879デフォルトの名無しさん:2008/08/19(火) 08:51:07
>>871
にゃい
880836:2008/08/19(火) 12:22:30
演算子勉強中です。一度もtrueがでなかったらテストを実行する、と書きたいです。

int lineNumber = 0;
while ((line = readContents.ReadLine()) != null)
{
lineNumber++;
if (line.Contains(args[0]))
Console.WriteLine(line);
else
Console.WriteLine("not一致");
}

現状の結果
19.08.2008 09:53 test
not一致
19.08.2008 09:54 test
not一致
19.08.2008 10:51 test
not一致

求める結果(1)1回でもヒットした場合
テストずみ Console.WriteLine("テストずみ");を1回だけ。

求める結果(2)1回もヒットしなかった場合
not一致 Console.WriteLine("not一致"); を1回だけ。
881デフォルトの名無しさん:2008/08/19(火) 12:30:11
見つかったフラグをfalseにしておいて、
みつかったら、見つかったフラグ=trueにしてbreak
ループ抜けたあとに、見つかったフラグを調べればいい
882デフォルトの名無しさん:2008/08/19(火) 13:26:43
つーかC#じゃなくて、アルゴリズム全般の初心者スレにいくべきじゃねえの
883デフォルトの名無しさん:2008/08/19(火) 14:05:20
どこ
884デフォルトの名無しさん:2008/08/19(火) 14:09:14
int lineNumber = 0;
bool hit = false;
while ((line = readContents.ReadLine()) != null)
{
lineNumber++;
if (line.Contains(args[0]))
{
hit = true;
Console.WriteLine(line);
}
}

if(hit)
...
else
...
885デフォルトの名無しさん:2008/08/19(火) 14:34:40
ふらっと的にはLinq使って初心者を惑わすのがセオリーだろ
public static IEnumerable<string> TextFile(string filename) {
 using (var sr = new StreamReader(filename)) {
  string s; while ( ( s = sr.ReadLine() ) != null ) yield return s;
 }
}
static void Main(string [] args) {
 if (args.Length < 2) return;
 Console.WriteLine(TextFile(args[0]).Any((s) => s.Contains(args[1]))?"済":"未");
}
886デフォルトの名無しさん:2008/08/19(火) 14:40:44
>>830を参考にしてみた

int lineNumber = 0;
try
{
while ((line = readContents.ReadLine()) != null)
{
lineNumber++;
if (line.Contains(args[0]))
throw new Exception();
}
Console.WriteLine("not一致");
}
catch
{
Console.WriteLine("テストずみ");
}

これじゃただのGOTOです><
887デフォルトの名無しさん:2008/08/19(火) 15:20:44
>>885
using 幾つか追加してみたけど、

textfile.cs(7,15): error CS1518: クラス、デリゲート、列挙型、インターフェイス
または構造体が必要です。
textfile.cs(8,23): error CS1518: クラス、デリゲート、列挙型、インターフェイス
または構造体が必要です。
textfile.cs(11,1): error CS1022:
型、名前空間の定義、またはファイルの終わりが必要です。

とか出てうごかないの。csc.exe textfile.cs で実行しますた

888デフォルトの名無しさん:2008/08/19(火) 15:33:13
>>885
File.ReadAllLines()使えよ。
889デフォルトの名無しさん:2008/08/19(火) 15:37:46
>>887
VS2008かな?
2008で、対象のフレームワークを3.5にして
using System.IO;
using System.Linq;
でいけるかと。
890デフォルトの名無しさん:2008/08/19(火) 15:44:44
>>889
どう見てもコマンドラインコンパイル
そして明らかにclassを未定義
891デフォルトの名無しさん:2008/08/19(火) 16:15:39
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EasySample
{
 class Program
 {
  static void Main(string [] args) {
   if (args.Length < 2) return;
   Console.WriteLine(TextFile(args[0]).Any((s) => s.Contains(args[1]))?"済":"未");
  }

  public static IEnumerable<string> (string filename) {
   using (var sr = new StreamReader(filename)) {
    string s; while ( ( s = sr.ReadLine() ) != null ) yield return s;
   }
  }
 }
}
見よう見まねでクラスで包んで診た所、やはりコンパイルが通らない…(謎
892891=887:2008/08/19(火) 16:17:19
>>889-890 レス番が飛んj…orz
893デフォルトの名無しさん:2008/08/19(火) 16:17:22
>>891
プロジェクトのプロパティ出して、アプリケーションのとこの対象のフレームワークを3.5に
894デフォルトの名無しさん:2008/08/19(火) 16:23:51
>>893
csc.exe textfile.cs と打ち込んで
DOS窓からコンパイルしたいです…むりぽですか?
895デフォルトの名無しさん:2008/08/19(火) 16:25:43
悪いことは言わんからVisual C# Expressでも使っとけ
896デフォルトの名無しさん:2008/08/19(火) 16:38:42
該当バージョンのcsc.exeを選んで、引数を指定すればいい
897デフォルトの名無しさん:2008/08/19(火) 16:49:33
>>896
>csc.exe textfile.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30428.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.

エラーメッセージが以下に続く…

ttp://d.hatena.ne.jp/bellbind/20070802/1186020328
ここのサンプルは動かすことできたのですが、
同じ3.5なので動くはず…

1. バージョンが>>891では異なるので失敗する
2. 名前空間とクラスの部分の記述が間違えている

書き換える箇所は、そんなに多くはないと思うのですが
エラー出力からどう直してよいか…難しい…
898デフォルトの名無しさん:2008/08/19(火) 16:52:19
>>897
メソッド名(TextFile)が欠けている。
899デフォルトの名無しさん:2008/08/19(火) 16:53:17
>public static IEnumerable<string> (string filename) { 

コピペ失敗してるだけではないかい。関数名がないぞ。
900デフォルトの名無しさん:2008/08/19(火) 16:58:11
このレベルでIDE使わないんだから放置しろよ・・・
901デフォルトの名無しさん:2008/08/19(火) 16:59:01
Javaみたいに各クラスにmain置きたいんですけどどうすればいいですか?
902デフォルトの名無しさん:2008/08/19(火) 17:00:15
csc /main:Program3 
903891:2008/08/19(火) 17:02:51
>>897-899
>textfile linq1.cs using

>textfile linq1.cs TextFile


できました…! 簡単にgrep実装できてて驚きますた
あとお騒がせして申し訳ありませんでした…orz
904デフォルトの名無しさん:2008/08/19(火) 17:05:38
なんでエラーの内容を書かないんだろうね?
905デフォルトの名無しさん:2008/08/19(火) 17:05:54
あたまわるいから
906891:2008/08/19(火) 17:09:29
>>904
30行くらいエラーが出力されて、よくよく読んでみたら
構文エラーですよね > 無効なトークン

textfile.cs(9,37): error CS1519: 無効なトークン '(' が
クラス、構造体またはインターフェイスのメンバ宣言で使用されています。
textfile.cs(9,53): error CS1002: ; が必要です。
textfile.cs(10,47): error CS1002: ; が必要です。
textfile.cs(12,7): error CS1519: 無効なトークン 'while' が

つかじぶん入門書嫁orz コマンドライン叩けorz
907デフォルトの名無しさん:2008/08/19(火) 17:21:10
コマンドラインを叩くな
IDE使え
908デフォルトの名無しさん:2008/08/19(火) 17:23:12
漢はだまってMsBuild、とまた初心者を惑わすようなことを言ってみる
909デフォルトの名無しさん:2008/08/19(火) 17:25:27
VS2008にSP1当てたら、構文エラーもリアルタイムでチェックしてくれるようになった。
正直ちょっとうざい。
910デフォルトの名無しさん:2008/08/19(火) 17:26:49
構文エラーはもともとリアルタイムちゃうんかい
911デフォルトの名無しさん:2008/08/19(火) 17:36:35
いや、なんか頻度が上がった
912デフォルトの名無しさん:2008/08/19(火) 17:45:45
メソッド作った直後に
「値を返さない場合がある」
と言われるようになった気がする。
913デフォルトの名無しさん:2008/08/19(火) 17:53:50
質問させてください。
ピクチャーボックスにある画像aを表示させ、その画像Aをクリックすると別の画像Bに切り替わり、もう一度クリックすると元の画像Aに戻るという処理をしたいと思っています。
画像の種類によって条件分岐する処理をしたいのですが、以下のように書いたところ、必ず条件式がfalseと判定されてしまいます。
正しい書き方を教えていただけないでしょうか。

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (pictureBox1.Image == practiceproject.Properties.Resources.PicA)
{
pictureBox1.Image = practiceproject.Properties.Resources.PicB;
}
else
{
pictureBox1.Image = practiceproject.Properties.Resources.PicA;
}
}

よろしくお願いします。
914デフォルトの名無しさん:2008/08/19(火) 17:56:57
>>913
マルチポスト乙
915デフォルトの名無しさん:2008/08/19(火) 17:57:39
直接Image比較するのも微妙だけどあえてそうするなら
PicAとPicBを一旦staticな変数に保存して全てそれを使う
916913:2008/08/19(火) 18:13:18
>>915
ありがとうございます。
以下のようにしてみましたが、やはりfalseと判定されるようです。

直接imageと比較しない方法というのは、どのように現在表示されている画像の情報を持ってくるのでしょうか。
もし一般的な方法があれば教えていただきたいです。

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
Bitmap pic1 = practiceproject.Properties.Resources.PicA;
Bitmap pic2 = practiceproject.Properties.Resources.PicB;

if (pictureBox1.Image == pic1)
{
pictureBox1.Image = pic2;
}
else
{
pictureBox1.Image = pic1;
}
}
917デフォルトの名無しさん:2008/08/19(火) 18:20:01
PictureBoxのTagあたりに、どちらの画像を表示しているかをセットしておくとか。

if (pictureBox1.Tag is string && (string)pictureBox1.Tag == "pic2")
{
pictureBox1.Image = pic1;
pictureBox1.Tag = "pic1";
}
else
{
pictureBox1.Image = pic2;
pictureBox1.Tag = "pic2";
}
918デフォルトの名無しさん:2008/08/19(火) 18:23:43
>>916
フラグ用に変数を用意し、その変数がfalseならpic1を表示してフラグをtrueに。
trueだったらpic2を表示してフラグをfalseに。
919913:2008/08/19(火) 18:39:19
>>917-918
ありがとうございます。無事できました。
画像の変更の際にその状態を示す変数を変えるのが
普通の方法ということも分かり、非常に参考になりました。
できれば後学のために教えていただきたいのですが、
if (pictureBox1.Image == pic1)という判定がうまくいかない原因はどこにあるのでしょうか?
920デフォルトの名無しさん:2008/08/19(火) 18:50:30
参照型の == 演算子は、特別に定義しない限り、両辺が同じインスタンスか否かを判定する。
Resourcesクラスは、プロパティが参照されるたびに新しいインスタンスを返すので、
if (pictureBox1.Image == pic1) では、毎回別のインスタンスを比較していることになる。

メソッドの外に、
static Bitmap pic1 = practiceproject.Properties.Resources.PicA;
static Bitmap pic2 = practiceproject.Properties.Resources.PicB;

と書いておいて、FormのLoadイベントあたりで
pictureBox1.Image = pic1;

として画像を設定するようにすれば、Resourcesクラスのプロパティを参照するのは1回だけ
になるので、画像を直接比較しても大丈夫なんじゃないのかなあ。
検証してないけど。

別に、画像を直接比較する方法が、必ずしも間違っているわけじゃないよ。
921デフォルトの名無しさん:2008/08/19(火) 18:55:44
Bitmap pic1 = practiceproject.Properties.Resources.PicA;
Bitmap pic2 = practiceproject.Properties.Resources.PicA;

if (pic1 == pic2)
これやってみるといい。
922920:2008/08/19(火) 18:58:35
言いっぱなしも無責任なので検証してみた。これでちゃんと画像が切り替わったよ。

static Bitmap pic1 = Properties.Resources.PicA;
static Bitmap pic2 = Properties.Resources.PicB;

private void Form1_Load(object sender, EventArgs e)
{
  pictureBox1.Image = pic1;
}

private void pictureBox1_Click(object sender, EventArgs e)
{
  if (pictureBox1.Image == pic1)
  {
    pictureBox1.Image = pic2;
  }
  else
  {
    pictureBox1.Image = pic1;
  }
}
923デフォルトの名無しさん:2008/08/19(火) 19:08:50
ttp://homepage1.nifty.com/yasunari/VB/VB2005/WebBrowserTravelLogSample.htm
これを見ながらC#でWebBrowser拡張してるんですが、VB→C#がいまいち分からないのでご教授ください。

1. refと[Out]を同時に指定するとエラーになります。この場合はC#のoutでいいのでしょうか、それとも他の指定がいいのでしょうか?

2. ExHtmlHistory.EnumEntriesの中で、TLEntry.Nextの第三引数(ByRef Integer)にNothingを渡していますが、これにあわせてnullを渡すと怒られます。
この場合何を渡すのが適切でしょうか。
924913:2008/08/19(火) 19:11:52
>>920-922
ありがとうございます。
試してから書き込もうと思ったのですが、先にやられてしまいました。。
こちらでもうまくできました。
Resourcesクラスが参照されるたびに新しいインスタンスを返すというのが
目から鱗でした。
親切に答えていただきありがとうございました。
925デフォルトの名無しさん:2008/08/19(火) 19:17:05
>>923
> 1. refと[Out]を同時に指定するとエラーになります。この場合はC#のoutでいいのでしょうか、それとも他の指定がいいのでしょうか?
out このとき属性は不要

> 2. ExHtmlHistory.EnumEntriesの中で、TLEntry.Nextの第三引数(ByRef Integer)にNothingを渡していますが、これにあわせてnullを渡すと怒られます。
> この場合何を渡すのが適切でしょうか。
Nothing渡してるの間違いな気がするが
IntPtrで宣言してIntPtr.Zero渡しとく
926デフォルトの名無しさん:2008/08/19(火) 19:31:03
>>925
ttp://smdn.invisiblefulmoon.net/mnemorepos/20050213-00.html
を見てもNothingを渡しているようなのでどうしようか困っていました。
とりあえずIntPtrを渡す方法でコンパイルOKでした。
よく考えると、outにNothing渡そうとしている時点で変数自体はどうでもいいってことですよね・・・。
これから動作検証してみます。ありがとうございました。
927デフォルトの名無しさん:2008/08/19(火) 19:42:31
ネットワークプログラミングに関する質問ですが、複数のクライアントを起動して、データをリレーしたい(マルチホップさせたい)と思っています。
このような場合、どのような手法をとるのが一番簡単に実現できるでしょうか。
今のところ、Socketのselect()関数が最初の候補として上がっているのですが、もし他に何か賢い方法があればうれしいです。
# NetworkStream単位で管理できるとかなりうれしいのですが、select()はNetworkStreamには適用できないですし…。
928デフォルトの名無しさん:2008/08/19(火) 19:59:27
それならjavaの方がいいんじゃないの?
929デフォルトの名無しさん:2008/08/19(火) 20:35:37
internal な interface って何で作れないの?
一体みんなどうしてるんだ??
930デフォルトの名無しさん:2008/08/19(火) 20:37:26
internalなinterfaceは作れるよ
931デフォルトの名無しさん:2008/08/19(火) 20:52:28
それを実装すると面罵が internal じゃなくて public になるんだよね
意味ねえ
932デフォルトの名無しさん:2008/08/19(火) 21:01:28
メンバーがinternalって意味わからないけど。。
933デフォルトの名無しさん:2008/08/19(火) 21:03:06
メンバ以外にinternalいつ使うんだよ。。
934デフォルトの名無しさん:2008/08/19(火) 21:13:34
>>933
いや、インターフェイスってそもそも何か分かってる?
935デフォルトの名無しさん:2008/08/19(火) 21:41:23
モジュール内だけでインターフェース使って何が悪い
936デフォルトの名無しさん:2008/08/19(火) 21:49:53
型がinternalならメンバーはpublicであっても実質internalになるからそれで間に合う。
内部向けと外部向けを使い分けたいならpublicとinternalのinterfaceをそれぞれ用意すべき。

唯一考えられるのは、publicなクラスがあって、
本来はinternalとして扱いたいメンバーをinternalなinterfaceを通して、
アセンブリ内だけにメンバーを公開したい場合かな。
実装はpublicにする必要があるからクラス経由の場合publicにそのメンバーがアクセスできてしまう。

もっともC#にはこの問題に対応する手段はある。
937デフォルトの名無しさん:2008/08/19(火) 21:53:02
ポリモフィズムしたいけど、publicにはしたくない
とかあるじゃない?
938デフォルトの名無しさん:2008/08/19(火) 21:53:37
明示的実装にしろってか?
それは許せないな
939デフォルトの名無しさん:2008/08/19(火) 21:55:25
publicとかinternalとかそういうことにこだわるのは無益だしキモイ
オブジェクト指向の暗黒面に落ちてる
940デフォルトの名無しさん:2008/08/19(火) 21:57:11
>唯一考えられるのは、publicなクラスがあって、
>本来はinternalとして扱いたいメンバーをinternalなinterfaceを通して、
>アセンブリ内だけにメンバーを公開したい場合かな。

こういう状況、普通にあるよね?
941デフォルトの名無しさん:2008/08/19(火) 21:59:10
ないけどそうしたいなら明示的実装したらええが
さらにinternalに同名のメソッド作ったっていいし
942デフォルトの名無しさん:2008/08/19(火) 21:59:32
>939
他の人は使ってもしょうがないもの、
使ってほしくないものは、隠したほうが
みんなにとっていいじゃないか。
943デフォルトの名無しさん:2008/08/19(火) 22:02:39
どうやって隠そうかと頭をひねる時間があるならpublicで実装したほうがええが
944デフォルトの名無しさん:2008/08/19(火) 22:06:49
クラスをinternalで作って外部からはpublic interfaceからだけで扱わせるのが普通だな。
別にファクトリクラスが必要になるがそれはご愛嬌。
945デフォルトの名無しさん:2008/08/19(火) 22:12:36
internalアクセスってそもそも使ったことないし
その必要性を感じたことがないなあ。

まあそれはともかく、>>931の言ってることからズレてないか?
931は単にインターフェイスの意味がわかってないだけだと思うんだけど。
946デフォルトの名無しさん:2008/08/19(火) 22:15:31
C# は高速なんだよ。dllに固めてAPIを公開できるんだ -> public

seal とか partial とか private とか internal とか namespace とか
色々あるけど、わかり易く解説キボン。
947デフォルトの名無しさん:2008/08/19(火) 22:15:59
>internalアクセスってそもそも使ったことないし

常に1プロジェクトで完結してんの?
948デフォルトの名無しさん:2008/08/19(火) 22:17:40
設計がしっかりしていれば、internalのような例外的プロテクションはほとんど必要ない
949デフォルトの名無しさん:2008/08/19(火) 22:24:00
>>948
その理屈だとモジュールという概念も必要ないという極論に行き着く
950デフォルトの名無しさん:2008/08/19(火) 22:24:36
interfaceやpublicさえしっかりしていれば、内部は適当でというオブジェクト指向言語は多い。
何でもprivateで隠したがるのはC++で蔓延した悪い習慣。
javaはデフォルトをパッケージスコープ(internal)にしたのに誰も使ってくれなくてさびしい思いをしている。
C#はjavaの状況を観察しつつ現状に合わせてprivateをデフォルトにしたそうだ。

>>945
最初の質問は居酒屋で最初に出てくるアテみたいなもので(汗
951デフォルトの名無しさん:2008/08/19(火) 22:28:36
C#って覚えることいっぱいで複雑すぎないか?やっぱjavaか素直にVBなのかな・・・
952デフォルトの名無しさん:2008/08/19(火) 22:29:23
そうでもない
953デフォルトの名無しさん:2008/08/19(火) 22:32:51
>何でもprivateで隠したがるのはC++で蔓延した悪い習慣。
さすがに釣りだよね?

客が厨房に入って料理人に注文出せる料理屋の方がいいんだ、っていうのは
想像力が欠如している発想なんであってさあ。

そんな料理屋、誰に注文だしたらいいのかわかりゃしないってことになりがちでしょ?

だからたいていの料理屋は注文取りのお姉さんとだけコミュニケーションすれば済む
システムを採用してるんだけどなあ。
954デフォルトの名無しさん:2008/08/19(火) 22:34:36
>>951
Java はむしろ、今 C# が先にとりいれた機能をパクリまくってる。
C# が複雑で Java が簡単なんてのはもう元もいいとこ。
VB に至っては C# とやれることほぼ一緒。
文法が C ベースが BASIC ベースかの違いしかない。
955デフォルトの名無しさん:2008/08/19(火) 22:34:42
オブジェクト指向の暗黒面に落ちれば落ちるほど
たとえ話がうまくなる
956デフォルトの名無しさん:2008/08/19(火) 22:36:40
じゃ、C++はどうなの?
957デフォルトの名無しさん:2008/08/19(火) 22:37:09
何でもpublicで公開したがるのはどこで蔓延した悪い習慣?
958デフォルトの名無しさん:2008/08/19(火) 22:38:13
>>951
VBはC#で出来こることは全部でいるように拡張されてるから見たことも無いようなキーワードがわんさか出てくる。

Public Delegate Sub ActChangeOkHandler(ByVal sender As Object, ByVal act As Boolean, ByRef rt As Boolean)
Public Custom Event ActChangeOkHandler As ActChangeOkHandler Implements IHello.ActChangeOk
 AddHandler(ByVal actChangeOkHandler As ActChangeOkHandler)
 End AddHandler
 RemoveHandler(ByVal actChangeOkHandler As ActChangeOkHandler)
 End RemoveHandler
 RaiseEvent(ByVal sender As Object, ByVal act As Boolean, ByRef rt As Boolean)
 End RaiseEvent
End Event
こんなの俺の知ってるVBじゃないや〜〜
959デフォルトの名無しさん:2008/08/19(火) 22:38:22
>>953
俺のいきつけの飯屋は厨房の暖簾めくっておっちゃんに注文しないと飯出てこないよ…
960デフォルトの名無しさん:2008/08/19(火) 22:39:14
internal class Program
{
  public Program();
  private static void Main(string[] args);
}

実行ファイルで、internal 使ってるとこハッケソ
あとは、メソッドはpublic, フィールドはprivate
クラスはpublicみたいなかんじだった。

珠にstaticが付いたメソッドがあるくらい。

public sealed class <- 外部向けAPIクラスでハッケソ
internal class => sealed と internal はどうやらクラスに付ける物らしい…
961デフォルトの名無しさん:2008/08/19(火) 22:40:41
C++はJavaのパクリだろ。
962デフォルトの名無しさん:2008/08/19(火) 22:41:47
ageる程おもしろくはないよ
963デフォルトの名無しさん:2008/08/19(火) 22:44:23
とにかく、C#ではinterfaceのメンバはpublicなのだから、
文句を垂れる前に、明示的実装あたりでお茶を濁せばいいんじゃないか?

もっともMSDNによれば、
> 明示的な実装について理解するには、高度な専門知識が必要です。
らしいけど。
964デフォルトの名無しさん:2008/08/19(火) 22:56:15
interface のアクセスレベルと同じアクセスレベルか
それよりもゆるいレベルで実装してればいいじゃんか
なんでわざわざ public を必須にせにゃならん
965デフォルトの名無しさん:2008/08/19(火) 23:02:03
>>962
おまえ、流れを切るなよ。使えない奴だな・・・
966デフォルトの名無しさん:2008/08/19(火) 23:35:41
↑何?悔しかったの?w
967デフォルトの名無しさん:2008/08/20(水) 00:06:59
はなくそ
968デフォルトの名無しさん:2008/08/20(水) 00:17:33
>客が厨房に入って料理人に注文出せる料理屋の方がいいんだ、っていうのは
>想像力が欠如している発想なんであってさあ。

>そんな料理屋、誰に注文だしたらいいのかわかりゃしないってことになりがちでしょ?

>だからたいていの料理屋は注文取りのお姉さんとだけコミュニケーションすれば済む
>システムを採用してるんだけどなあ。

あほだろ。
注文取りのお姉さんは厨房に入って料理人と直接細かい話してもいいじゃんって話だろ。
969デフォルトの名無しさん:2008/08/20(水) 00:40:25
↑何?悔しかったの?w
970デフォルトの名無しさん:2008/08/20(水) 00:57:19
↑何?悔しかったの?w
971デフォルトの名無しさん:2008/08/20(水) 01:07:47
↑何?悔しかったの?w
972デフォルトの名無しさん:2008/08/20(水) 01:13:07
↑何?梅しかったの?w
973デフォルトの名無しさん:2008/08/20(水) 01:32:19
↑何?梅しかったの?w
974デフォルトの名無しさん:2008/08/20(水) 05:28:11
これは質問してもいい流れ?
975デフォルトの名無しさん:2008/08/20(水) 06:44:50
どうぞ
976デフォルトの名無しさん:2008/08/20(水) 10:33:37
WebClientやWebRequestとかで、IEのキャッシュは利用できないの?
一通り見たんだが設定項目が見つからないんだ・・・。
977デフォルトの名無しさん:2008/08/20(水) 10:39:50
>>969-974
粘着
死ね
978デフォルトの名無しさん:2008/08/20(水) 10:48:18
public static int f(int a, int b)
{
if (a == b)
{
return 1;
}
else
{
if (a > b) return 2;
if (a < b) return 3;
}
}

値を返さないコードパスがあります。
ってエラーが出るけど網羅してない?
979デフォルトの名無しさん:2008/08/20(水) 10:49:36
>>976
できない

>>978
コンパイラはそこまで解析しない
980978:2008/08/20(水) 10:58:41
>>979
書くとしたら
public static int f(int a, int b)
{
if (a == b) return 1;
if (a > b) return 2;
if (a < b) return 3;

return -1;
}
みたいに書きますか?
981デフォルトの名無しさん:2008/08/20(水) 11:01:39
だろ?
if (a == b) return 1; 
else if (a > b) return 2; 
else return 3; 
982デフォルトの名無しさん:2008/08/20(水) 11:02:03
次スレ?
983デフォルトの名無しさん:2008/08/20(水) 11:06:44
>>981
あーまぁそうですね。
書いてる自分としても条件の見落としが無いように明確に書いたつもりで、
条件の見落としがあった場合にコンパイルエラーを出させようとしたら、
>>978のような結果になる事を知ったわけです。
984デフォルトの名無しさん:2008/08/20(水) 11:59:01
何がまあそうですねだよ
985デフォルトの名無しさん:2008/08/20(水) 12:14:59
人間にとって明確でもコンパイラには不明確
986デフォルトの名無しさん:2008/08/20(水) 12:23:34
aとbにconstを指定してみるといいと思うよ
987デフォルトの名無しさん:2008/08/20(水) 13:03:48
ToolStripにボタンを3つ並べて、RadioButtonのように1つチェックされると、
ほかのボタンのチェックが外れるようにしたいんだけど、
それらしきプロパティがありません。
自前で処理するしかないのでしょうか?
988デフォルトの名無しさん:2008/08/20(水) 14:00:14
>>987
そんなん自前で実装したとしても、せいぜい3分あれば書けるじゃねえか
989デフォルトの名無しさん:2008/08/20(水) 14:03:59
ラジオボタンを貼り付けてAppearanceをButtonにしたほうが早そう。
990デフォルトの名無しさん:2008/08/20(水) 14:04:16
テキストボックスを持つフォームでフォームが非アクティブでも
キーボードからの入力をテキストボックスに渡したい場合
グローバルフックを仕掛けるような方法以外に無いでしょうか。
キーボードフォーカスを非アクティブウィンドウに渡せれば一番良いのですが…。
991デフォルトの名無しさん:2008/08/20(水) 14:06:40
ってtoolstripか。状態保持しとけばいいんじゃない
992デフォルトの名無しさん:2008/08/20(水) 14:07:38
>>990
フォーカスが変わってくれないと使う人が非常に困るから、普通のやり方じゃ無理じゃない?
993デフォルトの名無しさん:2008/08/20(水) 14:08:16
アクティブウィンドウ以外にキーボードフォーカスって…
994デフォルトの名無しさん:2008/08/20(水) 14:53:01
>>990
キーロガーでも作りたいのかw
つか普通に考えればフック以外には無理だろう
995デフォルトの名無しさん:2008/08/20(水) 15:48:54
textbox上下に並べてそれぞれに
あああああいいいいいうううううえええええ
かかかかかきききききくくくくくけけけけけ

と入れたら文字間隔が等間隔になってくれずガタガタになってしまいます
入力した文字を等間隔にするにはどのようにすれば良いのでしょうか?

textboxのプロパティのFontをMSPゴシックにしてみましたが駄目でした。
996デフォルトの名無しさん:2008/08/20(水) 15:51:08
そうなるフォントを探せ
997デフォルトの名無しさん:2008/08/20(水) 15:53:22
MSPゴシックじゃなくてMSゴシックにすればいい。
Pの意味わかってるかw
998995:2008/08/20(水) 16:01:17
>>996-997
ありがとうございます
Pとったらできました
999デフォルトの名無しさん:2008/08/20(水) 17:08:27
>>997
横レスだがググってみた。
ひとつお利口さんになれたわ、サンクス。
プロポーショナルフォントなんて聞いたこと無かったよw
1000デフォルトの名無しさん:2008/08/20(水) 17:16:36
ふらっとC#,C♯,C#(初心者用) Part30
http://pc11.2ch.net/test/read.cgi/tech/1219220127/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。