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

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

前スレ: ふらっとC♯, C#(初心者用) Part15
http://pc11.2ch.net/test/read.cgi/tech/1176387265/
2デフォルトの名無しさん:2007/05/16(水) 20:09:41
スレ埋まる前に新スレ立てられないものか
3デフォルトの名無しさん:2007/05/16(水) 20:37:20
乙。
4デフォルトの名無しさん:2007/05/16(水) 23:21:34
前スレのつづき

((Button)sender).Text = "aaa";
でよくて
(Button)sender.Text = "aaa";
では何故ダメか?

演算の優先順位があるから。

(Button) のようなキャストより . のほうが優先されるため。
(Button)sender.Textだと . が優先され sender.Text を(Button)でキャストしようとするのでNG。

そこで ( )でくくってやって ((Button)sender)としてsenderを Buttonにキャストしてやる。
その上で ButtonクラスのTextを使う。
5デフォルトの名無しさん:2007/05/16(水) 23:28:07
c#使えるお前らスゴイな
6デフォルトの名無しさん:2007/05/16(水) 23:29:58
いいえ。すごいのはC#です。
誰でも使えるのです。
7デフォルトの名無しさん:2007/05/17(木) 00:13:59
>>6
ちょっと上手いと思った
8デフォルトの名無しさん:2007/05/17(木) 00:28:38
>>5
いやいや、C#に使われているのです。
9デフォルトの名無しさん:2007/05/17(木) 03:25:14
Form1_FormClosingイベントで

if (MessageBox.Show("保存して終了しますか?", MessageBoxButtons.YesNoCancel) == DialogResult.Cancel)
Cancelの処理
else if Noの処理
else Yesの処理

と書いたのですが、実際にMessageBoxの「はい」ボタンを押すとYesの処理がされる前に閉じられてしまいます。
Yesの処理が行われた後に閉じるようにするにはどうすればいいでしょうか?
10デフォルトの名無しさん:2007/05/17(木) 03:40:19
そのコードではMessageBox.Showの戻り値のDialogResultを
else句以下で使えないでしょうが。

switch文使うかDialogResultをいったん変数に受けてifで分岐してください
11デフォルトの名無しさん:2007/05/17(木) 04:20:56
>>10
ありがとうございました。
間違えていた部分がわかりました。
12デフォルトの名無しさん:2007/05/17(木) 05:51:54
指定したURIが存在しているかチェックしたいのですが、どのメソッドを
使えばいいでしょうか。
13デフォルトの名無しさん:2007/05/17(木) 09:54:51
Windowsアプリケーション から コンソールアプリケーションを呼ぶ方法が
よく使われると聞いたのですが、それにはexeファイルを呼ぶしかないのでしょうか?
14デフォルトの名無しさん:2007/05/17(木) 10:24:11
comファイルでも大丈夫だと思います。
15デフォルトの名無しさん:2007/05/17(木) 10:40:02
システムフォルダーやその他の
関連図けられたファイルのアイコン等を所得する方法ってありますか?

実行ファイルだけはわかるんですが
やりたい事はエクスプローラーみたいなのを作ろうとしています。
16デフォルトの名無しさん:2007/05/17(木) 10:48:49
Iconクラスにそれ用のメソッドがありましたよ。
17デフォルトの名無しさん:2007/05/17(木) 11:29:59
>>12
各スキーマに対応したクラスでリソース取得を試みて、あるかないかを判断するしかないのでは。

つーかどのメソッドって('A`)
C言語で猫でもの本とサイト(他にも色々)みながらwin32apiについてある程度学び
最近C#を学び、もうC#にしぼって知識をみにつけ使いこなせるようになろうと
してる程度の初心者です。自分の言語の経験は
C→JAVA(かじった程度の知識)→C++(初心者脱出した程度の知識)
→C#(CodeZineで少し言語の文法を身につけた程度)
で、今、[プログラミング VisualC#2005(言語編)]と[プログラミング .NET Framework]
いう本で勉強してるんですが、どうも、自分は基礎の基礎レベルの知識が解って
いないようなので質問さしていただきます。

フィールドを自分は勝手にクラス内部(要はメンバ変数や定数とメソッド)の空間の事だと
思っていたのですが、まったく違いメンバ変数や定数の事のようだと知ったのですが
本当にその程度の理解で良いのかわかりません。フィールドとはメンバ変数や定数の事
だと思っていていいのでしょうか。

internal修飾子がいまいちよくわかりません。

下のソースのように、戻り値がインターフェイスというのはそのインターフェイス実装してる
クラスのオブジェクトを受け取れる?(戻り値がインターフェイスと言う時点でよくわかりません)
public class TestClass{public ITest GetSomething(){
AClass obj = new AClass();obj.MethodA();return obj;}}
public interface ITest { void MethodA();}
internal class AClass : ITest
{public void MethodA(){}}


19デフォルトの名無しさん:2007/05/17(木) 12:36:15
>フィールドを自分は勝手にクラス内部(要はメンバ変数や定数とメソッド)の空間の事だと
>思っていたのですが、まったく違いメンバ変数や定数の事のようだと知ったのですが
>本当にその程度の理解で良いのかわかりません。フィールドとはメンバ変数や定数の事
>だと思っていていいのでしょうか。
?? メソッドは違うといいたいの?

MSDNによると「フィールドとは、クラスまたは構造体に含まれるオブジェクトや値のことです。
フィールドを使用すると、クラスおよび構造体でデータをカプセル化できます」

>internal修飾子がいまいちよくわかりません。
趣味のレベルならわかんなくていいんじゃない?
アセンブリとか理解しない限りわかんないとおもうし
つかわないんじゃない?
20デフォルトの名無しさん:2007/05/17(木) 12:39:05
>フィールドとはメンバ変数や定数の事だと思っていていいのでしょうか。
はい。
静的フィールド(クラス変数)というのもあります。
以前の理解は「メンバ」に近いやろ。

>internal
アセンブリの外からアクセスできないpublicと思えばよか。

>戻り値がインターフェイスというのはそのインターフェイス実装してる
>クラスのオブジェクトを受け取れる?(戻り値がインターフェイスと言う時点でよくわかりません)

はい。
でも戻り値がインターフェイスなら戻り値はインターフェイスです。
それ以上でも以下でもありません。
この場合GetSomething()は ITest 「としての」AClassのインスタンスを返します。
実装によってはITestを実装したBClassのインスタンスかもしれないっぺ。
例えばIEnumerableを返す場合、実体はArrayかもしれないしArrayListかもしれないし
ControlCollectionかもしれないということだっぺ。
21デフォルトの名無しさん:2007/05/17(木) 12:44:51
キモイ
22デフォルトの名無しさん:2007/05/17(木) 18:35:40
テキストボックスに設定したcontextMenuStripを
フォームに用意したボタンを押したら表示するとか
コードから実行することって出来ますか?
23デフォルトの名無しさん:2007/05/17(木) 18:37:13
できる
24デフォルトの名無しさん:2007/05/17(木) 19:13:03
>>4
わかりました。
ありがとうございます。
25デフォルトの名無しさん:2007/05/17(木) 19:53:09
>>23
どうやって?
26デフォルトの名無しさん:2007/05/17(木) 19:55:28
イベントを使って
27デフォルトの名無しさん:2007/05/17(木) 20:01:26
↑?
28デフォルトの名無しさん:2007/05/17(木) 20:15:57
Showメソッドのオーバーロード
29デフォルトの名無しさん:2007/05/17(木) 20:23:46
>>28
こんな感じ?
ボタンクリックのイベントハンドラに
int x = MousePosition.X;
int y = MousePosition.Y;
ContextMenuStrip.Show += delegate()
{
 contextMenuStrip1.Show(x, y);
};
30デフォルトの名無しさん:2007/05/17(木) 20:26:04
C#の基礎から教えろって事か?
31デフォルトの名無しさん:2007/05/17(木) 20:27:16
考えすぎwww

private void button1_Click( object sender, EventArgs e )
{
 this.contextMenuStrip1.Show( Control.MousePosition );
}
32デフォルトの名無しさん:2007/05/17(木) 20:37:57
>>31
できました!
なるほど、フィールド名はフォームにするのですね。
テキストボックスにしてどうにかしようとしてハマってしまっていました。
ありがとうございました。
33デフォルトの名無しさん:2007/05/17(木) 21:03:12
すいません。
byte [][] test;

byte [,] test;
とでは、どう違うのでしょうか。同じ気がするんですが。
34デフォルトの名無しさん:2007/05/17(木) 21:06:45
[][]は

aaaaaaaaaa
aaaaaaa
aaaaaaaaaaaaaaaa
aaaaaa
aaaaaaaaaaaaa

[,]は
aaaaaaaaaaaa
aaaaaaaaaaaa
aaaaaaaaaaaa
aaaaaaaaaaaa
aaaaaaaaaaaa
aaaaaaaaaaaa
35デフォルトの名無しさん:2007/05/17(木) 21:17:56
>>34
ありがとうございます。
謎が解けました。
36デフォルトの名無しさん:2007/05/17(木) 22:58:06
>>35
ほんとにわかったの?
すごいな。
ジャグ配列なんだけどな。
37デフォルトの名無しさん:2007/05/18(金) 00:22:04
なに、この小バカにした態度は
38デフォルトの名無しさん:2007/05/18(金) 00:26:11
いやほんとにすごいと思うよ。
回答書いた人もえらい。
39デフォルトの名無しさん:2007/05/18(金) 01:39:56
>>36
どちらもよく使うデータ構造なので大丈夫です。
C++やってたので、表記とデータ構造が一致せず、混乱してました。
40デフォルトの名無しさん:2007/05/18(金) 06:50:52
普通の配列と構造体で間に合っちゃうんで
ジャグ配列っていまいち使い方がわからないんだよな
まぁ漏れが単純な事しか考えないってことか・・・
41デフォルトの名無しさん:2007/05/18(金) 12:48:32
>>40
実はジャグ配列の方が要素の参照高速。

int[][] array = new int[]{
42デフォルトの名無しさん:2007/05/18(金) 12:49:59
書きかけでボタン押しちゃった

int[][] array = new {
 new int[n],
 new int[n],
.・・・

みたいな書き方が面倒でなくて、かつメモリよりも速度優先なら
ジャグ配列使った方がよかったり。
43デフォルトの名無しさん:2007/05/18(金) 19:28:02
ジャグ配列のほうが高速って、情報ソースある?

ジャグ配列の方が速度よりメモリ効率優先に見えるんだが
44デフォルトの名無しさん:2007/05/18(金) 19:33:39
ジャグ配列だと int** っぽくなるため int* のポインタがメモリをちょっとだけ食う
長方形配列だとインデクスの掛け算をするからポインタアクセスよりちょっと遅い
45デフォルトの名無しさん:2007/05/18(金) 19:34:10
俺もそう思う。

連続領域を確保するのにGCする必要のある場合とかは遅くなるんかな?
46デフォルトの名無しさん:2007/05/18(金) 19:35:23
>>44
掛け算よりはメモリを読むほうが遅いだろ。常識的に考えて。
47デフォルトの名無しさん:2007/05/18(金) 19:41:29
多次元配列のが遅くなる理由があるとすれば再配置にコストがかかるとかか
4843:2007/05/18(金) 20:11:25
アクセス速度だが、
ジャグ配列では、メモリのポインタ間接アクセスが二回
通常配列では、メモリのポインタ間接アクセス一回+インデックス計算の掛け算
通常、掛け算よりメモリアクセスの方が遅いので、ジャグ配列のほうがアクセス速度は遅いはず

データが疎で、ある程度大きな二次元配列を使うと、使用されない無駄なメモリ空間が大量に発生する
通常そういうデータを扱うときは二次元のリンクリストを使うのが定石なのだが、これはアクセス速度が遅くなる

で、ジャグ配列というのは、二次元配列と二次元リンクリストの折衷案に見えるんだがね

データの特性にも因るが、一般論としては
アクセス速度、配列>ジャグ配列>リンクリスト
メモリ効率、リンクリスト>ジャグ配列>配列

だと思うんだが、間違ってる?
49デフォルトの名無しさん:2007/05/18(金) 20:19:20
ふらっとスレに入り浸っている俺に聞かれても分かるわけないだろ
50デフォルトの名無しさん:2007/05/18(金) 20:24:11
x[i][j] の i, j ともにランダムアクセスだとジャグ配列は遅いけど、
行単位のアクセスならジャグ配列の方が早くない?
51デフォルトの名無しさん:2007/05/18(金) 20:24:15
つソース
int a = test1[2][2];
000000ba cmp dword ptr [ebx+4],2
000000be ja 000000C5
000000c0 call 792D3239
000000c5 mov eax,dword ptr [ebx+14h]
000000c8 cmp dword ptr [eax+4],2
000000cc ja 000000D3
000000ce call 792D3239
000000d3 mov eax,dword ptr [eax+10h]
000000d6 mov dword ptr [ebp-4Ch],eax

int b = test2[2,2];
000000d9 mov eax,2
000000de mov edx,2
000000e3 mov ecx,dword ptr [ebp-48h]
000000e6 sub eax,dword ptr [ecx+10h]
000000e9 cmp eax,dword ptr [ecx+8]
000000ec jb 000000F3
000000ee call 792D3239
000000f3 sub edx,dword ptr [ecx+14h]
000000f6 cmp edx,dword ptr [ecx+0Ch]
000000f9 jb 00000100
000000fb call 792D3239
00000100 imul eax,dword ptr [ecx+0Ch]
00000104 add eax,edx
00000106 mov edi,dword ptr [ecx+eax*4+18h]
0000010a mov dword ptr [ebp-50h],edi
52デフォルトの名無しさん:2007/05/18(金) 20:25:44
なんの比較にもなってないがな。
53デフォルトの名無しさん:2007/05/18(金) 20:26:44
ところで,話と関係ないんだけど
多次元配列の要素にポインタを使って直接アクセスするにはどうやればいいの?
54デフォルトの名無しさん:2007/05/18(金) 20:28:28
まぁパソコンのCPU周りなら一般的にメモリーアクセスキャッシュでも
確実にインデックスレジスターのかけ算の方が早いだろうね
.netがどうなってるかわからんけど
55デフォルトの名無しさん:2007/05/18(金) 20:28:40
>>52
要素の参照が高速という話だからいいんじゃんない?
56デフォルトの名無しさん:2007/05/18(金) 20:34:29
>>53
普通にピン刺せばいいんじゃないの?

unsafe {
int[,] a = new int[2, 2] { { 0, 1 }, { 2, 3 } };
fixed(int* p = a) {
Console.WriteLine(*(p+2));
}
}
57デフォルトの名無しさん:2007/05/18(金) 20:36:08
見る限りジャグ配列のほうが掛け算もなく、メモリ参照も少ないな。
58デフォルトの名無しさん:2007/05/18(金) 20:37:06
>>51
へーーー、そんな風に実行コードに落ちるんだ
かなりごついプログラム作ったとき効いてきそうだけど
フレームワークがコード解析する方が時間かかるきもする
5943:2007/05/18(金) 20:40:15
>>51
配列のサイズとかメモリから読み出してるんだね
C言語とかなら通常配列のほうが早いだろうけど
C#ならジャグ配列のほうが早いようだ
60デフォルトの名無しさん:2007/05/18(金) 20:41:31
>>59
つうかCなら配列でなくポインタ使うっす
61デフォルトの名無しさん:2007/05/18(金) 20:45:28
古いメモに書いてあったこと

bool[,] < bool[][]

int[,] > int[][]
62デフォルトの名無しさん:2007/05/18(金) 20:45:58
最近は、型サイズ付インデックスレジスタもあるみたいだし、最適化してたら、また変わるかもね。
あるいは、unsafeにすれば・・・
63デフォルトの名無しさん:2007/05/18(金) 20:56:04
まぁ売り物アプリみたいにどでかいメモリーエリアアクセスするんならかなり変わるけど
初心者が作る程度なら、それほど変わらない気がするな
それよりパソコンで一番遅くて気になるのは表示
まぁダイレクトなんちゃら使えば早いらしいけど
64デフォルトの名無しさん:2007/05/18(金) 21:01:34
.NETの公式解説書には1次元だと専用のIL命令が使えて、多次元だと使えないらしい。
ジャグ配列だと専用IL命令が使えるから1次元配列とパフォーマンスが同じになるって書いてあった。
65デフォルトの名無しさん:2007/05/18(金) 21:03:47
そのようだな。
ildasmするとすごい汚いことになってる。
66デフォルトの名無しさん:2007/05/18(金) 23:25:30
そもそもジャグ配列と多次元配列って使う場面が違うと思うんだけど。

ジャグ配列、っていう直観的でない言葉を使うから言葉に惑わされるんじゃないの?
ジャグ配列なんていうけど、要はただの配列の配列でっせ。
67デフォルトの名無しさん:2007/05/18(金) 23:34:23
多次元配列は滅ぼしていきたいというのが設計者の意向のように見える
一応残しておきましたけどみたいな
68デフォルトの名無しさん:2007/05/18(金) 23:38:43
>>67
そんなわけないでしょw
チミがメモリ上にデータが配置されるイメージを持ってないからそう思うだけ
69デフォルトの名無しさん:2007/05/18(金) 23:46:19
多次元配列は C とかにはないっしょ
70デフォルトの名無しさん:2007/05/18(金) 23:47:59
あるがな。
71デフォルトの名無しさん:2007/05/18(金) 23:51:21
>>68
それとライブラリのサポートの間に何の関係が?
72デフォルトの名無しさん:2007/05/18(金) 23:52:55
話題のレベルが一気に下がったw
73デフォルトの名無しさん:2007/05/18(金) 23:54:40
C の場合は配列の配列だろ
74デフォルトの名無しさん:2007/05/19(土) 00:03:18
int square[][2] = { { 0, 1 }, { 2, 3 } };
int *jagged[] = { (int[]) { 0, 1 }, (int[]) { 2, 3 } };
75デフォルトの名無しさん:2007/05/19(土) 00:04:17
だから「配列の配列」といってもcと.NETじゃ意味が違うんだよ。
cの意味で「配列の配列」というなら.NETの多次元配列だって配列の配列だ
76デフォルトの名無しさん:2007/05/19(土) 00:16:39
2次元配列とジャグ配列で、初期化は2*2だと後者のほうが5倍以上速いみたいだが、16*16だと前者のほうが1.3倍くらい早くなる。
16*16の配列へのランダムアクセスだと2次元配列のほうが速かった。5%くらいだが。
77デフォルトの名無しさん:2007/05/19(土) 00:16:45
ええぃもうええわ!
どっちにしてもお前らが作るようなアプリに影響なんてないだろうが!
78デフォルトの名無しさん:2007/05/19(土) 00:18:04
>>76
だから用途が違うものをそもそも比べるのがおかしいって
79デフォルトの名無しさん:2007/05/19(土) 00:18:27
>>75
意味はいっしょ。。
cには配列の配列も表現できるし、多次元配列もある。
int a[2][2]; //cの多次元配列
int **b; //cのジャグ配列というかポインタのポインタ
80デフォルトの名無しさん:2007/05/19(土) 00:19:00
>>78
同じ用途に使う場合もあるだろうが。
81デフォルトの名無しさん:2007/05/19(土) 00:26:24
>>79
C言語を良く知らないのなら、しったかしないほうがいい
82デフォルトの名無しさん:2007/05/19(土) 00:27:13

大きくは間違ってはないと思うが。
83デフォルトの名無しさん:2007/05/19(土) 00:27:48
>>81
よく知ってるよ。指摘できないなら黙ってたほうがいいよ。
84デフォルトの名無しさん:2007/05/19(土) 00:29:51
C の規格票で多次元配列は配列の配列と定義しているから、
int a[2][2]; は C の二次元配列だ。
85デフォルトの名無しさん:2007/05/19(土) 00:34:03
いや、>>79の言ってることは正しいけど最初の一行だけがおかしい。
ドトネトだと
int **b;
こっちが「配列の配列」

>>84も書いてるけど、cの場合は普通
int a[2][2];
こっちの方を「配列の配列」という言い方をするんじゃないかな?
86デフォルトの名無しさん:2007/05/19(土) 00:37:24
Cでは「配列の配列」が長方形配列で、「配列ポインタの配列」がジャグ配列
C#では「多次元配列」が長方形配列で、「配列の配列」がジャグ配列。

用語の違いだけで、>>79>>85も間違っていないように思われる。
87デフォルトの名無しさん:2007/05/19(土) 00:47:28
そうゆうことか。勘違いしてた。
88デフォルトの名無しさん:2007/05/19(土) 00:49:54
Cでポインタのポインタを使えば、ジャグ配列のようなことは出来るが
出来るであって、イコールじゃあるまい
89デフォルトの名無しさん:2007/05/19(土) 01:09:43
ナニをもってイコールじゃない、というのかよく分からないが
少なくともデータ構造的にはイコールだよ。
90デフォルトの名無しさん:2007/05/19(土) 01:28:05
おまいらのせいで「配」って字が変に見えてきたぞ
91デフォルトの名無しさん:2007/05/19(土) 01:28:12
>>85
確かK&Rの配列の説明だと[][]と**は同じものだと書かれてなかったっけか?
もうK&Rなんか、どこに置いたか忘れちまったくらい昔なんで怪しいんだが。
・・・文字列配列の項とごっちゃかな?


てか、多次元配列なんてオーバーフローが怖くてこの商売始めてこのかた
使ったことないな。
92デフォルトの名無しさん:2007/05/19(土) 01:31:01
>>91
> 確かK&Rの配列の説明だと[][]と**は同じものだと書かれてなかったっけか?
そんなわけがなかろう・・・。
お前は酔っているのか。それとも本当に無知なのか。
93デフォルトの名無しさん:2007/05/19(土) 01:41:21
**はただのポインタのポインタ。ジャグとは限らん。
94デフォルトの名無しさん:2007/05/19(土) 01:44:32
もうやめない?この話・・・
95デフォルトの名無しさん:2007/05/19(土) 01:44:42
>>89 ナニももってイコールといってるのかよく分からないが
>>51を見る限り、C# の二次元ジャグ配列はこんな感じのデータ構造だぞ
typedef struct {
int nandaro;
int size;
int arrray[size];
} ar01;

typedef struct {
int nandaro;
int size;
int kokonimo;
ar01 *arrray[size];
} JagAR;
※C言語風に書いただけであくまで概念

むしろ、Delphiの文字列型に近いメモリ管理してる感じだね
96デフォルトの名無しさん:2007/05/19(土) 01:50:37
cでは[][]はただの2次元配列。
a[x][y]は a+x+x*の要素数*yのポインタの指す位置をみてるだけ。
97デフォルトの名無しさん:2007/05/19(土) 01:55:25
>>95
Cは一次元だって境界チェックはないんだから、それを言い出すのはおかしいだろう。
98デフォルトの名無しさん:2007/05/19(土) 02:38:25
せめて↓でやるってのはどう?
http://pc11.2ch.net/test/read.cgi/tech/1178639189/
99デフォルトの名無しさん:2007/05/19(土) 02:42:20
別にかまわんだろ。
もう終わる。
100デフォルトの名無しさん:2007/05/19(土) 07:25:48
座標変換の時といい、キチガイ多いね
101デフォルトの名無しさん:2007/05/19(土) 13:49:53
使い分けたら意図がはっきりする,でいいだろもう
102デフォルトの名無しさん:2007/05/19(土) 19:35:22
座標変換はキチガイだったけど
配列はためになったぞ
103デフォルトの名無しさん:2007/05/19(土) 21:14:30
どちらも議論も一方に正しいことを言ってる人間がいて他方で頓珍漢なこと言ってる奴がいるのに
片方がキチガイで片方がためになるって不思議な感覚だな。

まあ個人的には、演算精度の話も配列の構造の話も学部一年生レベルの話なわけで、
どちらも恥ずかしげもなく「ためになる」とは言いにくい類の話だとは思う。
104デフォルトの名無しさん:2007/05/19(土) 21:22:21
>>103
そーいった決めつけをする藻前もかなりの馬鹿、何が誰に為になるかわからんもんだよ
105デフォルトの名無しさん:2007/05/19(土) 21:36:36
C++だと想定どおりバイナリ吐いてくれるけど、今回の議論みたいに想定外のバイナリ吐かれると、
今までの経験が通用しなくなるな。ILを一から勉強しとくかな。
106デフォルトの名無しさん:2007/05/20(日) 00:50:45
>>100
座標の話ではないのですが
簡単な2DCADを作ってみようと思います

んで回転させる場合、やっぱりサインコサインタンジェントなのですか?

いいサイトがあったら教えてくだちい
107デフォルトの名無しさん:2007/05/20(日) 01:04:40
いいサイトっていうか、二次元の回転行列なら高校数学でやってるはずだろう。
108デフォルトの名無しさん:2007/05/20(日) 01:07:14
>>107
すみません。。。。。リアル中卒なんで
109デフォルトの名無しさん:2007/05/20(日) 01:46:59
数学は定義と定理の積み重ねだから、ピンポイントで調べても理解できないんじゃないかな。
本屋で高校の数学の参考書を買うか、NHK教育で数学番組みたほうがいいな。
110デフォルトの名無しさん:2007/05/20(日) 07:07:58
CADみたいな図形をグリグリ動かすソフト作るんならC#より
C++使った方が良いと思うが・・・
111デフォルトの名無しさん:2007/05/20(日) 11:50:52
むしろ時代を先取りしてWPFで描画すれば。
本当に時代が来るのかは怪しいがw
112デフォルトの名無しさん:2007/05/20(日) 12:10:09
CAD作る暇があったら、大検でも受けて、大学行け。
113デフォルトの名無しさん:2007/05/20(日) 12:10:53
KeyDownからKeyUpまでの間、
フォームのサイズを変化させ続けるプログラムを作りたいのですが
一番簡単な作り方はどんなのですか?
114デフォルトの名無しさん:2007/05/20(日) 12:11:39
KeyDownでタイマー動かしてKeyUpで止めりゃいいじゃない。
115デフォルトの名無しさん:2007/05/20(日) 12:12:57
>>114
タイマーですか、わかりました。
調べてみます。
ありがとうございます。
116デフォルトの名無しさん:2007/05/20(日) 12:13:41
何その斬新なインターフェイス
117デフォルトの名無しさん:2007/05/20(日) 12:25:41
MS推奨のインターフェイスにしたほうがいいんじゃないの?
それなら、Formに既に実装されるし。
alt+スペース、sの後、カーソルキーでサイズ変更できる。
118デフォルトの名無しさん:2007/05/20(日) 12:30:18
>>117
もっともな話なんだけど、しかし実際問題そんな操作はパソヲタ的な人間しか
覚えられないよ。

まあしかし、一見快適そうに思えるUIの改良が、実はイライラをもたらす改悪でしかない、
っていうのはありがちな話で、>>113もその類にしか思えないな。
119デフォルトの名無しさん:2007/05/20(日) 12:36:14
Excel等のメジャーアプリに合わせるのが後々のため。
アプリごとに異なるとショートカットなんかすぐ忘れてしまう。
120デフォルトの名無しさん:2007/05/20(日) 17:39:49
一般的にはマウスで図形を選択した後、矢印キーで移動
シフト+矢印キーでサイズ変更だな、あとはマウス操作で移動やらサイズ変更
121デフォルトの名無しさん:2007/05/20(日) 19:51:04
Formの話でどうして図形が出てくるの?
122デフォルトの名無しさん:2007/05/20(日) 19:54:19
CADとごっちゃになってるんだろう
123デフォルトの名無しさん:2007/05/20(日) 20:12:16
質問です。
あるインターフェースを積んだDLLがあって、このインターフェースを積んだクラスを
以下のようにして使おうと思ったのですが、

ConstructorInfo ci;
インターフェース temp = (インターフェース)ci.Invoke(BindingFlags.CreateInstance, null, null, null);

\プログラム.exe
\インターフェース.DLL
\Directory\クラス.DLL
\Directory\インターフェース.DLL

とファイルが配置されていた場合、InvalidCastExceptionが発生してしまい、キャストできなくて
困っています。
参照している物のパスが違うだけなのに、なぜキャストできなくなってしまうのでしょうか?
124デフォルトの名無しさん:2007/05/20(日) 20:38:10
>>121-122
頭悪いなw
120はそう変なことは言ってない。
四角い領域のサイズを変更する、という抽象水準ではなにも変わらないからな。
125デフォルトの名無しさん:2007/05/20(日) 20:41:02
>>107->>112

ありがとうございます!
回転行列はなんとか理解できました。三角関数で検算しても合ってるから
多分大丈夫だと思いますw

でも、数学って判った時は本当に面白い!!!!って思いますね
126デフォルトの名無しさん:2007/05/20(日) 20:41:03
>>123
日本語書こう
127デフォルトの名無しさん:2007/05/20(日) 21:01:37
>>124
日本語でおk
128デフォルトの名無しさん:2007/05/20(日) 21:10:39
>>124
それなら>>120は乞われてもいないのにいきなり語りだす変人ってことなのか?
129デフォルトの名無しさん:2007/05/20(日) 21:25:07
乞われるまで喋っちゃだめなんて我慢できん
130デフォルトの名無しさん:2007/05/20(日) 21:27:07
Do nothing till you hear from me.
131デフォルトの名無しさん:2007/05/20(日) 22:01:51
>>125
三角関数で検算って何なの
回転行列自体三角関数使ってるだろ
132デフォルトの名無しさん:2007/05/20(日) 22:14:04
>>125
なんか分かっててネタで書いてる気がするけど、
本当は座標系の回転なんてGDI+組み込みの機能でできるんだけどね。
107はネタというか、話の取っ掛かりを作ったつもりだったんだが。
ああ書けば誰か一人ぐらい突っ込む奴がいるだろうと思って。

精度的にも二次元のCADならまず問題にならんと思うし。
μmオーダーで設計することを意図するのなら別だろうけど、そんなの普通の用途じゃありえんよね。
133デフォルトの名無しさん:2007/05/20(日) 23:23:16
私は、VisualC#2005ExpressEditionで初歩から勉強中なのですが、
これでGUIのソフトを作って公開したとすると、利用者には別途に
.NET Frameworkのインストールが必要になると聞いています。
しかし、巷では「このソフトには.NET Frameworkが必要です」のような文言はほとんど見かけません。

これはVisualStudio2005でソフトを作っている人がほとんどいないということでしょうか?
皆さんはどのような環境でC#プログラムを作っているのでしょうか?
134デフォルトの名無しさん:2007/05/20(日) 23:26:52
いまどきのパソコンには.NetFrameworkなんてもともと入ってるし。
135133:2007/05/20(日) 23:42:07
>>134
そうだったんですか、杞憂だったようです。
136デフォルトの名無しさん:2007/05/21(月) 00:14:07
>μmオーダー

ネタ投入しようとしても無駄だよ。
137デフォルトの名無しさん:2007/05/21(月) 00:35:20
0.1mm = 100μm
よく使うサイズですよ。

俺だったら1μm = 1.0f とするんだがな。
138デフォルトの名無しさん:2007/05/21(月) 02:26:22
>>135
ちょいまち。
XPのSP2では標準では.Net1.1しか入ってないと思う。> 出典 Wikipedia
Vista なら3.0まで入っているはずだが人柱はゴメンだとSP2あたりが出るまでXPから買い換えない人も多い。

VisualStudio2005は 2.0 用なので、何も考えないで作って配布した場合、やはり別途WindowsUpdateで2.0を
入れる必要が出てくる。(もちろんダウンロード版で入れてもいい)
これは、ちょっと調べれば分かることなので一々書いていないか、もしくは1.1をターゲットに作ったかだと思う。

ということで、ダウンロードの解説あたりに.Net2.0必要と書いてあるのは親切だと思う。
139デフォルトの名無しさん:2007/05/21(月) 02:39:04
標準で1.1入ってるのは2003じゃなかったか
XPのSPじゃ入らないでしょ
140デフォルトの名無しさん:2007/05/21(月) 09:35:03
XPのCDに同梱されているだけだね、1.1は。
ただメーカー製の場合だと初めから「1.1がインストール」されているかも。
ダウンロードのページに2.0が必要な旨と.NETのダウンロードページへのリンクを貼っておくといいよ。
自分の場合はそうしている。

それからVisual Studio 2005を使わなくても.NET2.0入れてそのコンパイラ(csc.exe)でコンパイルしたら実行には2.0が必要だよ。
141デフォルトの名無しさん:2007/05/21(月) 22:37:33
.NET FrameworkはJavaと違って、読み込まれたクラスはすべてすぐJITでコンパイルされるのですか?
142デフォルトの名無しさん:2007/05/21(月) 22:39:30
違うよ
143デフォルトの名無しさん:2007/05/21(月) 22:40:08
javaをちょっと触っただけでC#に移ってきた初心者なんですが、
C#にはjavaのループ用ラベルみたいな機能ってありますか?

2重ループの中でbreak文を使ったときに
内側のループを抜け出すか外側のループを抜け出すかを
それぞれ記述したいので、一番推奨される方法を教えてください。
144デフォルトの名無しさん:2007/05/21(月) 22:42:00
breakは一段階しか抜けないからgotoを使う。
145デフォルトの名無しさん:2007/05/21(月) 22:43:03
>>144
了解です。ごーつー使います。
ありがとうございます。
146デフォルトの名無しさん:2007/05/21(月) 22:46:20
gotoか メソッドにして return
147デフォルトの名無しさん:2007/05/21(月) 23:07:25
pictureBox上にマウスが乗ったときに、
常にマウスの位置を中心とした十字線を描画しようとしているのですが、
pictureBoxのMouseMoveイベントで

Graphics g = Graphics.FromImage(pictureBox1.Image);

Pen PointerPen = new Pen(Color.White);
g.DrawLine(PointerPen, 0, mousePoint.Y, pictureBox1.Width, mousePoint.Y);
g.Dispose();

こんな感じに書いてやるとCPU使用率が100%近くなってしまうのですが、他に良い方法はあるのでしょうか?
148デフォルトの名無しさん:2007/05/21(月) 23:14:45
こんな感じ、じゃなくてやってることをマンマ書けよ
そんなセンスだから問題が解決できないんとちゃうの?
149デフォルトの名無しさん:2007/05/21(月) 23:24:20
>>148
失礼しました。
下記のように記述してます。

private void DrawCrossHairs(Point mousePoint)
{
pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics g = Graphics.FromImage(pictureBox1.Image);

Pen PointerPen = new Pen(Color.White);
g.DrawLine(PointerPen, 0, mousePoint.Y, pictureBox1.Width, mousePoint.Y);
g.DrawLine(PointerPen, mousePoint.X, 0, mousePoint.X, pictureBox1.Height);
g.Dispose();
}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
DrawCrossHairs(e.Location);
}
150デフォルトの名無しさん:2007/05/21(月) 23:31:41
そりゃあマウスポインタが移動する毎にビットマップ作ってたらマズイんじゃない?w

一旦書いた線を消去する方法が分からない、ということだろうけど
そんな姑息な方法じゃなく正攻法でやることを考えないとダメだよ
151デフォルトの名無しさん:2007/05/21(月) 23:36:05
正攻法って?
152デフォルトの名無しさん:2007/05/21(月) 23:45:22
1. 消したい部分だけ無効化して再描画

 または、

2. 線を書く前に書く部分の状態をバックアップしといて、
線を消すときにはそのバックアップを復元する
153デフォルトの名無しさん:2007/05/21(月) 23:53:18
ですよね
154デフォルトの名無しさん:2007/05/21(月) 23:53:56
MSX世代。
155デフォルトの名無しさん:2007/05/22(火) 00:15:12
>>152
ありがとうございます。
無効化とか線を消すってのの意味がよくわかんないので、もうちょっと調べてみます。
156デフォルトの名無しさん:2007/05/22(火) 00:20:45
正攻法w回答にセンスが無いなぁ。
157デフォルトの名無しさん:2007/05/22(火) 00:24:29
>>156による華麗なる回答をどうぞ
158デフォルトの名無しさん:2007/05/22(火) 00:25:24
>>157による華麗なる回答をどうぞ
159デフォルトの名無しさん:2007/05/22(火) 00:32:50
>>155
何だ、線を消すのが面倒だから毎回ビットマップ作ってそれに描画してたんじゃないんだw
むしろWinのグラフィックのお作法を本当に何も知らないんだな。

Picturebox(に限らないけど)描画するときには、Imageプロパティに設定した
イメージに描画するんじゃなくてPictureboxそのものに描画するんだよ。

つーか、そのぐらいのこと勉強してからコード書くだろう普通。
なーんも理解しないうちからこんなことで質問するって、大げさじゃなく頭オカシイと思うぞ
160デフォルトの名無しさん:2007/05/22(火) 00:37:26
おまいら仲良く汁。

>>159
>>1
161デフォルトの名無しさん:2007/05/22(火) 00:42:34
いや低レベルなのはかまわないが、最低限やるべきことやってないやる気の無さは
低レベルかどうかとはまた別の問題だろう
162デフォルトの名無しさん:2007/05/22(火) 00:45:14
>>159>>161
君はこのスレに居るべきじゃない人間だね。
もっとふさわしいスレにお行き。
163デフォルトの名無しさん:2007/05/22(火) 00:58:54
>>161
> 最低限やるべきことやってない

それは、その最低限やるべきことを既に知っているものの言い分だぞ。
164デフォルトの名無しさん:2007/05/22(火) 01:00:53
ならばロクに理解してもいない技術に手を出す前に、
まず「最低限なにを知るべきか」を人に聞くのも一つの手だろう。
そういうことならこのスレの趣旨にあってると思うし、俺も噛み付かないよ
165デフォルトの名無しさん:2007/05/22(火) 01:04:12
とりあえずおまえは、最低限>>1を知るべきだな。
166デフォルトの名無しさん:2007/05/22(火) 01:08:10
っていうか、繰り返しになるけど、たとえばdobonとかにある簡単なサンプルに目を通すぐらいの
努力はやっているかどうか、というのはレベルが低いかどうかとは完全に別問題だろやはり

サンプルみ目を通したがここは理解できないから教えてくれ、
って質問なら文句言わないよ。

何もしないでできん・わからん、ってそりゃ当たり前だろ、って言ってんの。
167デフォルトの名無しさん:2007/05/22(火) 01:14:55
>>166
うんうん、そうだねそうだね
わかったから、これ以上荒さんでくれ
168デフォルトの名無しさん:2007/05/22(火) 01:14:55
ま、みんなこれからは穏便に行こうや。
169デフォルトの名無しさん:2007/05/22(火) 01:18:28
>>166
それができたらこのスレは必要ない
170デフォルトの名無しさん:2007/05/22(火) 01:22:57
>>169
本気か?
それを言うなら、それすらできない人間ならこんなスレで何きいても所詮無駄じゃないのか?
171デフォルトの名無しさん:2007/05/22(火) 01:25:51
そうだね。
よく考えたら君が正しい。
俺が間違ってたよ。
172デフォルトの名無しさん:2007/05/22(火) 02:00:12
ガキ大杉
173デフォルトの名無しさん:2007/05/22(火) 03:49:58
どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド
174デフォルトの名無しさん:2007/05/22(火) 07:34:52
質問スレに常駐しているとたまに>>170みたくなるから恐ろしいな。
下らない質問にイライラするために居続けるなんて無駄だよね。
175デフォルトの名無しさん:2007/05/22(火) 08:05:11
取り敢えず、参考になりそうな、サイトを知ってるんなら提示して、
それでもわかんなかったら、またいらっしゃいぐらい書けないのかなぁ。

どうしてわかんないんだ?そんな事も知らんのか?
っておごり高ぶる人は大成しないよ。
176デフォルトの名無しさん:2007/05/22(火) 11:03:45
pictureBoxの中のときだけ、マウスカーソルを十字カーソルにするだけでいいんじゃないの?
177デフォルトの名無しさん:2007/05/22(火) 11:28:39
CADとかペイントでも作ってるのかな?
PictureBoxの端に目盛りでもあるんじゃないのかな。
だとすれば十字線が端まで伸びてると便利だと思うけど。
178デフォルトの名無しさん:2007/05/22(火) 11:44:45
自分の書いたコードの処理の負荷が想像できない人っているよね。かわいそう。
179デフォルトの名無しさん:2007/05/22(火) 11:49:13
それは経験を積めばある程度わかるようになるよ。
そんなことより君は初心者をバカにするためにわざわざこのスレに来てるのか?
180デフォルトの名無しさん:2007/05/22(火) 11:55:57
いえ、励ましたいのです。なぜなら私も初心者だから。
181デフォルトの名無しさん:2007/05/22(火) 16:24:45
小学生が大人ぶりたいから幼稚園にきたら
先生に叱られれて僕も子供ですから、と開き直った状況
182デフォルトの名無しさん:2007/05/22(火) 17:00:36
性格悪いよ、君たち。
183デフォルトの名無しさん:2007/05/22(火) 17:03:38
すいません,ファイルの読み取りで質問させて下さい.

private void read()
{
FileInfo theSourceFile = new FileInfo("data.dat");
StreamReader sr = theSourceFile.OpenText();

while (sr.ReadLine() != null)
{
line.Add(sr.ReadLine());
}
}
で,下記データファイルを読み込んだところ,
a 1 0
a 2 2.0
a 3 4.0
a 4 6.0
a 5 8.0

b 1 2 1 2
b 2 2 2 3
b 3 2 3 4
b 4 2 4 5

lineには a 2 2.0,a 4 6.0,空白,b 2 2 2 3,b 4 2 4 5と一行とばしにしか入力されませんでした.
なぜでしょうか・・・
184デフォルトの名無しさん:2007/05/22(火) 17:07:27
while (sr.ReadLine() != null) // <- 一回読み捨てて、
{
line.Add(sr.ReadLine()); // <- 次の一行を読んでる
}
185183:2007/05/22(火) 17:43:23
ありがとうございました.do whileで書き換えて解決しました.
186デフォルトの名無しさん:2007/05/22(火) 18:20:14
こういうやり方もある
string text;
while ((text = sr.ReadLine()) != null)
{
line.Add(text);
}
187デフォルトの名無しさん:2007/05/22(火) 22:38:18
すげぇ!
188デフォルトの名無しさん:2007/05/22(火) 22:45:06
MSDNの使用例ほとんどそのまんまなのに、驚くなよ。
189デフォルトの名無しさん:2007/05/22(火) 22:51:47
msdnくらい読めよ。
ttp://msdn2.microsoft.com/ja-jp/library/db5x7c0d(VS.80).aspx
と書こうと思ったら先にかかれてた…

ほかにも StreamReader.ReadToEnd とかいろいろあるよ。
190デフォルトの名無しさん:2007/05/23(水) 04:38:31
メインフォームだけを半透明にしたいのですが、どうしたらいいのでしょうか?

上に乗っているボタンとかは半透明にしたくないのですが、
this.Opacity = 0.5f
とかにすると全部が半透明になってしまいます。
191デフォルトの名無しさん:2007/05/23(水) 06:31:33
初心者さんのやることは凄いなぁ
遊びなら良いが、言語以前に論理的思考ができない香具師はこの手の仕事は
やらない方がいいな、作るモノが全部最終的につじつまが合わなくなって
ノイローゼとか鬱になる
192デフォルトの名無しさん:2007/05/23(水) 07:57:35
またおまえか。
193デフォルトの名無しさん:2007/05/23(水) 08:04:39
>>190
Opacityの型はdoubleなのに、なんで0.5fって書くの?
194デフォルトの名無しさん:2007/05/23(水) 08:44:30
>>190
設定ひとつでできるようなスマートな方法はない。
スマートでない方法なら、キャプションなしのボタンだけのフォームを別に作って、
半透明フォームの決まった位置にそのフォームが常に表示されるようにプログラムする。
195デフォルトの名無しさん:2007/05/23(水) 10:29:01
>>190
VistaでAeroだGo
196デフォルトの名無しさん:2007/05/23(水) 17:12:25
すいません.配列int[] hoge = new int[8]の各成分を
Console.Writeline("{0},{1},{2},....",hoge[0],hoge[1],hoge[2],....)とむりやり横に表示させています.

配列の成分を横に並べて表示させるとき,もっとスマートなやり方はないでしょうか?
197デフォルトの名無しさん:2007/05/23(水) 18:04:27
forだのforeachだので回して
stringだのStringBuilderだのに連結して
それを表示したら?
198デフォルトの名無しさん:2007/05/23(水) 18:24:52
for(i=0;i<hoge.Length-1;i++)
  Console.Write(hoge[i] + ",");
Console.WriteLine(hoge[hoge.Length-1]);
>>197の方が効率は良そうだけど

199デフォルトの名無しさん:2007/05/23(水) 19:08:10
Joinでええやん
200デフォルトの名無しさん:2007/05/23(水) 19:09:14
これでいんじゃない
string.Join(",", Array.ConvertAll<int, string>(hoge, delegate(int value){return value.ToString();}));
201デフォルトの名無しさん:2007/05/23(水) 20:05:02
使いづれー。
202デフォルトの名無しさん:2007/05/23(水) 20:51:13
C#2.0の新機能サンプルみたいだな
203デフォルトの名無しさん:2007/05/24(木) 00:25:39
>string.Join(",", Array.ConvertAll<int, string>(hoge, delegate(int value){return value.ToString();}));
何のために匿名デリゲートなんか使ってるんだ?

string.Join(",", Array.ConvertAll<int, string>(hoge, Convert.ToString));
でいいやん。
204デフォルトの名無しさん:2007/05/24(木) 02:03:26
なにがなんでも匿名を使いたいんだよぉ
205デフォルトの名無しさん:2007/05/24(木) 11:15:15
メソッドからデリゲートへの暗黙の変換も 2.0 の機能か。
206デフォルトの名無しさん:2007/05/24(木) 15:45:14
すいません、質問です。
Dictionary<ClassA, ClassB> dic1; 
Dictionary<ClassB, ClassA> dic2;
dic1.Add(a,b);
dic2.Add(b,a);
のように1対1のどちらからでも検索できるようなデータがあるのですが、
BinaryFormatterを使ってdic1とdic2をシリアル化して、その後、デシリアル化すると、
追加したデータaとbが、dic1とdic2で異なるインスタンスが生成されてしまいます。
これの回避方法ってありますでしょうか。
207デフォルトの名無しさん:2007/05/24(木) 15:54:51
>>206
dic1とdic2を同時にシリアライズしてみたら?
たとえば object[] objs = new object[]{ dic1, dic2 }; をシリアライズするみたいな感じで。
208デフォルトの名無しさん:2007/05/24(木) 16:32:10
>>207
ありがとうこざいます。その方法でできました。
209デフォルトの名無しさん:2007/05/24(木) 23:40:36
四角形の領域内チェックは
Rectangle.Contains とかあるのですが
多角形の領域内チェックってあるんでしょうか?
計算方法は分かりますが、もしあるならそっちを使いたいので・・・・
210デフォルトの名無しさん:2007/05/24(木) 23:42:11
リージョン使うんじゃねーか?
211デフォルトの名無しさん:2007/05/24(木) 23:55:08
質問させて下さい。

あるbyte配列の中から特定の文字列を取得したいと思っています。
『Encoding.Default.GetString(byte配列)』でbyte配列を文字列に変換し、
文字列の中を正規表現で検索しようとしたのですが、
\x00〜\x80までしか検索にかからず、\x81以上の値は無視されるようです。
文字列に変換した物をbyte配列に戻すと\x81以上の値は保持されているのですが、
\x81以上の値を取得する方法はないでしょうか?
『\xFD 4byteの適当な値 \xFD』の文字列が抜き出せたらと思っています。

もう1つ、byte配列もしくはバイナリファイルの中から特定の文字列を検索する方法はありますか?
1つめの物を含め1byteづつ判定しつつ繰り返すことしか思い浮かびません、、、
212デフォルトの名無しさん:2007/05/24(木) 23:59:45
それはバイト列であって文字列じゃないだろ。

普通に
>1つめの物を含め1byteづつ判定しつつ繰り返す
でいいよ。
213デフォルトの名無しさん:2007/05/25(金) 00:03:48
>>212
ナニ言ってのお宅

>>211
まずさまざまある文字のエンコーディングの違いについて調べた方がいいよ。
それを知らないことには話にならない。
214デフォルトの名無しさん:2007/05/25(金) 00:09:42
>>310-320
日本語も満足に話せない連中がごろごろと
215デフォルトの名無しさん:2007/05/25(金) 00:12:00
アンカも満足に(ry
216デフォルトの名無しさん:2007/05/25(金) 00:12:14
エンコーディングのちがいとか以前の問題だろ。
217デフォルトの名無しさん:2007/05/25(金) 00:32:03
>>210
ありがとうございます
218デフォルトの名無しさん:2007/05/25(金) 02:10:02
>>214
>>215
(・∀・)ジサクジエンデシタ
219デフォルトの名無しさん:2007/05/25(金) 02:44:16
>\x81以上の値を取得する方法はないでしょうか?
エンコードせずに、バイト配列から取得するしかないです。

>もう1つ、byte配列もしくはバイナリファイルの中から特定の文字列を検索する方法はありますか?
>1つめの物を含め1byteづつ判定しつつ繰り返すことしか思い浮かびません、、、
それで十分です。
220デフォルトの名無しさん:2007/05/25(金) 03:01:06
クマー





221211:2007/05/25(金) 07:22:38
改めて調べてみました。
ASCIIは7bitまでしかなく、ShiftJISで8bit目を使っているんですね。
更に正規表現の所のヘルプをよく見てみると、ASCII文字だけと。
>>『16 進数 (2 桁) で表される ASCII 文字と一致します。』

Unicodeの文字表までは見つかりませんでしたが、
『\u0000』の形式でも検索出来ないので、Unicodeでも割り当てられてないんでしょうね。
少し残念ですが、どうもありがとうございました。
222デフォルトの名無しさん:2007/05/25(金) 19:49:54
なに言ってるかサッパリわからんが
検索文字列をByte配列にエンコードして検索すりゃいいはなしだろ
223211:2007/05/25(金) 21:29:48
>>222
正直諦めてましたが、ヒントをくれたおかげで解決出来ました。
正規表現の中で文字コードを指定して検索しようとしてたのを、
検索したい文字コードを一度stringに変換することで検索出来るようになりました。
何故そうなるのか理解は出来ていませんが、とりあえず満足です。

>>212
確かにバイト配列であって文字列ではなかったですね、、
上で解決するまで指摘されてることが理解出来なかった馬鹿者でした (´・ω・`)
224デフォルトの名無しさん:2007/05/26(土) 11:39:46
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct test
{
  public byte A;
  public byte B;
  public ushort C;
}

のような構造体をbyte[]に高速に変換する方法はありますでしょうか?
225デフォルトの名無しさん:2007/05/26(土) 12:16:43
StructLayout属性でLayoutKind.Explicitを指定して、
バイト配列を構造体の他のメンバーにオーバーラップするように配置すればいいんじゃない?

ちょうどcの共用体のイメージだよ。
"c# 共用体"でググるとヒントがみつかる
226デフォルトの名無しさん:2007/05/26(土) 12:31:00
それならfixed byte[]にしないといけないんじゃないの?
それで本当に出来るのかどうかは知らんが
227デフォルトの名無しさん:2007/05/26(土) 12:50:59
まあ、unsafe でいいなら
stackalloc で取った byte 配列を
無理やり test* にキャストして、
そこに test の中身を代入で byte 配列化できる。
228デフォルトの名無しさん:2007/05/26(土) 12:54:53
意味がわからない。
どうせunsafe使うなら固定して普通に読むだけだろうw
229デフォルトの名無しさん:2007/05/26(土) 13:10:41
struct
struct
何を固定するんだよっ
普通に読むってbyte[]にしたいんだろ。
byte[]へのコピーはどうしたっているんじゃないの?
230224:2007/05/26(土) 13:14:19
http://groups.yahoo.co.jp/group/dotnet-csharp/message/3269
にてunsafeなやり方が載っていました。

http://d.hatena.ne.jp/tetsuarossa/20070407
にてsafeなやり方が載っていました。

上記方法がやはり最適なのでしょうか。
231デフォルトの名無しさん:2007/05/26(土) 13:34:23
うん
232デフォルトの名無しさん:2007/05/26(土) 13:41:55
横から質問だけど、
fixed byte Hairetsu[3];
みたいに構造体に宣言された配列にはどんな感じでアクセスするの?
Hairetsuの型は何になるの?
今試せないので
233デフォルトの名無しさん:2007/05/26(土) 13:47:38
普通にreadonlyなbyte[]と等価だと思えばいいんじゃないの?
234デフォルトの名無しさん:2007/05/26(土) 13:58:58
>fixed byte Hairetsu[3];
Hairetsuの型はbyte*になる
235デフォルトの名無しさん:2007/05/26(土) 21:42:32
へー だからunsafe必須なのか
byte* hairetsu = stackalloc byte[3];
と同じような感じなのかな
236デフォルトの名無しさん:2007/05/26(土) 21:48:57
確保されるのは stack じゃないけどな
237デフォルトの名無しさん:2007/05/26(土) 21:51:20
っていうか、MarshalAs属性でUnmanagedType.ByValArray指定する方が
ドトネト的にはお行儀がよいやり方なんじゃないのかな
238デフォルトの名無しさん:2007/05/26(土) 22:06:20
マーシャリングとは別だろうが
239デフォルトの名無しさん:2007/05/26(土) 22:06:43
.NET 的には
一々バイナリなんて考えるなよこのロートル(プゲラ
だと思うけどね
240デフォルトの名無しさん:2007/05/26(土) 23:05:49
>>238
そうだったね。
このあたり、しばらくやってないといつも混乱するよ。
241デフォルトの名無しさん:2007/05/27(日) 10:28:30
>>239
普通にアプリ書いてる限りはね。
でも、まあ、一応、過去との互換性とかのために MarshalAs とか unsafe があるわけで。
242デフォルトの名無しさん:2007/05/27(日) 12:50:05
すべてのクラスにunsafe付けてるような人っているのかな
243デフォルトの名無しさん:2007/05/27(日) 15:45:05
VS2005のプロパティ欄やソリューションエクスプローラーのような
切り離したりドッキングができるようなコントロールはどうやって作るんでしょうか
どなたかご存知でしたら教えて頂きたい
244デフォルトの名無しさん:2007/05/27(日) 15:45:26
いない
245デフォルトの名無しさん:2007/05/27(日) 15:52:10
日本語的に質問の答えになってないな。
246デフォルトの名無しさん:2007/05/27(日) 15:53:39
フローティング状態のときはMDI子ウィンドウでドッキング時は
子コントロールにするんじゃない?
247デフォルトの名無しさん:2007/05/27(日) 15:58:59
CodePlexかCodeProjectを"docking"で検索すれば
248デフォルトの名無しさん:2007/05/27(日) 16:38:55
そんな営利目的には使えないようなもの自分の手柄みたいに得意げに紹介されても困るでしょ
249デフォルトの名無しさん:2007/05/27(日) 16:39:51
作り方を知りたいだけなら、十分な情報だろうに
250デフォルトの名無しさん:2007/05/27(日) 17:30:04
まあ、確かにそれはそうだね
251デフォルトの名無しさん:2007/05/27(日) 21:22:45
CodePlexかCodeProjectを"docking"で検索すれば

そんな営利目的には使えないようなもの自分の手柄みたいに得意げに紹介されても困るでしょ

どう書いたら「自分の手柄みたいに得意げ」じゃないと見てもらえるのだ?

252デフォルトの名無しさん:2007/05/27(日) 21:27:21
だれか相談室スレの
http://pc11.2ch.net/test/read.cgi/tech/1178639189/323
に答えて・・・。
ホントにバグなの?
253デフォルトの名無しさん:2007/05/27(日) 21:55:18
>>252
うはww再現したww

たぶんあっちのスレの
http://pc11.2ch.net/test/read.cgi/tech/1178639189/345
に書いてあるようなことが原因だと思うけど

this.contextMenuStrip1.Show( this, MousePosition.X, MousePosition.Y );
の前に
this.Focus();
したら発生しなくなったから
キーボードフォーカスまわりの不具合かもね。あえてバグとは言わんが
254デフォルトの名無しさん:2007/05/27(日) 21:59:12
this.contextMenuStrip1.Show( MousePosition.X, MousePosition.Y );
の間違いね。。
255デフォルトの名無しさん:2007/05/27(日) 22:15:04
>>253
どうやらFormがアクティブの時は出ずに
ドロップ元のエクスプローラーがアクティブの時に出るようですね。
256デフォルトの名無しさん:2007/05/27(日) 23:09:23
>>248
どんだけ捻くれた性格なんだよ。
257デフォルトの名無しさん:2007/05/28(月) 14:47:42
すみません、VB.NET の方で訊いてみたのですがご指導いただけません
でしたのでこちらでも訊かせてください。すみません。

WebBrowser で Excelファイルを表示したとき、
VB6 の頃は Excel のツールボタン列がいくらでも選択できて
表示できたのですが、VB2005 になってから表示されないようなのですが、
もし表示するための方法等がありましたら教えてください。

よろしくお願いします。
258デフォルトの名無しさん:2007/05/28(月) 15:43:52
お帰り下さい
259デフォルトの名無しさん:2007/05/28(月) 15:54:55
WebBrowserコントロールから画像(ねらったオブジェクト)を取得したいのですが
GetNextControlで拾おうとしましたができませんでした

どのようなメソッドを使えば可能か教えていただけませんか?
260デフォルトの名無しさん:2007/05/28(月) 15:55:54
>>258

このたびはVB.NETスレからカスが流出してしまった事を真に深くお詫び申し上げます。
今後このようなことが内容にカス叩きを徹底してまいります。
今後ともよいご関係が続いていけますようお祈り申し上げて、お詫びの言葉とさせていただきますぉ
261デフォルトの名無しさん:2007/05/28(月) 15:58:17
>>259
DOMで。
HtmlDocument.GetElementFromPointあたり?
262259:2007/05/28(月) 16:03:28
>>261
サンクス!!
調べつつがんばってみます
263デフォルトの名無しさん:2007/05/28(月) 20:47:42
>>257
excelはインストールされていますか?
264デフォルトの名無しさん:2007/05/28(月) 21:02:35
265デフォルトの名無しさん:2007/05/28(月) 21:08:56
webbrowser上でActiveXコントロールで実現しているだけじゃないのかと。

webbrowserでは閲覧だけにしといて、ツールバー使いたければオートメーションのほうを考えたほうがいいのかも。
266デフォルトの名無しさん:2007/05/29(火) 09:59:01
>>264
参照先ありがとうございました。

>>263
Excelは2003が入っていますが、VB6でのWebBrowserではツールバーも
すべて表示できていたと記憶しています。

>>265
>ツールバー使いたければオートメーションのほうを考えたほうがいいのかも

方法はあるということですね、そうですか、また調べてみます。
また質問するかもしれませんが、よろしくお願いします。
どうもでした。


267デフォルトの名無しさん:2007/05/29(火) 10:11:03
いや、VB.NETスレから出るなよ
268デフォルトの名無しさん:2007/05/29(火) 11:50:18
ユーザーコントロール内のdataGridViewにマウス関係のイベントがまったく
発生せず、Drag&Dropの処理ができずに困っています。
ユーザーコントロールにせず、Form内にdataGridViewを作成した場合は
マウスイベントが発生し、Drag&Dropの処理ができています。
なにかやってないからだと思うのですがヒントをいただけないでしょうか?
269デフォルトの名無しさん:2007/05/29(火) 13:23:13
Drag&Dropとマウスイベントって関係なくね?
270デフォルトの名無しさん:2007/05/29(火) 13:31:27
マウスイベントではないですね(汗
ドラッグアンドドロップイベントでした。

DragEnter,DragOver,DragDrop この3つで処理するんですが、
これらがぜんぜんイベントかかりません。
271デフォルトの名無しさん:2007/05/29(火) 13:32:07
ユーザコントロールにマウスイベントが起こってると予想。
272デフォルトの名無しさん:2007/05/29(火) 13:50:30
>>271
最初私もそうにらんで、ユーザーコントロール側、PageGridViewっていう
class名なんですが、_DropEnter とか作成して AllowDrop をTrueにして
やってみたんですが、ブレークポイントかけてもまったくイベントかかって
きてないんです。
273デフォルトの名無しさん:2007/05/29(火) 14:19:21
すみません。ケアレスミスでした。
イベントの関数を書いておきながらイベントに登録してませんでした。
m(_ _)m
274デフォルトの名無しさん:2007/05/29(火) 14:27:17
画像ファイルを読み込む処理についての質問です

Image imgGetPict = Image.FromFile(ファイルパス);

としてImageを取得しているのですが
ファイルパスがURIの場合、どのようなクラス、メソッドを使用すればよろしいでしょうか?
取得したいのはbmpやGIFファイルです
275デフォルトの名無しさん:2007/05/29(火) 14:31:16
WebClient or WebRequest/WebResponse
276274:2007/05/29(火) 15:17:24
>>275
Image.FromStream(MemoryStream(WebClient.DownloadData(URI)))
で読み込めました
ありがとうございます

難しいな〜
277webmaster@気まぐれアナスイ:2007/05/29(火) 15:24:21
>>268
!(Φ_Φ+)
そういえばWin.ではmouse.のcenter-click.の操作が優れています…

  ↑
←●→
  ↓
    斜め〜
278デフォルトの名無しさん:2007/05/29(火) 18:46:32
Makefile 使って
コンパイル→できたプログラムをそのまま実行
っていうのを書きたいんですが

例えば

exe1:
gcc -o exe1 exe1.c
./exe1

として
$ make exe1

すると
プログラムは一応走るのですが
make: *** [step1] Error 220
ってのがプログラムの終わりに出ちゃうですよね

cygwinから
./exe1
だけだとエラーメッセージは出ないのですが…

Makefile使って
コンパイル→できたファイルをそのまま走らす
時には何か特別な書き方がいるのでしょうか?
279デフォルトの名無しさん:2007/05/29(火) 18:58:15
>>278
>>1 を100回読んで御帰り
280デフォルトの名無しさん:2007/05/29(火) 22:20:05
普通にフォームを表示するアプリでDirectory.GetCurrentDirectoryを使うと実行ファイルのあるフォルダパスを取得出来ますが、Environment.GetCommandLineArgsで引数を拾って起動した場合、何故か実行ファイルのあるフォルダとは異なる場所が取得されます。

ヘルプにも

> 現在のディレクトリは、元のディレクトリとは異なり、プロセスが開始されたディレクトリです。

と書かれていますが、引数を拾う場合でも実行ファイルのある(フォルダ)パスを取得するにはどうしたら良いのでしょうか。
281デフォルトの名無しさん:2007/05/29(火) 22:31:32
Application.StartupPath
282デフォルトの名無しさん:2007/05/29(火) 22:49:41
>>280
>何故か実行ファイルのあるフォルダとは異なる場所が取得されます。

もともと 実行ファイルのあるフォルダを取得するメソッドじゃないからな。
ヘルプに書かれている通りカレントディレクトリを取得する…

答えは親切な人が書いてるけど、
カレントディレクトリってなにか調べたほうがいいんじゃないのか?
283デフォルトの名無しさん:2007/05/29(火) 23:49:17
>>281
ありがとうございます。
EnvironmentクラスやDiagnosticsクラス辺りを一生懸命探していました。
クラス名の名前と機能が一致しなくていつも目的のクラスを探すのに苦労しています。

>>282
カレントディレクトリは現時点で参照している作業ディレクトリで、MS-DOSならCHDIR(省略形CD)で変更する事が出来るものですね。
それを踏まえても何故起動方法の違いでカレントディレクトリが変わるのでしょうか。
GetCommandLineArgsを使うとコンソールアプリと見なされるから変わるのでしょうか。
仮にそうだとしても何故コンソールアプリと見なされると変わるのか理由が解りません。
284デフォルトの名無しさん:2007/05/29(火) 23:59:07
>>283
メソッド名は呪文や暗号ではない。素直に読んでみ。
285デフォルトの名無しさん:2007/05/30(水) 00:05:35
Environment.GetCommandLineArgsで引数を拾って起動ってどういう風にやってる?

普通に起動と方法が違ってないか?
そこにヒントがある。
286デフォルトの名無しさん:2007/05/30(水) 00:33:30
コンソールアプリとフォームの違いではないよ。

実行の呼び出し元がカレントディレクトリ。

エクスプローラだとダブルクリックしているフォルダー
ショートカットだとショートカットのある位置。
コンソールだとコンソールのカレントフォルダ。
287デフォルトの名無しさん:2007/05/30(水) 00:47:15
作業ディレクトリを指定する場合も考えられるな

そして OpenFileDialog
288デフォルトの名無しさん:2007/05/30(水) 00:56:46
> 現在のディレクトリは、元のディレクトリとは異なり、プロセスが開始されたディレクトリです。
これが全てじゃないか。

現在のディレクトリ=カレントディレクトリ
289デフォルトの名無しさん:2007/05/30(水) 01:05:23
> The current directory is distinct from the original directory,
> which is the one from which the process was started.

訳がおかしくないか?
290デフォルトの名無しさん:2007/05/30(水) 01:14:17
一つ目の whichはどこにかかっているんでしょうか。
291デフォルトの名無しさん:2007/05/30(水) 01:30:11
意味的にthe original directoryでしょう。

だから誤訳。
292デフォルトの名無しさん:2007/05/30(水) 08:45:03
意訳でしょ
293デフォルトの名無しさん:2007/05/30(水) 11:29:39
WebBrowserコントロールでGIF画像の有るページを表示させた上で
表示させたGIFをローカルに取得したいのですが
URL指定ではなく(サーバーにある画像ファイルではなく)、
WebBrowserコントロールに表示されている画像を取得することは可能でしょうか。

表示後にネットから切断されたりサーバーからファイルが無い状態でも
ローカルのブラウザに表示済みのものを保存したいのです
294デフォルトの名無しさん:2007/05/30(水) 11:38:18
>>293
とにかくWEBBROWSERコントロールのこと聞きすぎなのにワロタ
295293:2007/05/30(水) 11:44:49
>>294
すみません
MSDNも参照してるのですがどうも思ったように作れなくて…
解説してるページも見つけられなかったので悩んでます
296デフォルトの名無しさん:2007/05/30(水) 12:16:04
>>292
意味が正反対になっちまったら意訳とはいえないだろうw
297デフォルトの名無しさん:2007/05/30(水) 20:05:29
>>293
>>259-261に書いてあるのにわからないのか?ネタか?釣りか?
298デフォルトの名無しさん:2007/05/30(水) 20:28:40
ヘルプは機械翻訳みたいだな。
yhooo翻訳もおかしな結果になる。

内容としては、
現在のディレクトリはプロセスが開始されたディレクトリとは限らない。ってことだろうな

カレントディレクトリは変更できるからね。
299デフォルトの名無しさん:2007/05/30(水) 21:26:50
変更できるもなにも、最初からカレントディレクトリと実行ファイルが存在する
ディレクトリには何の関係もなかろう。
300293:2007/05/30(水) 21:33:27
>>297
ごめんマジでした

HtmlDocument.GetElementFromPoint
HtmlDocument.GetElementsByTagName
を使えばオブジェクトとして持ってこれるのかな
もう少し試してから出直してきます
ありがとうございました。
301デフォルトの名無しさん:2007/05/30(水) 21:40:53
また文脈読めない馬鹿が出てきたね。
ちなみに>>300じゃないよ。
302デフォルトの名無しさん:2007/05/30(水) 21:50:08
いちいち煽らない。
303デフォルトの名無しさん:2007/05/30(水) 21:53:33
>>301
ああすまん、確かに誤読してるな。
まあでもお前さんほど馬鹿じゃないけど
304301:2007/05/30(水) 21:57:23
>>303
何故わかったんだ?

お前ただの馬鹿じゃないな?
305デフォルトの名無しさん:2007/05/30(水) 22:58:41
俺ハッカー!
306デフォルトの名無しさん:2007/05/31(木) 01:14:34
TreeViewにデータをドロップし、ドロップされた座標のノードの下に新規ノード追加
という動作を行っております。
ドロップされた座標のノードの下に線を表示したいと考えているのですが
どのようにすればよいのでしょうか?
307デフォルトの名無しさん:2007/05/31(木) 06:38:13
308デフォルトの名無しさん:2007/05/31(木) 10:30:42
>>306
ドロップされた座標のノードの取得方法がわからないのか?
線の引き方がわからないのか?
309デフォルトの名無しさん:2007/05/31(木) 18:13:07
すみません、メソッドの参照型の引渡しで、そのメソッド内でのみ、
参照型引数のメンバ変数を変更禁止にする方法ってありますか。
310デフォルトの名無しさん:2007/05/31(木) 18:16:22
リードオンリーなラッパをかぶせてから渡す。
311デフォルトの名無しさん:2007/05/31(木) 18:46:33
class A{ public int x; }
class wrapper{
 public readonly A a;
 public wrapper(A _a){a=_a;}
}
A a = new A();
zzz.Method(new wrapper(a));
こういうことでしょうか?
この方法でも、 zzz.Method内で a.x がメソッド内で書き換え可能でした。
できればコンパイルエラーになればいいんですが。
312デフォルトの名無しさん:2007/05/31(木) 19:32:42
a フィールドが読み取り専用になるだけであって
x フィールドは好き勝手に書き換えできるわい
313デフォルトの名無しさん:2007/05/31(木) 20:02:19
たぶん>>310はこういうことを言ってるんだと思う
class ReadonlyA{
 private A a;
 public wrapper(A a){this.a=a;}
 public int X{get{return a.x;}}
}
もしくはCloneして渡す
関係ないけど引数名の先頭にアンダーバー付けたりするのはマナー違反
314デフォルトの名無しさん:2007/05/31(木) 20:30:46
マナー違反ではないが、マイクロソフト様のガイドラインに違反している。
315デフォルトの名無しさん:2007/05/31(木) 20:38:37
C みたいに規格で処理系の予約語になってたりはしないのか?
316デフォルトの名無しさん:2007/05/31(木) 20:44:00
しない。アンダースコアで始まる識別子なんて汚いだろ。
互換性に拘らないMicrosoftだからこそなせる業。

まあ、@つけりゃ予約語も識別子として使えるしな
317デフォルトの名無しさん:2007/05/31(木) 20:44:37
内部の実装はどうでもいいから外から見える名前は整えろ
っていうのがマイクロソフト様の方針
318デフォルトの名無しさん:2007/05/31(木) 20:49:02
>a フィールドが読み取り専用になるだけであって
>x フィールドは好き勝手に書き換えできるわい
この言語仕様ってどうなん?違和感があるんですが。
C++のようにメソッドの引数にconst使えないのか。
319306:2007/05/31(木) 20:50:41
>308
線を表示するほうです

>307
参考にするもリンク切れのようで
キャッシュもなかったようですがどうすれば・・
320デフォルトの名無しさん:2007/05/31(木) 21:12:45
DrawNode イベントで自分で描画。
321デフォルトの名無しさん:2007/05/31(木) 21:37:55
>違和感があるんですが
俺はないな。
内部構造、動作がわからないものを外から勝手にリードオンリーできるほうがおかしいと思う。

>const使えないのか。
コーディングの問題で、これは別問題。
322デフォルトの名無しさん:2007/05/31(木) 21:58:03
話が通じてないな。
323デフォルトの名無しさん:2007/05/31(木) 22:05:52
>>321
C++つかったことあんの?
324デフォルトの名無しさん:2007/05/31(木) 22:10:06
>>321
doubleの内部実装しらないけど、readonlyにできるよ。
メソッドの使用者に対してこの引数は弄りませんと明示できるほうがバグが減ると思う。C++はそうなってる。
325デフォルトの名無しさん:2007/05/31(木) 22:13:59
 public readonly A a;
で、aメンバーもリードオンリーになるのは変だと書きたかっただけなんだけどな。
326デフォルトの名無しさん:2007/05/31(木) 22:15:58
それを変とおもう発想の方が変だろう。
いや、変というより貧弱というべきか。
327デフォルトの名無しさん:2007/05/31(木) 22:17:20
>>309
に対して、
>C++のようにメソッドの引数にconst使えないのか。
は的外れじゃないか?
328デフォルトの名無しさん:2007/05/31(木) 22:17:39
確かにconstパラメータほしぃ
329デフォルトの名無しさん:2007/05/31(木) 22:20:04
あるインスタンスがリードオンリーなのに、そのインスタンスのメンバは書き込みOKっておかしいよ。
ファイルシステムで、c:\dataは読み取り専用なのに、c:\data\testは書き込みOKって言ってるようなもんでしょ。
330デフォルトの名無しさん:2007/05/31(木) 22:22:38
ネタですよね?
331デフォルトの名無しさん:2007/05/31(木) 22:29:17
>>329
初心者乙

参照型インスタンスは実はポインタ。
実体は別物。

リードオンリーだと1回設定したら実体が入れ替え出来ないだけ。
普段は実体が入れ替え可。

めちゃくちゃな例えで言うと人間の頭とアンパンマンの頭の違い
332デフォルトの名無しさん:2007/05/31(木) 22:30:52
329はネタだと思うけど、もし本気で書いてるとしたら
331の説明では意義を理解できないのは確かだと思う
333デフォルトの名無しさん:2007/05/31(木) 22:31:03
>>323
お前こそ
c++のconstの意味分かってないだろ?
334デフォルトの名無しさん:2007/05/31(木) 22:36:16
>>331
そんな基本的なことは分かった上で言っている。
c#のリードオンリーの定義に問題があると言っている。
335デフォルトの名無しさん:2007/05/31(木) 22:36:45
ネタはもう結構。
336デフォルトの名無しさん:2007/05/31(木) 22:37:56
c++のconstがほしい。
337デフォルトの名無しさん:2007/05/31(木) 22:39:20
バグぐらい自分で潰せよ。
338デフォルトの名無しさん:2007/05/31(木) 22:39:39
>メソッドの使用者に対してこの引数は弄りませんと明示できるほうがバグが減ると思う。
すいません、結局C#では、これはできないの?

339デフォルトの名無しさん:2007/05/31(木) 22:40:18
const引数やメソッドが仕様に無いのは、セキュリティとかパフォーマンス上の
問題があるのであえてそうなってるってばっちゃが言ってた。
ちなみにC#の言語仕様ではなくCLRの仕様らしいよ。C++/CLIも然り。

俺もconst欲しいけど、まぁあくまでコンパイル時の検証より
実行時の実用性を優先させたってことでしょ。
340デフォルトの名無しさん:2007/05/31(木) 22:40:41
>>337
開発の仕事をすれば、constのありがたみが分かるよ。
341デフォルトの名無しさん:2007/05/31(木) 22:43:30
>>340
このスレの人はconstがなんだかわかってないと思うよ。

自動的に書き換え禁止になる機能とかと勘違いしてるよ。
342デフォルトの名無しさん:2007/05/31(木) 22:53:08
public readonly DateTime dt;

dt.Nowが何になれば満足するの?

これはプロパティで構造体か。
343デフォルトの名無しさん:2007/05/31(木) 22:53:43
>c#のリードオンリーの定義に問題があると言っている。
んー、まぁC++のconstはあくまでコンパイル時の検出のみであることを考えれば、
逆にC++の仕様の方が不自然だったりするんだけどね。
344デフォルトの名無しさん:2007/05/31(木) 23:00:58
>>309 は放置されてる。

変更禁止ってのは取り方がいろいろあるよな。
コンパイル時にはねるのか、
書き込もうとしたら実行時例外がおこるのか、
書き込んだ値を反映させないのか。
345デフォルトの名無しさん:2007/05/31(木) 23:02:39
>>340
コンパイルが通らないという理由だけで、const_cast使う奴もいるので、結局デスマーチ。
346デフォルトの名無しさん:2007/05/31(木) 23:05:21
const_cast ならまだ検索効くから対処できないこともないが、
C 風キャストで const 外されるとタマランな。
347デフォルトの名無しさん:2007/05/31(木) 23:05:52
というより、C++のconstみたいな使用にははっきりいって意味がないでしょ。
参照先を書き換えないと宣言することに意味はないし、
書き換え禁止を強制する仕組みにも意義を認めにくい。

メソッドの最初の行と最後の行をかく間にそのメソッドの機能を忘れてしまうような
プログラマなら、最初から何を強制しようと無意味だろう。

>>309
意味ないと思うけど、サブクラスだけにプロパティもたせてるようにして、
引数の型はプロパティをもたないベースクラスにするとか。

あとは普通にインターフェイス使うとか
348デフォルトの名無しさん:2007/05/31(木) 23:07:03
C++のconstはコードの最適化のためじゃあるまいか
349デフォルトの名無しさん:2007/05/31(木) 23:23:18
const 使うと対象のクラスのメソッドにconst 汚染が…
特定のメソッドのために不自然なconstが。

で、 >>334 はどこに行ったの?
350デフォルトの名無しさん:2007/05/31(木) 23:24:10
>メソッドの最初の行と最後の行をかく間にそのメソッドの機能を忘れてしまうような
>プログラマなら、最初から何を強制しようと無意味だろう。
で、君はプロジェクトリーダーだったらどうするの?それにPGが一日20hコーディングしてたら?
PGを外してもモノはできないよ。プロジェクト放り出して逃げる気?
constが無意味とかいう奴は素人だろ。
351デフォルトの名無しさん:2007/05/31(木) 23:27:53
>>350
今後javaがconst取り入れるかどうかみとけば。
352デフォルトの名無しさん:2007/05/31(木) 23:30:38
>>350
デスマーチ乙。今日は早いお帰りですね。
353デフォルトの名無しさん:2007/05/31(木) 23:31:56
では次の質問カモン!

なんか忘れているような。。。
354デフォルトの名無しさん:2007/05/31(木) 23:34:52
ちゃんと使うやつと使わないやつがばらばらすぎて
実質あまり役に立たないおち
355デフォルトの名無しさん:2007/05/31(木) 23:37:37
経験からすると、まわりJavaプロジェクトの8割が火を噴いている。
constがないからだったのかw
356デフォルトの名無しさん:2007/05/31(木) 23:47:00
今はjavaが持てはやされてるけど、今後どうなるんかねぇ
357デフォルトの名無しさん:2007/05/31(木) 23:49:19
やっぱり意味ないとしか思えんなあ。
C#でもアンマネージドコードを呼び出す時にはInAttributeがあるわけだから、
忘れたとかではなく、設計者が明確にマネージドの範囲内ならイラネと考えたのだろう。
358デフォルトの名無しさん:2007/05/31(木) 23:49:29
多分あまり変わらない。

それかc++使いが減ってjava使いが増える
359デフォルトの名無しさん:2007/06/01(金) 00:40:12
演算子をオーバーロードして、擬似的にconstって実装できないかなぁ
とふと思った
360デフォルトの名無しさん:2007/06/01(金) 00:40:48
無理。
361デフォルトの名無しさん:2007/06/01(金) 14:32:14
Const属性を定義してコンパイラを自分で作れば言語仕様上はいけるんじゃね
362デフォルトの名無しさん:2007/06/01(金) 15:56:41
教えてください。

C#の話です(.NET2003)
テキストボックスの制御の話です。
1行25文字で25行までしか入力できなくしたいのです
複数行が可能にしてあるため1行に25文字以上入力しようとすると
自動で折り返してしまい改行になりません。
折り返し時に自動で改行が入るようにしたいのですが・・・
どうすればよいですかね
363デフォルトの名無しさん:2007/06/01(金) 16:04:04
ProcessCmdKeyあたりで入力監視して
自分で改行いれればいいんじゃね?
364デフォルトの名無しさん:2007/06/01(金) 16:19:35
レスありがとうございます。
ProcessCmdKey ですか…
初めて聞く言葉なんでちょっと調べてみます。

ところで
テキストボックスで指定行の文字だけ取得するってできましたっけ?
たとえば現在カーソルがある行の文字数取得 とか・・・
365デフォルトの名無しさん:2007/06/01(金) 16:29:55
やろうと思えばできるわな
366デフォルトの名無しさん:2007/06/01(金) 16:33:47
つまりそう簡単には出来ないって事なんですねー

せめて1行あたり25文字しか入力できなく するってのでもいいんですが
行の文字数調べられないとできないですもんね・・・
367デフォルトの名無しさん:2007/06/01(金) 16:43:35
>>366
うぜぇwwwwwwww

行の文字の長さならCRLFで区切ってLength調べりゃいいだけだろうが
小細工はそれが出来てからすればいい
368TextBox.Lines:2007/06/01(金) 17:14:07
僕も思い出してください
369デフォルトの名無しさん:2007/06/01(金) 18:50:10
>>367
最初の行のコメントがなければいいヤツに見えるんだがな。
wの数だけでそいつのキモ度が想像できる。
370366:2007/06/01(金) 20:40:53
>>367-369
レスありです。

なんとか頑張って見ます…
ありがとうございますっ。
371デフォルトの名無しさん:2007/06/01(金) 21:19:50
>>369
じゃあ、お前は1キモだな。
372デフォルトの名無しさん:2007/06/01(金) 21:55:37
初歩すぎる質問だと思いますが、メインメソッドにargsやSTAThread
を付ける意味が愚ぐったりもしましたが、どうしても理解出来ません

[STAThread]
static void Main(string[] args)
とかなぜstatic void Mainだけじゃ駄目なのか教えてくれませんか?
373デフォルトの名無しさん:2007/06/01(金) 21:58:27
374デフォルトの名無しさん:2007/06/01(金) 23:17:59
>>362
やってみた。思ったより面倒臭いね。
public partial class TextBoxEx : TextBox
{
protected const int MaxLines = 5;
protected const int MaxCharPerLine = 10;
protected override void OnTextChanged(EventArgs e)
{
if (Lines.Length >=MaxLines)
{
base.AcceptsReturn = false;
}
else
{
base.AcceptsReturn = true;
}
base.OnTextChanged(e);
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
bool isControlChar = char.IsControl(e.KeyChar);
int lenCaretLine = GetCaretLineLength();
if (lenCaretLine >= MaxCharPerLine && !isControlChar)
{
e.Handled = true;
}
else if (e.KeyChar == '\r' && !AcceptsReturn)
{
e.Handled = true;
}
base.OnKeyPress(e);
}
375デフォルトの名無しさん:2007/06/01(金) 23:19:12
int GetCaretLineLength()
{
return GetLineTextOfCaret().Length;
}
string GetLineTextOfCaret()
{
int line = GetLineIndexOfCaret();
return GetLineText(line);
}
string GetLineText(int line)
{
if (Lines.Length <= 0)
{
return "";
}
else
{
return Lines[line];
}
}
int GetLineIndexOfCaret()
{
int charIndexOfCaret = SelectionStart;
return SendMessage(Handle, Message.LINEFROMCHAR, charIndexOfCaret, 0);
}
enum Message
{
LINEFROMCHAR = 0xc9,
}
[DllImport("User32", EntryPoint = "SendMessageA")]
static extern int SendMessage(IntPtr hWnd, Message msg, int wParam, int lParam);
}
376374:2007/06/01(金) 23:23:08
ふだんVB.NETメインで使ってるんでc#的におかしいところがあるかもしれない。
あと、AcceptsReturn 使ってるのはただの手抜きだからたぶん修正した方がいいと思う。
377デフォルトの名無しさん:2007/06/01(金) 23:38:13
>>372
削除してDrag&DropとかShellExecuteとか使ってみれば分かる
378デフォルトの名無しさん:2007/06/01(金) 23:53:28
先生
args消したけど分かりませんでした!!
379デフォルトの名無しさん:2007/06/02(土) 00:07:00
そっちかよ。
argsは起動時のコマンドライン引数でしょうが。
いらないならいらない。
380デフォルトの名無しさん:2007/06/02(土) 00:14:28
横から質問だけど
argsを使わずに起動時のコマンドライン引数を取得するにはどうすればいいの?
381デフォルトの名無しさん:2007/06/02(土) 00:21:04
いや>>378はただの冗談だすまん。
382デフォルトの名無しさん:2007/06/02(土) 00:21:07
string 引数[] = Environment.GetCommandLineArgs();
とか
383382:2007/06/02(土) 00:36:26
VB.NETでプログラミングしている最中だったんで間違えたorz

string[] 引数 = Environment.GetCommandLineArgs();
因に実際の引数は1以降に入るので注意。
384デフォルトの名無しさん:2007/06/02(土) 07:07:46
自分の作ったプログラムなんですが、
日本語XPでシステムの規定の言語が日本語の時と
英語XPでシステムの規定の言語が英語の時は動くんですが、
英語XPでシステムの規定の言語が日本語だと以下のエラーが出ます。
"The signature is incorrect"

このエラーはどうもsytem.web.dllの参照に問題があるようなんですが、
どうやって直したらいいのでしょうか?

おねがいします。
385デフォルトの名無しさん:2007/06/02(土) 10:59:39
例外名を書けよハゲ
386デフォルトの名無しさん:2007/06/02(土) 11:28:27
ハゲでサーセン
387デフォルトの名無しさん:2007/06/02(土) 11:52:56
ファイルの属性を強制的に解除しようと以下のように書いたのですが、コンパイルすると「演算子 '!' を 'System.IO.FileAttributes' 型のオペランドには適用することができません。」というエラーが出てしまいます。

File.SetAttributes(filepath, File.GetAttributes(filepath) & (! (FileAttributes.ReadOnly | FileAttributes.Hidden | FileAttributes.System)));

VB.NETなら

IO.File.SetAttributes(filepath, IO.File.GetAttributes(filepath) And (Not (IO.FileAttributes.ReadOnly Or IO.FileAttributes.Hidden Or IO.FileAttributes.System)))

で通るのに何故C#では駄目なのでしょうか。
388デフォルトの名無しさん:2007/06/02(土) 11:57:20
! は bool 用の演算子
否定のビット演算子は別にあるので MSDN 漁ってみ
389デフォルトの名無しさん:2007/06/02(土) 11:57:33
初めまして、C#初心者です。

unsafe private int RetrievalWord( bool first, string* pLog, int maxLogLong ) {
}

という文で

「マネージ型のアドレスの取得、マネージ型のサイズの取得、またはマネージ型へのポインタの宣言が実行できません ('string')」

というエラーが出て困っています。
いったいどこがいけないのでしょうか?
390デフォルトの名無しさん:2007/06/02(土) 11:58:00
>>387
c#は普通で、vbは適当に解釈してるから。
391デフォルトの名無しさん:2007/06/02(土) 11:59:13
>>389
string*
392デフォルトの名無しさん:2007/06/02(土) 11:59:37
>>389
どこがと言われても、エラーメッセージ通りとしか言いようがないが。
コンパイルエラーなら MSDN でエラーコード調べるといいよ。
393デフォルトの名無しさん:2007/06/02(土) 12:14:38
string* がマネージ型へのポインタの宣言が実行できません  に当てはまっている。

マネージ方のオブジェクトは場所が変わる可能性があるからそのままだとポインタでさせない。
394デフォルトの名無しさん:2007/06/02(土) 12:33:47
>>388
~ 演算子(反転)というのがあったのですね。
「否定」で一生懸命探していたので気付きませんでした。
ありがとうございます。

File.SetAttributes(filepath, File.GetAttributes(filepath) & (~ (FileAttributes.ReadOnly | FileAttributes.Hidden | FileAttributes.System)));
395デフォルトの名無しさん:2007/06/02(土) 13:10:07
つまり
fixed( string* pLog = log ) {
pLog = RetrievalWord( true, pLog, LoadIndexLong );
}

の様にすれば良いということでしょうか?
396デフォルトの名無しさん:2007/06/02(土) 13:19:15
おいおい、
string* = string
ってどんな代入だよ
397デフォルトの名無しさん:2007/06/02(土) 13:24:22
哲学的ですな。
398デフォルトの名無しさん:2007/06/02(土) 13:27:47
ログファイル出力に特化したクラスって有りますか?
みんな自前で実装してるの?
399デフォルトの名無しさん:2007/06/02(土) 13:28:15
何でもいいからやってみろ。
失敗してもそこから学ぶことが大事。

人に聞くのは一番最後。
400デフォルトの名無しさん:2007/06/02(土) 13:39:53
private string[] log;

fixed( string* pLog = log ) {
pLog = RetrievalWord( true, pLog, LoadIndexLong );
}

これで無理なら、引数としてでは無理ということでしょうか?
401デフォルトの名無しさん:2007/06/02(土) 13:42:16
えらーめっせーじみてもういちどかんがえてみよう。

ひんと かたがちがうかな
402デフォルトの名無しさん:2007/06/02(土) 13:46:58
TraceSourceに自作リスナ
ややいまいちだが
403デフォルトの名無しさん:2007/06/02(土) 14:09:13
>>399
なんと効率のわるいレス・・・
404デフォルトの名無しさん:2007/06/02(土) 14:16:29
効率は2の次
自分で解決する能力をみにつけにょう
405デフォルトの名無しさん:2007/06/02(土) 14:20:26
>>398
DataTable使って作った。XML読み書き楽。
406デフォルトの名無しさん:2007/06/02(土) 14:27:30
>>405
物によっては容量が馬鹿でかくなっちゃうよな。
407デフォルトの名無しさん:2007/06/02(土) 14:57:40
>ひんと かたがちがうかな
型ですか?型いろいろ変えてもできません。><
引数としてでは可能ということは分かりました。ですが、やっぱり渡せません。><
408デフォルトの名無しさん:2007/06/02(土) 15:09:51
>>407
>>404

string[] と string*
409デフォルトの名無しさん:2007/06/02(土) 15:20:47
>>407
なんか回答してる方も馬鹿っぽいからあんまり真に受けて
その話題に固執すべきでないかもなw

比較的まともな人に回答してもらいたければ、そもそも
RetrievalWordとやらで何をしたいのかをまず書くべきだと思う。
410デフォルトの名無しさん:2007/06/02(土) 15:28:12
>>409
もう遅いですが、過去のリストから類似するリストを検索しようとしています。
VC++から移植していて、ここで躓きましたorz
411デフォルトの名無しさん:2007/06/02(土) 15:29:41
そもそもString*を引数で渡す必要があるなんてどんな場面なのか想像がつかん。
412デフォルトの名無しさん:2007/06/02(土) 15:31:23
まずunsafeコードを諦めよう
413384:2007/06/02(土) 15:58:10
>>385
eigo de suimasenn.
reigai no namae ha TypeLoadException desu.
hikituzuki onegaisimasu
414デフォルトの名無しさん:2007/06/02(土) 16:03:38
英語じゃなくローマ字じゃね?
415デフォルトの名無しさん:2007/06/02(土) 16:09:41
416デフォルトの名無しさん:2007/06/02(土) 16:10:15
ログ出力にDataTableて
417デフォルトの名無しさん:2007/06/02(土) 19:46:22
>>411
refで参照渡しできるのを知らないとか
418デフォルトの名無しさん:2007/06/03(日) 01:58:36
ImageListのImageをウェブから取得するには、どうしたらいいですか?
お気に入りのfaviconを.urlファイルを読んでURLを取得、そのURLから
アイコンを得たいです。お願いします。
419デフォルトの名無しさん:2007/06/03(日) 03:36:49
どぼんとかの初心者向けサイトを漁ってみたらどうだろうか。
ちなみに、HTTP では基本的にファイル単位でやり取りすることになる。
直接 Image オブジェクトを受け取るんではなく、ファイルを受け取ってそこから Image を作るってことだ。
420418:2007/06/03(日) 04:01:16
>>419
ありがとう。じゃあキャッシュを探してそれをImageListに加えればいいのかな?
なんか激重になりそうだが・・・・・・
いろいろやってみます。ありがとうございました。
421デフォルトの名無しさん:2007/06/03(日) 05:50:51
質問です。
マルチTiffなファイルを作成しようとしているのですが、Image.SaveAdd()の
EncoderParameterに何を入れたらいいのかわかりません。

なにかヒントだけでもいいので、教えていただけたらうれしいです。
よろしくお願いします。
422デフォルトの名無しさん:2007/06/03(日) 05:57:23
System.Drawing.Imaging.Encoder クラスを調べるといいよ
423デフォルトの名無しさん:2007/06/03(日) 06:09:48
>>422
MSDNのEncoder.SaveFlag フィールドのページに
やりたいことのサンプルコードがありました。

これを元にいろいろいじってみます。
ありがとうみございました。
424デフォルトの名無しさん:2007/06/03(日) 11:17:57
>>420
>>419 はどこにも「キャッシュ」なんて書いて無い罠

[1] URL から HTTP 経由でファイルを取得する方法
[2] ファイルから Image を作る方法

この2つに分けて考えなさいな
425デフォルトの名無しさん:2007/06/03(日) 11:49:42
>>418
WebClientを使えば超簡単
using (WebClient webClient = new WebClient())
using (Stream stream = webClient.OpenRead("URL"))
{Image image = Image.FromStream(stream);}
426デフォルトの名無しさん:2007/06/03(日) 12:47:28
>>425
複数解像度をもつアイコンがあるとうまく行かない。
http://japan.cnet.com/favicon.ico これがそうだな。
427デフォルトの名無しさん:2007/06/03(日) 13:01:19
usingなどは端折ってるので適宜入れとくれ。
WebClient wc = new WebClient();
byte[] buf = wc.DownloadData(favicon_uri);
string cntxt = wc.ResponseHeaders.Get("Content-Type");
MemoryStream stream = new MemoryStream(buf, false);
if (cntxt == "image/vnd.microsoft.icon" || cntxt == "image/x-icon") {
  Icon ico = new Icon(stream, 16, 16);
  image = ico.ToBitmap();
} else if (string.Compare(cntxt, 0, "image/", 0, 6) == 0) {
  pictureBox1.Image = Image.FromStream(stream);
}
428418:2007/06/03(日) 14:36:13
>>424->>427
ありがとうございました。おかげでうまくアイコンを取得できました!
429デフォルトの名無しさん:2007/06/03(日) 16:20:59
MFCにはOnUpdateUIだったか非同期で呼ばれて、ツールバーや
ステータスバーの状態を変更できるものがあったと思うのですが、
.netにも同様の機構はありますのでしょうか?
430デフォルトの名無しさん:2007/06/03(日) 16:39:09
BackgroundWorker が一番近いかね
431デフォルトの名無しさん:2007/06/03(日) 17:44:31
>>430
ありがとう。調べてみます。
432デフォルトの名無しさん:2007/06/03(日) 20:14:57
VS2005のC#でWindowsアプリケーションのプロジェクトで作成しています。
ToolTipのオーナードローをしたいのですが、
下のコードでMyToolTip_Popupは呼ばれますが、MyToolTip_Drawが呼ばれません。
思い当たる原因や対策がある方、教えていただけませんか?

ToolTip tip = new ToolTip();
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
tip.IsBalloon = true;
tip.OwnerDraw = true;
tip.Popup += new System.Windows.Forms.PopupEventHandler(this.MyToolTip_Popup);
tip.Draw += new System.Windows.Forms.DrawToolTipEventHandler(this.MyToolTip_Draw);
tip.ToolTipTitle = "タイトル";
tip.Show("test", this, 0, 0, 3000);
}
}
private void MyToolTip_Popup(object sender, PopupEventArgs e)
{
MessageBox.Show("Popup");
}
public void MyToolTip_Draw(object sender, DrawToolTipEventArgs e)
{
MessageBox.Show("Draw");
e.DrawBackground();
e.DrawBorder();
e.DrawText();
}
433デフォルトの名無しさん:2007/06/03(日) 20:21:23
IsBalloonやめればいいんじゃない?
434432:2007/06/03(日) 20:29:49
>>433
ありがとうございます。

その通りでした。
良く考えれば、まさにその通りですね・・・orz
435デフォルトの名無しさん:2007/06/03(日) 20:53:39
そのコードだとForm1_MouseDownの度にイベントが堆積してくけど?
436デフォルトの名無しさん:2007/06/03(日) 21:11:56
今VC#を触り始めたわけなんですが、
初心者向けのサイトをいくつか列挙していただけないでしょうか
437デフォルトの名無しさん:2007/06/03(日) 21:13:26
438デフォルトの名無しさん:2007/06/03(日) 21:18:30
>>437
ありがとうございます
439デフォルトの名無しさん:2007/06/03(日) 21:40:01
あっれれれ?

昔テンプレなかったっけ?
440デフォルトの名無しさん:2007/06/03(日) 21:55:19
前スレにはあった
441432:2007/06/03(日) 22:15:38
>>435
あ、いえ。
もともとToolTipを継承したクラスでオーナードローを試していて、
ソースを小さくしていったらこうなっただけなので、
その辺は多分大丈夫だと思います。

元のコードはデザイナで追加されたInitializeComponent()でやっています。
442デフォルトの名無しさん:2007/06/04(月) 15:04:15
ListBoxのItemsの中身をシリアライズしたいんですが、どこかにサンプル無いでしょうか?
443442:2007/06/04(月) 15:07:18
追記。
ttp://d.hatena.ne.jp/panda728z/20070117#p1
↑参考にしてみたんですが、ヒントもらえませんか?

            //object[] parameterArray = new object[] { "あれや", "これや", "hogehoge" };  // ← ここら辺を何とかすれば何とかなる気がするんですが・・・。
            string parametersSerialized = string.Empty;
            UTF8Encoding uniEncoding = new UTF8Encoding();
            XmlSerializer serializer = new XmlSerializer(typeof(object[]));
            using (MemoryStream memStream = new MemoryStream())
            {
                serializer.Serialize(memStream, parameterArray);
                parametersSerialized = uniEncoding.GetString(memStream.ToArray());
            }
444デフォルトの名無しさん:2007/06/04(月) 18:28:26
>>443
それでシリアライズできるとおもうよ
445デフォルトの名無しさん:2007/06/04(月) 18:32:17
>>442
詳しくないけどこの辺の理由じゃないの?
http://dobon.net/vb/dotnet/file/xmlserializer2.html

っていうか、理解せずにテキトーに書いたって後々困るだけじゃないか?

parameterArray がListBoxのItemsに突っ込むアイテムだとしたら、どう考えても、
>XmlSerializer serializer = new XmlSerializer(typeof(object[]));
こりゃ変だw
446デフォルトの名無しさん:2007/06/04(月) 21:52:42
C#ていうか.NET系では参照渡しは多用するの?
447デフォルトの名無しさん:2007/06/04(月) 21:55:36
日本語でおk
448デフォルトの名無しさん:2007/06/04(月) 22:14:19
しないしない
.NET Frameworkのライブラリ見てたらわかるでしょ
449デフォルトの名無しさん:2007/06/04(月) 22:15:55
>>446

構造体(含む数値型、論理値型)や列挙体は値型、
それ以外のクラス型(?)は全部参照型なので、クラスインスタンスを
やり取りするときは参照渡し。

値型はref, out キーワードで参照渡しが可能。

(不正確な言い方だったらすまんです)
450デフォルトの名無しさん:2007/06/04(月) 22:18:00
値型/参照型と値渡し/参照渡しは無関係。

値型/参照型に限らずref/outをつければ参照渡しになるし、そうでなければ値渡し
451デフォルトの名無しさん:2007/06/04(月) 22:19:19
参照型オブジェクトへの参照を引数に渡すのは参照渡しじゃないぞ
参照型もrefやoutで渡せるし、ちゃんと意味がある
被った…
452デフォルトの名無しさん:2007/06/05(火) 00:26:35
void hogehoge(ref hoge class)
{
   class = null;
}
453デフォルトの名無しさん:2007/06/05(火) 00:30:03
結局>>446は「参照型の値渡し」と「refやoutによる参照渡し」の
どっちの意味で言ってたんだろ
前者なら常用されるし後者なら>>448なわけだが
454デフォルトの名無しさん:2007/06/05(火) 00:35:49
refつけた参照型のパラメータとつけないパラメータの違いって何?
教えてくれよん
455デフォルトの名無しさん:2007/06/05(火) 00:38:57
456デフォルトの名無しさん:2007/06/05(火) 00:55:52
__makerefって面白いね
457デフォルトの名無しさん:2007/06/05(火) 01:05:02
なにそれ?
458デフォルトの名無しさん:2007/06/05(火) 01:18:10
C#の隠しキーワード
int hoge = 0;
TypedReference tref = __makeref(hoge);
__refvalue(tref, int) = 5;
Console.WriteLine(__refvalue(tref, int));
出力結果:5
unsafeつけなくてもおk
459デフォルトの名無しさん:2007/06/05(火) 01:18:20
実際にtypedrefを使う場面なんかないだろ。
460458:2007/06/05(火) 01:21:19
間違えたこれじゃ意味無いな
Console.WriteLine(hoge);ね
どっちみち意味無いけど
461デフォルトの名無しさん:2007/06/05(火) 03:03:29
こんなのどこで見つけるの?
ほかにどんなのがあるの?
462デフォルトの名無しさん:2007/06/05(火) 03:47:38
コレってrefつけなくても参照になるってこと?
どんなとき使うんだろ
463デフォルトの名無しさん:2007/06/05(火) 14:23:32
エディタでも青色になるね<__makeref, __refvalue
Reflectorで見てもそのままだった
464デフォルトの名無しさん:2007/06/05(火) 17:54:06
誰かunsafeなしで値型のサイズを知る方法知らないかい?
この辺の隠し機能とかでないかのう?
465デフォルトの名無しさん:2007/06/05(火) 17:56:53
何に使うかによってあったりなかったりする。
466デフォルトの名無しさん:2007/06/05(火) 18:04:03
動的にアセンブリを作って、sizeof相当のILを実行する。
467デフォルトの名無しさん:2007/06/05(火) 18:22:18
static uint SizeOf<T>() where T : struct
{
DynamicMethod dm = new DynamicMethod(string.Empty, typeof(uint), null, typeof(T));
ILGenerator il = dm.GetILGenerator();
il.Emit(OpCodes.Sizeof, typeof(T));
il.Emit(OpCodes.Ret);
return (uint)dm.Invoke(null, null);
}

アホらし
468デフォルトの名無しさん:2007/06/05(火) 18:46:14
Marshal.SizeOfじゃあかんのん?
469デフォルトの名無しさん:2007/06/05(火) 18:48:55
marshal後のサイズでいいならそれを使えばいいわけだが、
unsafeって言ってるってことはsizeof演算子で求まる値が欲しいんだろう。
470デフォルトの名無しさん:2007/06/05(火) 21:29:15
言葉足らずだった。
>unsafeって言ってるってことはsizeof演算子で求まる値が欲しいんだろう。
そういうこと。

何で知りたいかっていうと、アトミックに値を置き換えられないサイズの値型の場合のみ
ボクシングなり参照型でラップなりして保持する、というようなことがしたかった。

ジェネリックとマルチスレッドからみでいろいろとね…
※でも実は特定サイズ以下の値型のコピーが内部的にアトミックな実装になってる「保証」はない気がする。
471デフォルトの名無しさん:2007/06/05(火) 21:30:23
>>467
あほらしさに感動したよママン
472デフォルトの名無しさん:2007/06/05(火) 21:50:45
>>467みたいなコードの方がunsafeよりよっぽどunsafeな気がする
473デフォルトの名無しさん:2007/06/05(火) 21:58:38
sizeofは普通はunsafeでしか使わんもんだけど、
それ自体はunsafeなもんじゃないんだからunsafeでなくても使えたらいいのに。
まあ混乱を招きそうだけど。
474デフォルトの名無しさん:2007/06/05(火) 22:00:14
え?普通に使えなかったっけ?
475デフォルトの名無しさん:2007/06/05(火) 22:02:23
sizeofって使い道あんまりない。
476デフォルトの名無しさん:2007/06/05(火) 22:02:42
> C# バージョン 2.0 以降、定義済みの型に sizeof を適用する場合に、unsafe (C# リファレンス) モードを使用する必要はありません。
……いつの間に。
477デフォルトの名無しさん:2007/06/05(火) 22:04:03
あ、でも T where T : struct には無理だな。> 非 unsafe で sizeof
478デフォルトの名無しさん:2007/06/05(火) 22:05:37
>定義済みの型

やっぱり使い道ないな…
479デフォルトの名無しさん:2007/06/05(火) 22:06:55
もともと分かってんだから必須じゃないもん(定義済みの型の場合)
480デフォルトの名無しさん:2007/06/05(火) 22:08:38
Emitも/unsafe必須にすればいいのに
481デフォルトの名無しさん:2007/06/05(火) 22:09:24
スレッドセーフなジェネリックコレクション実装時に、
アトミックに値を置き換えたい場合があるんだよね。
この場合、参照型もしくはアトミックに置き換え可能なサイズの値型の場合は
単に値をセットすれば言いだけだが、
そうではない値型の場合だけ特別扱いせにゃならん。
482デフォルトの名無しさん:2007/06/05(火) 22:10:42
>Emitも/unsafe必須にすればいいのに
なんでだよw
483 ◆BbdDnmVZD2 :2007/06/06(水) 02:09:21
while(i++) が型変換エラー吐くのだが、なんとかできないのこれ
484デフォルトの名無しさん:2007/06/06(水) 02:27:30
Marshal.SizeOf()
485デフォルトの名無しさん:2007/06/06(水) 02:37:35
>>483
あほ
486デフォルトの名無しさん:2007/06/06(水) 10:22:08
>>483
それは先人の知恵って奴だ。
エラー無視しちゃ駄目。
487デフォルトの名無しさん:2007/06/06(水) 11:15:20
下手なテクニカルより、ランダムで売り買いしたほうが、
バックテストのパフォーマンスが良かったりするから、使えなくはないんじゃないの?
488デフォルトの名無しさん:2007/06/06(水) 13:00:24
なんでRECTからRectangleへ仕様が変更になったの?
一発で、回転とか座標変換できないよ。
489デフォルトの名無しさん:2007/06/06(水) 13:17:51
なんでってここで聞かれてもなあ
490デフォルトの名無しさん:2007/06/06(水) 19:11:57
>>488
何でかわからないのは、おまいのRectangleの使い方がRECTだから。
491デフォルトの名無しさん:2007/06/06(水) 19:26:26
RECTってWin32の?
こんなんただのcの構造体じゃねえか。
一発で回転とか座標変換とか何を言ってるんだアホかw
492デフォルトの名無しさん:2007/06/06(水) 19:46:16
バカはバカみたいな回答しかしない手本です。
493デフォルトの名無しさん:2007/06/06(水) 20:04:13
RECTは2点のデータ持ってるけど、Rectangleは1点のデータしかないからでしょ。
というかそんなことも理解できない奴がアホつっこみすんなよ。恥ずかしい。
494デフォルトの名無しさん:2007/06/06(水) 20:11:08
>>493
現実には整数座標系で左上と右下の座標を持つというRECTの仕様は、
右下のピクセルが矩形に含まれるか否かという点でたびたび混乱を引き起こしてきた。
ttp://www.radiumsoftware.com/0402.html#040222

なので左上のピクセル+サイズという格納方法は妥当だと思うよ。
495デフォルトの名無しさん:2007/06/06(水) 20:19:46
意味的に今のが妥当だと思うが、
拡大縮小、90度単位の回転のときは、2点座標のほうがちょっとだけ楽かな。
496デフォルトの名無しさん:2007/06/06(水) 21:11:37
TextBox1とTextBox2の内容を比較するには、どのようにすればいいでしょうか?
497デフォルトの名無しさん:2007/06/06(水) 21:12:37
if (TextBox1.Text is TextBox2.Text){}
498デフォルトの名無しさん:2007/06/06(水) 21:19:14
ウソ付くなw
499496:2007/06/06(水) 21:21:32
説明がわるかったかもしれません。
そのTextBox1と2の中身が<で比較できるようにしたいのです。
500デフォルトの名無しさん:2007/06/06(水) 21:23:46
頭が悪いのか
日本語が下手なのか
センスが悪いのか
501デフォルトの名無しさん:2007/06/06(水) 21:26:02
えーと……<で比較したいのは文字の長さ……?
502デフォルトの名無しさん:2007/06/06(水) 21:26:58
503496:2007/06/06(水) 21:29:07
すいません、日本語&説明下手で・・・

Buttonを押したらTextBox1とTextBox2に入力された年号(2007/12/12)
を比較するプログラムを組みたいのですが・・・・
504デフォルトの名無しさん:2007/06/06(水) 21:32:57
>>503
単純な比較じゃ意味なし。
一旦、日付の型に直すべし。
よく考えよう。

文字の比較だけなら2007/6/6と2007/06/06は同じなのか?
違うだろ?
505デフォルトの名無しさん:2007/06/06(水) 21:33:22
>>496でそこまでわかったらリアル超能力者だぞw
DateTime.Parse
506デフォルトの名無しさん:2007/06/06(水) 21:35:27
DateTime.TryParse(this.textBox1.Text, out date1)
507デフォルトの名無しさん:2007/06/06(水) 21:38:33
>>506
それ知らなかった。
いつの間にc++のようなメソッドができたんだ。
508デフォルトの名無しさん:2007/06/06(水) 21:42:39
便宜上許されるけどそのときは必ず
例外投げるバージョンも用意しないといけないことになってる
509デフォルトの名無しさん:2007/06/06(水) 22:09:22
>>493-495
何を訳のわからないこと言ってるんだアホか本当。

>>494
その「混乱」(そんなもので混乱するプログラマってPGとして資質を欠くと思うんだが)
はRectangleでも何も変わらないじゃないかw

Rectangleに仮にRECTにない利点があるとすれば、
それは平行移動が簡単ってことだけだろう。

つーか回転ってなんのこと言ってるんだw
RectangleにしろRECTにしろ、座標系に対して「斜めでない」(二次元の直交座標の
何れか座標軸に平行な辺を持つ)長方形を表現するものでしょうが。
510デフォルトの名無しさん:2007/06/06(水) 22:16:23
おいおい
511デフォルトの名無しさん:2007/06/06(水) 22:42:20
>>508
何に対してのレス?
512デフォルトの名無しさん:2007/06/06(水) 22:48:42
そりゃ507だろ
513デフォルトの名無しさん:2007/06/06(水) 22:57:08
>その「混乱」(そんなもので混乱するプログラマってPGとして資質を欠くと思うんだが)
>はRectangleでも何も変わらないじゃないかw

アホだろお前
514デフォルトの名無しさん:2007/06/06(水) 23:48:13
>>509
君が立派なPGなれることを切に願う。
515デフォルトの名無しさん:2007/06/06(水) 23:53:40
混乱するか?
座標の回転に関係あるか?
516デフォルトの名無しさん:2007/06/07(木) 00:19:10
>>515
君の意見を聞きたい。
矩形を表すデータ構造RECTのRECT.right、RECT.bottomの点は、矩形に含まれるの? で、そう思う根拠は?
線を表すデータ、始点のPoint構造体、終点のPoint構造体があるとして、終点はその線に含まれるの? で、そう思う根拠は?
これを明確に回答できるなら、混乱してないだろうな。回答できないなら、かなりのバカ。
517デフォルトの名無しさん:2007/06/07(木) 00:24:11
根拠ってw

プログラミングは数学でも自然科学でもない、どちらかといえば人文的なものだ。
要するに定義の問題に過ぎないだろうに。
ウダウダ言ってないでドキュメント読む。無ければ自分で確認する。
それだけのことだろうに。
518デフォルトの名無しさん:2007/06/07(木) 00:27:04
ありがとう。
519デフォルトの名無しさん:2007/06/07(木) 00:38:30
C#のListViewでExcelの分割みたいな事はできないのでしょうか?
カラム幅でぴこぴこスプリッタが動く様な。
既製のコントロールとかでもいいので、教えてください。
520デフォルトの名無しさん:2007/06/07(木) 00:59:47
さっきからアホアホゆーてる>>517==509は>>491なの?
だとしたら
>一発で回転とか座標変換とか何を言ってるんだアホかw
というのはつまり
>Rectangleに仮にRECTにない利点があるとすれば、
>それは平行移動が簡単ってことだけだろう。
という発言がアホだと言いたいんだよね?
521デフォルトの名無しさん:2007/06/07(木) 01:02:30
またやってるのかよ
522デフォルトの名無しさん:2007/06/07(木) 03:42:12
>>517
ひとつの仕様に対して自分の意見のないバカがPGの資質とか語るなよ。
523デフォルトの名無しさん:2007/06/07(木) 09:30:59
つづきは電話でやれ
524デフォルトの名無しさん:2007/06/07(木) 09:32:09
ハロー、ダーリン
525デフォルトの名無しさん:2007/06/07(木) 23:05:26
>>496
戻ってきてもいいが、いちから全部聞くのはなしね。
526デフォルトの名無しさん:2007/06/08(金) 05:01:35
質問です。

現在、下記のようなソリューション構成で趣味の開発をしています。

 ソリューションhoge(2プロジェクト)
┣ プロジェクトhage(Windowsアプリケーション)
┃┗ 参照設定
┃ ┗ hige
┗ プロジェクトhige(クラスライブラリ)


【環境】
VisualC#2005 Express , WindowsXP HOME
527526:2007/06/08(金) 05:02:18
・・・書き込み途中orz
書き直します
528526:2007/06/08(金) 05:06:01
質問です。

現在、下記のようなソリューション構成で趣味の開発をしています。

 ソリューションhoge(2プロジェクト)
 ┣ プロジェクトhage(Windowsアプリケーション、hage.exeを生成)
 ┃┗ 参照設定
 ┃ ┗ hige
 ┗ プロジェクトhige(クラスライブラリ、hige.dllを生成)

VSのデフォルトだと、hige.dll は hage.exe と同じ場所にローカルコピーされるのですが、
これを lib/hige.dll の位置にしたいのです。
どのような方法がありますか?

【環境】
VisualC#2005 Express , WindowsXP HOME
529デフォルトの名無しさん:2007/06/08(金) 09:46:49
プロジェクトのプロパティ
530デフォルトの名無しさん:2007/06/08(金) 12:25:20
ドトネトのアプリってdllを参照するパスって指定できるんだっけ?

もし出来ないとしたら、ユーザーの環境に配置するときも>>528みたいに
dllをサブフォルダに突っ込むと参照できないと思うんだけど。
531デフォルトの名無しさん:2007/06/08(金) 12:41:35
サブディレクトリなら構成ファイルで指定すればいい
532デフォルトの名無しさん:2007/06/08(金) 14:57:39
ListBoxで選択したアイテムをDataGridに表示させたいだけど
どのようにすればいいかな?
533デフォルトの名無しさん:2007/06/08(金) 15:58:31

datagrid1.rows(hoge).cells(hage).value = ctype(listbox.items(sine),string)
こんな感じじゃいけないの?
534デフォルトの名無しさん:2007/06/08(金) 17:57:13
ctype
535デフォルトの名無しさん:2007/06/09(土) 01:22:36
(藤井隆)松山ケンイチ
キャストできそうだ。
536デフォルトの名無しさん:2007/06/09(土) 15:13:02
Visual C# 2005 Expres Editionでフォームを作って遊んでいるのですが、
HTMLでいう<h>タグのような横線を入れるにはどのコントロールを使えばいいのでしょうか?
537デフォルトの名無しさん:2007/06/09(土) 15:16:08
h じゃなくて hr じゃないのかと
538デフォルトの名無しさん:2007/06/09(土) 15:26:31
横線を入れるコントロールは無いよ。
ラベルか何かを細長くしてそれっぽく見せたら?
539デフォルトの名無しさん:2007/06/09(土) 15:52:48
540536:2007/06/09(土) 16:34:42
private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

{
  Graphics g = pictureBox1.CreateGraphics();
  Pen pen1 = new Pen(Color.FromArgb(172, 168, 153), 1);
  Pen pen2 = new Pen(Color.White, 1);
  g.DrawLine(pen1, 0, 0, 600, 0);
  g.DrawLine(pen2, 0, 1, 600, 1);
  pen1.Dispose();
  pen2.Dispose();
  g.Dispose();
}

横線コントロールはないとのことですが、ラベルで描画する方法がわからず断念。
結局、ttp://dobon.net/vb/dotnet/graphics/drawline.htmlなどを参考にして
こんな感じでなんとか実装させたところ、単純明快な>>539が出てきて吹きました。
すみません、<h>じゃなくて<hr>でしたね。失礼しましたorz
横線コントロールがあれば簡単なのになぁと思いましたが、
何はともあれ、>>537-539さん、本当にありがとうございました! 助かりました。
541デフォルトの名無しさん:2007/06/09(土) 16:58:44
C# 2003を使っています。

Process実行時の環境変数はどうやれば設定できるのでしょうか?

Processを実行する場合、ProcessStartInfo.EnvironmentVariablesで
現在の環境変数は取得できるみたいですが、そのProcessに対して
環境変数を設定するメソッドがみつかりません。

2005では、Environment.SetEnvironmentVariableというのが追加されていますが、
2003にはこれに代わるものはないのでしょうか?
542デフォルトの名無しさん:2007/06/09(土) 17:09:40
追加されたってことはそれまでなかったってことだからな
Win32API 呼び出すしかないんじゃない?
543541:2007/06/09(土) 17:32:03
やっぱりそうなんでしょうか?
もう少し調べてみます(;´Д`)
544デフォルトの名無しさん:2007/06/10(日) 06:05:00
ProcessStartInfo.EnvironmentVariables.Add()
545デフォルトの名無しさん:2007/06/10(日) 15:18:56
XmlSerializerで循環参照もったオブジェクトのシリアライズするのって
どんな感じですればいいんでしょうか?
普通にやると例外出てしまいます。
546536:2007/06/10(日) 15:43:08
http://up.spawn.jp/file/up25434.png
このような透過テキストを実現するにはどのようにしたらよいでしょうか?
ラベルのプロパティをいじってみてもわかりませんでした…。
547546:2007/06/10(日) 15:44:11
すみません、名前はミスです。
548デフォルトの名無しさん:2007/06/10(日) 15:50:22
ForeColorにalphaつきのColorあげればいいんじゃない?
549546:2007/06/10(日) 16:35:29
>>548
お答えありがとうございます。ForeColorに設定してもだめだったので、
BackColorに設定することも試み、以下のようにしてみたのですが、
結果はこのようになってしまいます。
http://up.spawn.jp/file/up25452.png

// label1
this.label1.BackColor = System.Drawing.Color.FromArgb(100, 100, 100, 100);
this.label1.ForeColor = System.Drawing.Color.FromArgb(100, 100, 100, 100);
// label2
this.label2.BackColor = System.Drawing.Color.FromArgb(100, 200, 200, 200);
this.label2.ForeColor = System.Drawing.Color.FromArgb(100, 200, 200, 200);
550デフォルトの名無しさん:2007/06/10(日) 16:46:51
ControlPaint.DrawStringDisabled
551デフォルトの名無しさん:2007/06/10(日) 18:36:44
>>546
まずその俺様定義の「透過テキスト」って言葉の意味を
はっきりさせるのが先決じゃないの?

その画像みても100人中100人がそれを「透過テキスト」とは呼ばないことは
俺が保証するよ。
552546:2007/06/10(日) 19:55:39
>>550さんが教えてくださったメソッドで検索し、見事な回答にたどり着いたのですが、
どうも>>546のように立体的にはならず文字色が灰色に変わるだけでした。
結局、ラベルの上にまた透過させたラベルを重ねることで実現させたのですが、
Enableプロパティを「False」、FlatStyleプロパティを「System」にするだけで
実現できることを後から発見いたしましたorz

すみません、「透過テキスト」ではなく「無効状態の文字列」と呼ぶのが正しかったです。
検索すればすぐに出るような質問をしてしまい申し訳ございませんでした。
お答えくださった>>548 >>550-551さん、本当にありがとうございました。
553デフォルトの名無しさん:2007/06/10(日) 20:45:29
Javaで開発する時、HTMLをベースにしたWeb画面での表示ってJSPで作成すると思いますが
C#だとHTMLをベースにした画面の表示ってどういった方法で作成するのでしょうか?
参考書を見てもいわゆるフォームでの実装(ボタンを押下したらどういったイベントが走るとか)
しか乗っていませんので教えてください
554デフォルトの名無しさん:2007/06/10(日) 20:48:48
ASP.NETのこと?
555デフォルトの名無しさん:2007/06/10(日) 21:29:05
>>554
はい
556デフォルトの名無しさん:2007/06/10(日) 21:35:10
分かってんなら ASP.NET の参考書読めよ
557デフォルトの名無しさん:2007/06/10(日) 21:36:07
ファイル→新規作成→Webサイト→ASP.NET Webサイト、場所:ファイルシステム、言語:C#

というかぐぐれ
558デフォルトの名無しさん:2007/06/11(月) 13:53:16
VS2005のウィンドウの右側に「ソリューションエクスプローラ」と「プロパティ」を
自動的に隠さない(ピンが下向き)設定で上下に並べているのですが、
プロパティの方を縦に広くしておいても、再起動後には小さめになってしまいます。
このあたりの設定を固定しておくことはできないのでしょうか?
559デフォルトの名無しさん:2007/06/11(月) 19:22:53
ASP.NETってどう発音してる?
うちの上司はアスプテンネットって言ってるんだが、同じように言っていいものか悩む
560デフォルトの名無しさん:2007/06/11(月) 19:25:49
ei-ess-pee dot net
561デフォルトの名無しさん:2007/06/11(月) 19:26:13
えいえすぴーどっとねっと
562デフォルトの名無しさん:2007/06/11(月) 19:27:49
あすぷどっとねっと
563デフォルトの名無しさん:2007/06/11(月) 19:37:55
あーえすぱーだっとねーと
564デフォルトの名無しさん:2007/06/11(月) 19:54:54
ListBoxで選択されたアイテムをDataGridに表示させたいのですが、どのようにしたらいいでしょうか?

foreach(object item listBox1.SelecteItem)
{
   listBox2.item
}

のような形でやろうとしたのですが、上手くいかず・・・ご教授お願いしますm(__)m
565デフォルトの名無しさん:2007/06/11(月) 20:04:53
日本語で頼む
566デフォルトの名無しさん:2007/06/11(月) 20:08:58
ListBoxにある項目を選択した状態で、Botton1を押すと、選択した項目をDataGridに
表示させたいのです。
567デフォルトの名無しさん:2007/06/11(月) 20:14:49
すみません、教えてください。

listviewのカラムにプログレスバーを置くのってできますか?
難しいんでしょうかね?
568デフォルトの名無しさん:2007/06/11(月) 20:16:52
できます。
あなたには難しいかもしれません。
569デフォルトの名無しさん:2007/06/11(月) 20:17:00
>>567
オーナードローとかになるんじゃね?

そういやオーナードローよりもライトな○○ドローってなかったっけ?
570デフォルトの名無しさん:2007/06/11(月) 20:18:16
DirectDraw
571デフォルトの名無しさん:2007/06/11(月) 20:41:58
>>564
DataGridのデータソースのアイテム.Clear();
foreach (object item in this.listBox1.SelectedItems)
{
  DataGridのデータソースのアイテム.Add(item);
}

これ以上は日本語で頼む
572567:2007/06/11(月) 20:44:26
わかりました!頑張って調べてみます!

ありがとうございました
573デフォルトの名無しさん:2007/06/11(月) 20:50:44
>>567
普通のプログレスバー貼り付けて位置だけ調節すればよくね?
574デフォルトの名無しさん:2007/06/11(月) 20:56:29
>>573
そうしたいんですけど・・・
スクロールしなければならない程アイテムがおおいんです・・


ありがとうございます
575デフォルトの名無しさん:2007/06/11(月) 21:05:44
1200ほどの座標配列をGraphics.DrawLineで折れ線グラフにしています。

しかしStopwatchで計ったところ700msはかかってしまいます。

Graphics.DrawLines以外の高速な線の描画方法をご存知ないでしょうか?

よろしくお願いします。
576デフォルトの名無しさん:2007/06/11(月) 21:09:00
WPFでも試してみれば
577デフォルトの名無しさん:2007/06/11(月) 21:18:02
>>575
もしFormのPaintで毎回DrawLinesしてるなら、
描画自体は速くはならないがいったんBitmapオブジェクトに描画して
保存しておけば再表示は速くなる。
578575:2007/06/11(月) 21:28:59
>>576
正式リリース時に試すつもりです。

>>577
環境詳しく書かず、すいません。

PictureBoxに描画
折れ線は4本
座標変換&描画で700ms
裏画面としてBitmapを保持しています。

また紛らわしいかもしれませんが
DrawLinesではかなり早いです。
DrawLineを使用して700msという状況です。
※欠線なども考慮しているためDrawLinesでは都合が悪いのです。
579デフォルトの名無しさん:2007/06/11(月) 22:01:13
580デフォルトの名無しさん:2007/06/11(月) 22:07:36
>※欠線なども考慮しているためDrawLinesでは都合が悪いのです。
ちょっとよく意味が分かりませんが。。
581デフォルトの名無しさん:2007/06/11(月) 22:13:06
>>578
> 正式リリース時に試すつもりです。

.NET Framework 3.0 はもう Windows Update からでもインストールできるが。
582デフォルトの名無しさん:2007/06/11(月) 22:25:40
VS 2007 の正式リリースってことかな?

やっぱ多くの人にとって、IDE まで出て初めて正式リリースなのかな。
583デフォルトの名無しさん:2007/06/11(月) 22:59:36
昔々Cで書いたプログラムをC#に移植しているのですが、
sprintfの書式指定の部分をどうすれば良いか解らなくて
困っております。

unsigned long sum = 0;
char str[64];
/* 省略 */

/* この部分をどう置き換えるか解りません */
/* どうやればいいのでしょうか? */
sprintf(str,"%lx",sum);
584デフォルトの名無しさん:2007/06/11(月) 23:05:49
>>583
まあ、それくらいなら sum.ToString() でできるけど、
もっと凝ったことしたい場合は
string.Format か System.Text.StringBuilder 使う。
585デフォルトの名無しさん:2007/06/11(月) 23:06:47

string str = sum.ToString();
586デフォルトの名無しさん:2007/06/11(月) 23:09:07
ありゃ x だったんだね。
587デフォルトの名無しさん:2007/06/11(月) 23:16:47
string str = sum.ToString( "X" );
588デフォルトの名無しさん:2007/06/11(月) 23:19:24
何そのミッフィーの口みたいの
589デフォルトの名無しさん:2007/06/11(月) 23:25:27
('x')

(*x*)

( ゜x ゜)

( ; x ; )

(@x@)

590デフォルトの名無しさん:2007/06/11(月) 23:30:23
聞く前に 使 っ て み ろ
591デフォルトの名無しさん:2007/06/11(月) 23:36:48
.dllファイルのパブリックプロパティの型と名前を参照したい
んですけどできません;;
リフレクションをキーワードにいろいろ探ってみたのですが、
なかなかこれだって思うものがなくて。
どなたかお力を貸してください><
592デフォルトの名無しさん:2007/06/11(月) 23:50:54
パブリックプロパティの型とか意味が分からん
593デフォルトの名無しさん:2007/06/11(月) 23:59:01
いや、それはそれで。
dll とパブリックプロパティの関係が不明だけど。
594デフォルトの名無しさん:2007/06/12(火) 00:01:46
>< これは女以外禁止
男が使うものではない。
595デフォルトの名無しさん:2007/06/12(火) 00:05:09
dllとどういう関係があるかわからんが?

PropertyInfo メンバ
596デフォルトの名無しさん:2007/06/12(火) 00:07:12 BE:610452364-PLT(12500)
>>584-587
ありがとうございます。
597デフォルトの名無しさん:2007/06/12(火) 00:31:57
C#でUSBストレージにアクセスするプログラムで困っています。 Eドライブのストレージにアクセスする場合に、以下のように作成したのですが、
一向にコマンドが送信される様子がありません。

hundle = CreateFile("\\\\.\\E:" GENERIC_WRITE | GENERIC_WRITE,  FILE_SHARE_WRITE | FILE_SHARE_READ,
NULL, OPEN_EXISTING, 0, NULL);
     〜略〜
    result = WriteFile(hundle, pnt, (uint)data.Length, out NumberOfBytesWritten, IntPtr.Zero);

[DllImport("kernel32", SetLastError = true)]
private static extern IntPtr CreateFile(
string filename, uint desiredAccess,
uint shareMode, uint attributes,
uint creationDisposition, uint flagsAndAttributes,
uint templateFile );

[DllImport("Kernel32.dll", SetLastError = true, EntryPoint = "WriteFile")]
private static extern bool WriteFile(
IntPtr handle, IntPtr buffer, uint length, out uint outNum,
IntPtr over );

何か間違っているところがあるのでしょうか?
ちなみに、WriteFileの代わりにDllを使って、DeviceIoControlでアクセスを試みたのですがこちらもできませんでした。
何かご教授ください。
598デフォルトの名無しさん:2007/06/12(火) 00:50:25
まず C か C++ で動くか確認するのが先決な気がする
599デフォルトの名無しさん:2007/06/12(火) 01:03:28
フンドル


ってなに?


そのまえにDirectoryInfoとかDriveInfoでアクセスしない理由(あるとは思うけど)
はなに?
600デフォルトの名無しさん:2007/06/12(火) 01:06:16
flush
601デフォルトの名無しさん:2007/06/12(火) 01:09:19
>>599
知らない or VS2003使い だろうな。
602575:2007/06/12(火) 09:00:18
>>580
データがない場合は線を引かない、ということを表現するため
与えられた座標にすべて線を引いてしまうDrawLinesでは都合が悪いということです。

>>581,582
そうです、IDEフェチなのでVS2007待ちです。
603デフォルトの名無しさん:2007/06/12(火) 09:13:29
2007は出ない
2008なら出る
604デフォルトの名無しさん:2007/06/12(火) 09:46:39
2007年中に2008が出るな
605デフォルトの名無しさん:2007/06/12(火) 10:01:11
そんな細かい所どうでもいいだろうに・・・

恐らく観測の結果か何かなのだろうけど
せめて欠損していない部分までのデータ単位でDrawLinesやってみるのはどう?

有有有無無有有無有有有
なら 3,2,2 のポイントで線を引くような
そもそも欠損時はラインを引かない・ データのある部分1点が欠損に囲まれれば点だけの描画になる
というイメージだけど
606デフォルトの名無しさん:2007/06/12(火) 10:01:35
2007もうでてるじゃん。うちには、申込書きてたよ
607デフォルトの名無しさん:2007/06/12(火) 10:02:29
すまん誤爆
608デフォルトの名無しさん:2007/06/12(火) 11:17:27
>>602
1200本のライン程度で時間かかってるな。幅のあるラインやアンチエイリアスしてるのかな?
ところでDrawLineを使ってどのくらい遅くなってる?
609デフォルトの名無しさん:2007/06/12(火) 12:35:13
>>602
全部互いにまったく繋がりのないバラバラの線分ってわけかな?
つながってる部分があればその部分だけでもDrawLinesで....ってそのぐらい人に言われなくてもやるよね。

>>608
どのぐらいってちゃんと書いてあるじゃん。
昨日正100角形の対角線を引くコード書いて実測してみたけど
>>575の話は大げさじゃないと思う。
610デフォルトの名無しさん:2007/06/12(火) 12:36:54
あと、一応ベタにDrawLineで線引っ張る方法と一旦GraphicsPathに必要な線分を
追加してから描画する方法を試したが、普通に前者の方が速かった。
611デフォルトの名無しさん:2007/06/12(火) 13:39:59
じゃあもうDirectXで
612デフォルトの名無しさん:2007/06/12(火) 13:51:44
>>609
>ところでDrawLineを使ってどのくらい遅くなってる? 
そう読めるね。すまん、ちょっと訂正。
DrawLinesの何倍遅くなっているか。またはDrawLinesでどのくらいかかってるか。

あと足りない情報としては画像は
何ビットX何ビットの大きさか。画像の色数。
pictureboxに描画するとき1, 2のどちらの方法を使用しているか。
1直接描画
Graphics g = pictureBox.CreateGraphics()
2ダブルバッファ
Bitmap bitmap = new Bitmap(1024, 768, PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(bitmap);
 :
pictureBox.Image = bitmap;
613575:2007/06/12(火) 14:09:40
> DrawLinesの何倍遅くなっているか。またはDrawLinesでどのくらいかかってるか。

 DrawLinesは理想的な速度で100msちょっとです。
 DrawLineでは700msちょっとです。

> 何ビットX何ビットの大きさか。画像の色数。

 pictureBoxのサイズは
 Width = 668
 Height = 452
 裏画面尿Bitmapのインスタンスはデフォルトのコンストラクタで作成しているので
 PixelFormat.Format32bppArgbになります。
 です。

> pictureboxに描画するとき1, 2のどちらの方法を使用しているか。
> 1直接描画
> Graphics g = pictureBox.CreateGraphics()
> 2ダブルバッファ
> Bitmap bitmap = new Bitmap(1024, 768, PixelFormat.Format24bppRgb);
> Graphics g = Graphics.FromImage(bitmap);
> :
> pictureBox.Image = bitmap;

 2.のダブルバッファです。
 Bitmap backgroundBMP = new Bitmap(pictureBox.Width, pictureBox.Height);
 Graphics g2 = Graphics.FromImage(bitmap);
  :
 g2.DrawLine
  :
 Graphics g = pictureBox.CreateGraphics()
 g.DrawImage(backgroundBMP, backgroundGraphics.VisibleClipBounds);
614575:2007/06/12(火) 14:11:59
すいませんダブルバッファのコードがすこしちがっていました。
正しくはこうですね。

 Bitmap backgroundBMP = new Bitmap(pictureBox.Width, pictureBox.Height);
 Graphics g2 = Graphics.FromImage(backgroundBMP);
  :
 g2.DrawLine
  :
 Graphics g = pictureBox.CreateGraphics()
 g.DrawImage(backgroundBMP, backgroundGraphics.VisibleClipBounds);
615デフォルトの名無しさん:2007/06/12(火) 14:26:47
こっちで計ると時間差は1.5-1.8倍程度だな。7倍の差というのは何だろう?
616575:2007/06/12(火) 14:31:11
>> 615
1200の座標配列が4本なので、その差ではないでしょうか?
617デフォルトの名無しさん:2007/06/12(火) 15:06:52
700msくらいいいんじゃないの。エクセルより速いべ…たぶん
618デフォルトの名無しさん:2007/06/12(火) 15:15:39
>>616
LinesとLineに同じ仕事をさせてるかどうか疑問になってきた。
違ってたら比較にはならないと思うのだが。
ラインの本数が同じなのは当然として、線の長さも処理時間にかかわってくる。
619575:2007/06/12(火) 16:40:14
>>617
(゚д゚)

>>618
現在ダミーデータとして画面いっぱいにギザギザになるデータをぶちこんでます。
/|/|/|/| ← イメージ
なので線の長さは最大値だと思います。

DrawLineの代替手段があればと思ったのですが、あとはWinApiを叩くしかなさそうですね。
620デフォルトの名無しさん:2007/06/12(火) 17:25:37
>>619
GDI+というかDIBは基本的にソフトウェア描画だけど、
メソッド呼び出し1回のDrawLinesのスループットが許容範囲内なら、
同じことを自前でCPU処理させても多分同程度の速度はでる。
Bitmapをロックしてポインタで自前描画とかね。
このスレで一日粘るぐらいの時間があれば十分作れるんじゃない?
有名なBresenham Line Algorithmとか。

GDIのAPI叩いてDDBに描画するようにすれば
環境によっては速くなるかもしれないけど
VistaのWDDM以降はDDBのハードウェアアクセラレーションが
効かなくなるので注意ね。
621デフォルトの名無しさん:2007/06/12(火) 22:15:38
>>594


(>く)

これ流行らそうとおもってるんだが。。
622デフォルトの名無しさん:2007/06/12(火) 22:20:02
>>621
流行らないけど頑張れ
623デフォルトの名無しさん:2007/06/12(火) 22:25:03
>>622
うんっ!!
624デフォルトの名無しさん:2007/06/12(火) 22:27:00
464 名前:774RR[sage] 投稿日:2007/06/08(金) 15:22:44 ID:kBx94wfw
ナイチチをステータスと感じる男は共感するし、感心する。
だがナイチチをステータスと感じる女は、正直どうかしてると非難する。

なぜなら、ナイチチに悩み隠そうとする乙女心が、俺達ナイチチーズの心をくすぶるのだから。

465 名前:774RR[sage] 投稿日:2007/06/08(金) 15:55:26 ID:Ryi/Gc9E
> くすぶる


466 名前:774RR[sage] 投稿日:2007/06/08(金) 15:56:08 ID:Ryi/Gc9E
(> く)

467 名前:774RR[sage] 投稿日:2007/06/08(金) 15:57:08 ID:Ryi/Gc9E
これ流行るかな?

(> く)

468 名前:774RR[sage] 投稿日:2007/06/08(金) 16:05:45 ID:fR8Q4Wvk
はやるわけありません!(> く;)
625デフォルトの名無しさん:2007/06/12(火) 22:42:04


これが乳首に見える
626デフォルトの名無しさん:2007/06/13(水) 00:31:11
さっきからうざいよ。
627デフォルトの名無しさん:2007/06/13(水) 00:42:29
みんながおもしろいとでも思っているんのだろうか。
感性が小学生みたいだ。
628デフォルトの名無しさん:2007/06/13(水) 01:41:40
>>575
Linesの集合に変換して、Linesで描画でいいんじゃね?
フォントのアウトライン表示ではそういう方法取る。
629デフォルトの名無しさん:2007/06/13(水) 12:38:37
>>628
グラフィック関係触ったことないのバレバレの恥ずかしいこと言ってるよ君w
連続しない線分はDrawLinesじゃ書けないんだよ
630デフォルトの名無しさん:2007/06/13(水) 13:17:14
>>629
>>628>>609の前半にあることと同じことを言ってるだけで
別に変なことは言ってないと思うよ。
631デフォルトの名無しさん:2007/06/13(水) 13:18:28
DataGridの中身を初期化したいんだけど、どうすればいいかな。
632デフォルトの名無しさん:2007/06/13(水) 13:20:57
なんでお前は前からDataGridにこだわっているんだ?
633デフォルトの名無しさん:2007/06/13(水) 14:09:29
>>629
おまえは日本語も読めないのか?
634デフォルトの名無しさん:2007/06/13(水) 15:09:00
>>631
いいかげんにしろ、カス。
635デフォルトの名無しさん:2007/06/13(水) 15:22:28
>>631
つ【コンストラクタ】
636デフォルトの名無しさん:2007/06/13(水) 15:28:08
DataGridバカは質問しっぱなしで毎回消えるからなぁ
637デフォルトの名無しさん:2007/06/13(水) 19:09:34
質問です。
MDIで子ウィンドウを親ウィンドウの外に出してやるには
どうすればよいでしょうか?
638デフォルトの名無しさん:2007/06/13(水) 19:13:09
>>637
冗談は顔だけにしろよ
639637:2007/06/13(水) 19:35:51
ごめんなさい。
本気で分かりません(;つД`)
640637:2007/06/13(水) 19:43:27
お騒がせしました。
自己解決しました
641デフォルトの名無しさん:2007/06/13(水) 20:51:31
MDI子にしないで普通の子ウィンドウにする
642デフォルトの名無しさん:2007/06/13(水) 21:18:47
>>640
おい!どうやって解決したんだよ!
643デフォルトの名無しさん:2007/06/14(木) 11:17:36
横槍だが、>>638はスレ違いだろ。
優しくレスできないなら、そもそもレスしないかまたはお死になさい。
644デフォルトの名無しさん:2007/06/14(木) 11:25:59
っ[鏡]
645デフォルトの名無しさん:2007/06/14(木) 21:00:06
質問です。
Format8bppIndexedなBitmapのColorPaletteをforでブン回して設定し
直したのですが、どうしても設定するときにColorのRとBが入れ替わっていまい、
ColorPaletteをセットしたときに色が反転してしまいます。
これはなぜなのでしょうか?
646デフォルトの名無しさん:2007/06/14(木) 21:20:34
よくわからん現象だな。
なんかほかに条件は? ある画像だけとかある画像形式だけとか。
GDI 通してるとか。
647デフォルトの名無しさん:2007/06/14(木) 21:29:51
>>645
ピクセルフォーマットをチェック。
AARRGGBBとかXXBBGGRRとか色々ある。
GDI+とかDirectXは前者(が主流)。
GDIのCOLORREFは後者。
648デフォルトの名無しさん:2007/06/14(木) 21:43:22
>>646,647
新しくBitmapを作って、それにFormat8bppIndexedを指定しているので
GDIは通してないと思います。
また、Colorにはアルファを設定していません。
649デフォルトの名無しさん:2007/06/14(木) 21:45:44
んー? そりゃ変だな。
再現コード書いてみてくれる?
650デフォルトの名無しさん:2007/06/14(木) 21:49:09
Color.FromArgb の引数勘違いとかないよな?
651デフォルトの名無しさん:2007/06/14(木) 21:52:51
テストコードうpしろ。
ポインタとかでやってないよな?
652デフォルトの名無しさん:2007/06/14(木) 21:55:22
>>649
以下が問題のコードです。一度Format24bppRgbにした所、元の色が出たので
減色時にデータがひっくり返ってる訳ではなさそうです。

byte[] result;//256色に減色したデータ
Color[] colors;//256色
Bitmap canvas = new Bitmap(image.Width, image.Height, PixelFormat.Format8bppIndexed);
ColorPalette cp = canvas.Palette;
for (int i = 0; i < cp.Entries.Length; i++)
{
    //ここをcp.Entries[i] = colors[i];とすると色がひっくり返る
    cp.Entries[i] = Color.FromArgb(colors[i].B, colors[i].G, colors[i].R);
}
canvas.Palette = cp;
data = canvas.LockBits(new Rectangle(0, 0, canvas.Width, canvas.Height), ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
Marshal.Copy(result, 0, data.Scan0, result.Length);
canvas.UnlockBits(data);

>>650
他の部分も見直した所そのような所はないと思います。
653デフォルトの名無しさん:2007/06/14(木) 21:57:06
>>648
GDIは通してなくても
BMPファイルのフォーマットって
インデックスカラーはCOLORREF型で格納すること、
って仕様だからなぁ。
その辺の影響調べてみたら?
654デフォルトの名無しさん:2007/06/14(木) 22:00:45
なんかわかったかも。。。
655652:2007/06/14(木) 22:30:24
Color.FromArgb(colors[i].B, colors[i].G, colors[i].R)とほとんど変わらないですが、
Color.FromArgb((255 << 24) + ColorTranslator.ToWin32(colors[i]))とした所、
色が反転せずに表示されました。
ColorPaletteの中身ってAABBGGRRの形で保持されてるんですね…
ColorPaletteについて書いてる所は大抵DXやグレースケールへの変換方法
しか書いていないので嵌ってしまった orz
解答してくださった方々、ありがとうございました。

#MSDN見たら
#最下位の 8ビットが青、次の 8 ビットが緑、その次の 8 ビットが赤、最上位の 8 ビットが
#アルファという構成になっています。
#って書いてあった。なんだこれ orz
656デフォルトの名無しさん:2007/06/14(木) 22:38:14
どう考えてもその colors が問題じゃね? どっから出てきたんか知らんけど
657デフォルトの名無しさん:2007/06/15(金) 11:44:03
Accessのfix関数と同じ物がfloor関数だと思うのですが
Accessのint関数と同じ関数はないのでしょうか?
-2.5は-3に、-2.4は-2の結果が欲しいのですがどうしていいか分かりません・・・
658デフォルトの名無しさん:2007/06/15(金) 11:47:34
math.round
とかどう?
659デフォルトの名無しさん:2007/06/15(金) 12:46:15
0から遠いほうに丸める、か。なるほどねー
660デフォルトの名無しさん:2007/06/15(金) 12:55:11
>>659のやっさしさに脱帽
661デフォルトの名無しさん:2007/06/15(金) 13:58:54
0.5でやってみろ
662デフォルトの名無しさん:2007/06/15(金) 14:01:37
>>661
MidpointRounding.AwayFromZero で
-2.5 → -3
-2.4 → -2
0.5 → 1
だったけど
663デフォルトの名無しさん:2007/06/15(金) 14:40:30
やってんならいいよ
664デフォルトの名無しさん:2007/06/15(金) 16:36:25
0.5足して切捨てしてたんですけど
もしかして0.5足してroundすればいいの?
ちょっと、やってみます
665デフォルトの名無しさん:2007/06/15(金) 16:37:52
ナニイッテンダー
666デフォルトの名無しさん:2007/06/15(金) 16:41:22
早まるなwwwwww
667デフォルトの名無しさん:2007/06/15(金) 17:06:01
Roundの引数にMidpointRounding.AwayFromZeroで
四捨五入になるんですね!

ありがとうございました!
668デフォルトの名無しさん:2007/06/15(金) 19:19:35
2.0から四捨五入が可能になってたんだな知らなかった。
でもアクセスの丸めは四捨五入じゃなくて「銀行の丸め」ってやつだと思うけど。
669デフォルトの名無しさん:2007/06/15(金) 19:22:34
銀行丸めはMidpointRounding.ToEven
670デフォルトの名無しさん:2007/06/15(金) 19:30:50
というか、普通にintにキャストすればアクセス(というかVBA?)の関数の動作とたぶん同じなんじゃないかと思う
671デフォルトの名無しさん:2007/06/15(金) 19:34:51
それVB
672デフォルトの名無しさん:2007/06/15(金) 20:25:06
すいません。
C#を使って、サイトの更新情報(ヘッダーやサイトの更新日、サイズ)などを調べたいのですが
Googleなどで調べる際に目安となりそうなキーワードやサイトってないですかね?

関連性のありそうな言葉がまったく思いつかないんですわ。 orz
673デフォルトの名無しさん:2007/06/15(金) 20:30:26
WebRequest
674672:2007/06/15(金) 22:27:55
サンクス
675デフォルトの名無しさん:2007/06/15(金) 22:31:59
クラスどうこうより先に HTTP のお勉強の方が先かも知れぬ
676デフォルトの名無しさん:2007/06/15(金) 22:37:37
>>672
意外とjavaのスパイダークッキングレシピとかいう本が参考になる。
677デフォルトの名無しさん:2007/06/15(金) 22:39:44
C#を使ってDirectShowプログラミングをしたいのですが、何かいい方法ありますか?
動画を扱うプログラムとか出来ればいいなぁと思ってます
ちょっとググったらManaged DirectShowなるものは無いらしいんですけども、解決方法があれば教えて欲しいです

しかし、DirectShow自体使ったこと無いんですが、DirectShowの本てほんと無いですね
678デフォルトの名無しさん:2007/06/15(金) 22:42:25
>>677
いい方法なし。地道にテストコード書いていくべし。
ググって見つかるサイト程度しか情報がない。

サンプルコード程度ならなんとかなるが
本格的にやるのは大変

679デフォルトの名無しさん:2007/06/15(金) 22:59:56
>>678
やっぱりそうですか
少し自力でやってみます
(挫折しそうだ・・・
680デフォルトの名無しさん:2007/06/15(金) 23:00:57
誰か海外の人が DirectShow.NET だかなんだか公開してくれてなかったっけ?
681デフォルトの名無しさん:2007/06/15(金) 23:02:35
DirectShowNET
682デフォルトの名無しさん:2007/06/15(金) 23:15:48
Visual C# 2005 Express Editionを使用しています。
プレーンテキストファイル中の文字列の、所々を色を変えて表示したいと思い、
richTextBoxにファイルの中身をロードして色を変えたい部分をrichTextBox1.SelectionStartと
richTextBox1.SelectionLengthで選択し、richTextBox1.SelectionColorで色を設定したところ、
私の意図したとおり、色が変わって表示されました。それは良いのですが、SelectionStartと
SelectionLengthで文字列が選択されると、カーソルがその選択場所に移動します。
私にはそのカーソル移動表示処理が結構時間を要しているように思えます。
色を変えて表示したい部分はたくさんあり、カーソル移動も頻繁に発生するので、
ちょっと我慢しにくいです。文字列の所々を色を変えて表示させるのに、もっと高速な
方法はないものでしょうか?
683デフォルトの名無しさん:2007/06/16(土) 00:42:54
>>681
DirectShowNETでググったらわかりやすいC#のDirectShowプログラミングのサンプルが紹介されているページにたどり着きました
ありがとう
684デフォルトの名無しさん:2007/06/16(土) 01:00:27
ジェネリックが便利とかはすぐ理解できたんだが
http://www.atmarkit.co.jp/fdotnet/csharp20/csharp20_01/csharp20_01_01.html
の匿名クラスがいいとかなんとかが、何がいいのか理解できない
わかりやすく説明できる神はいますか?
685デフォルトの名無しさん:2007/06/16(土) 01:06:08
今更C#2.0入門なんか書いてんのかいなw
686デフォルトの名無しさん:2007/06/16(土) 01:08:47
質問です。
自動で掲示板
(例えば、この2CHホームページ ⇒
 http://pc11.2ch.net/test/read.cgi/tech/1179313212/l50

に書き込みを行うにはどうすれば良いでしょうか?
※別に嵐をする訳ではありません。
687デフォルトの名無しさん:2007/06/16(土) 01:11:34
.netってcomがウンコんだよな
com使う場合はc++にすべきか
なんか今後良くなる方向にないかな・・・
688デフォルトの名無しさん:2007/06/16(土) 01:18:19
>>684
制御構造を記述できるようになる。
例えば、擬似的にIF文を作れるというとわかる?
689デフォルトの名無しさん:2007/06/16(土) 01:19:10
>>684
メソッドに渡すメソッドをその場で書けて、そのメソッドから、hogeの位置の変数が見えてるとか。

    string hoge = "・・・";
        List<String> names = new List<String>();
        names.ForEach(delegate(String name)
        {
            Console.WriteLine(name + hoge);
        });
690デフォルトの名無しさん:2007/06/16(土) 01:27:41
>>688
ごめん、匿名メソッドと間違えた・・・
691デフォルトの名無しさん:2007/06/16(土) 01:28:36
>>689も間違えてるじゃねーかw
692デフォルトの名無しさん:2007/06/16(土) 01:33:27
>>691
>>684 のリンク先に2.0って書いてあるから、匿名クラスって匿名メソッドのことかと思ったんだけど。
693デフォルトの名無しさん:2007/06/16(土) 01:40:01
たぶんそう思う。
で、使いではあるし便利ではあるが、
使いまくるとほかの人が読めなくなるから
ほどほどにしてる。
※なんでもかんでも匿名メソッドにしてしまおうなんて思わない。

まあいつもの煽り記事だろ。
694デフォルトの名無しさん:2007/06/16(土) 01:49:58
>>684
よくみてみたら川俣か。
読者がJavaScriptはOOPじゃないと、勘違いしそうなあやしい文章。
あいかわらずだな。
695デフォルトの名無しさん:2007/06/16(土) 02:28:54
川俣ってあんな糞記事書いて飯食ってるの?
生意気だな
696デフォルトの名無しさん:2007/06/16(土) 02:53:36
同じような内容でも「2.0の機能を活用しよう」くらいにしとけばいいのに、
なんで「C# 2.0らしいプログラミングとは」とか、見識が問われるような書き方するんだろう。
まあ本人は釣り師のつもりなんだろうけど。
697デフォルトの名無しさん:2007/06/16(土) 03:29:31
>>682
それはもう自分でそういうコントロールを作るしかないよ。
TextBoxやRichTextBoxの拡張じゃ無理。
698デフォルトの名無しさん:2007/06/16(土) 03:54:47
WebBrowser
699デフォルトの名無しさん:2007/06/16(土) 08:31:53
>>697
そうですか。了解しました。
700デフォルトの名無しさん:2007/06/16(土) 08:52:50
現在VC# .NET 2003でタブコントロールを試しているのですが、わからないことが出てきました。
テキストエディタなどのように、タブごとにファイル名などの変数を管理したいと思っています。
タブを追加するときに、変数の数を増やし、タブを閉じるときにその変数を破棄するには
どうすればよいでしょうか?
701デフォルトの名無しさん:2007/06/16(土) 09:00:01
Listでも使えば?
702デフォルトの名無しさん:2007/06/16(土) 09:44:59
Tagプロパティに入れとけば?
703デフォルトの名無しさん:2007/06/16(土) 09:54:59
>>686
httpと、formの仕組みを覚えてブラウザがpostしたときと同じデータを送ればよし
704686:2007/06/16(土) 13:01:42
>>703
ご回答ありがとうございます。
因みに何か参考になるサイトはありますでしょうか?
705デフォルトの名無しさん:2007/06/16(土) 14:28:03
んー、私はCGIで、formデータを受け取るほうからやったから
リクエストする側をやるときには、内容わかってたからなあ・・・
C#だと、、、System.Net.WebRequest とかで検索してみては
706686:2007/06/16(土) 14:37:04

>>705
ぐぐって調べてみます。
ありがとうございます。
707デフォルトの名無しさん:2007/06/16(土) 17:18:14
.NET2003でWebBrowserコントロールは使えますか?
708デフォルトの名無しさん:2007/06/16(土) 17:19:27
いいえ。
709デフォルトの名無しさん:2007/06/16(土) 17:34:01
AxWebBrowser が代わり。
710707:2007/06/16(土) 17:35:12
>>708>>709
ありがとうございました。
711デフォルトの名無しさん:2007/06/16(土) 19:18:50
WinFormからThreadを生成して、ThreadからWinFormに文字列をWinForm.Invokeを呼んで渡しています。
WinFormを閉じる時にTharedの終了を待ちたいので
WinFormからTharedへの終了の通知をManualResetEvent利用して行い
Threadの終了時にSetされるManualResetEventをWinForm側で待つということをしたのですが
WinFormが固まったままになってしまいます。
どのように実装したら固まらないようにして終了できるしょうか。
712デフォルトの名無しさん:2007/06/16(土) 19:28:22
(お待ちくださいダイアログを出しつつ)
タイマ使ってタイムアウト0でWaitOne
713デフォルトの名無しさん:2007/06/16(土) 19:31:15
スレッドをフォラグラウンドにするだけじゃ何かまずいの?
714デフォルトの名無しさん:2007/06/16(土) 19:55:34
>>711
なんでManualResetEvent使うの?
使い方がおかしいんじゃないかな

>イベントが発生したことを、1 つ以上の待機中のスレッドに通知します
715デフォルトの名無しさん:2007/06/16(土) 20:27:31
別におかしくない

そういうコーディングしてあるなら...
716デフォルトの名無しさん:2007/06/16(土) 20:40:11
まあどういうコードかわからんから何にも言えんわな
717デフォルトの名無しさん:2007/06/16(土) 21:41:28
どうせInvokeとWaitでデッドロックだろ。
BeginInvokeにしたらどうなる?
718デフォルトの名無しさん:2007/06/17(日) 02:42:21
WinFormからTharedへの終了の通知した時はWinForm.Invokeしない
または
Invokeやめる
または
スレッド終了をタイマーで定期チェック
または
自身をTerminate
719デフォルトの名無しさん:2007/06/17(日) 02:53:03
バックグランドスレッドにして自動強制終了とかTerminateで強制終了
して良心が痛まない奴は職業プログラマの資格無し。素人なら許す。
720デフォルトの名無しさん:2007/06/17(日) 14:22:13
ところで、あなたにはそんな事言う資格はあるの?
721デフォルトの名無しさん:2007/06/17(日) 14:25:44
そんなこと聞いてどうするんだ?
722デフォルトの名無しさん:2007/06/17(日) 14:33:18
興味があったから聞いただけだよ

言う資格もないのに「資格なし」なんて言ってるとしたら、
かなり痛い奴だなーと思ってさ

723デフォルトの名無しさん:2007/06/17(日) 14:56:39
許すとか許さないとかいう以前に719は解決策を知らないだろwww
724デフォルトの名無しさん:2007/06/17(日) 15:22:32
むしろプログラム終了時にスレッドが強制終了されて問題がある場合なんて
ほとんどないと思うけどね俺は。
725デフォルトの名無しさん:2007/06/17(日) 16:28:12
んなアホな。
726デフォルトの名無しさん:2007/06/17(日) 17:03:08
>>724は今動きさえすればいいという刹那主義者
727デフォルトの名無しさん:2007/06/17(日) 17:03:14
いやそれは・・・
728デフォルトの名無しさん:2007/06/17(日) 17:58:04
解決策は>>719の1か3でよいんじゃない? >>718は確かにできそうですが、
スレッド待機完了した後でコールバックされるのが気持ち悪い。
>>726は主義者という言い方がアレだけど、その通りだと思う。
プロセス終了しても残る類のリソース解放ができなくなるので。
729デフォルトの名無しさん:2007/06/17(日) 18:01:24
ごめんなさい。引用間違えました。
(誤)解決策は>>719の1か3でよいんじゃない? >>718は確かにできそうですが、
(正)解決策は>>718の1か3でよいんじゃない? >>717は確かにできそうですが、
730デフォルトの名無しさん:2007/06/17(日) 18:11:10
プロセス終了しても残るリソースって具体的にどんなの?
アンマネージドでもあんまりない気がするんだけど。
テキトーな会社が作ったデバドラ関連のdllとか?
731デフォルトの名無しさん:2007/06/17(日) 18:13:35
というか、だから最初からスレッドフォアグラウンドにするのじゃどうしてダメなんだ?
732デフォルトの名無しさん:2007/06/17(日) 19:07:59
フォアグランウンドっていうのは、サブスレッドの終了をまたずに
そのままアプリ終了するっていうことだよね? それで自動的にサブスレッドが
安全に完了するまでプロセス終了が遅れると。
コールバックしたときにフォームが破棄されている可能性があるから。
733デフォルトの名無しさん:2007/06/17(日) 19:22:33
テキトーな会社が作ったDLLで問題が起きるのは昔何度か経験しました。
ビデオボード制御のアプリです。

あと他のプロセスと通信するプログラム全般に言えることですが、
後始末をしないと可用性が落ちる場合があります。
例えばWebブラウザのようにアプリが落ちることが検出できないシステムでは
タイムアウトを設けたりしますが、後始末をきちんとしていればタイムアウト
待ちになる可能性が減ります。
他には、中間ファイルを作成して終了時に消すようなものだと、プロセスの
異常終了を考慮してミドルウェア等で監視してクリーンアップしたりしますが、
監視が異常に気づくまで多少のサービス停止が発生したりします。やはり
自分のしたことは責任を持って「気持ちよく」きれいにしてから終了したいなぁと。
734デフォルトの名無しさん:2007/06/17(日) 23:33:58
終了フラグ作っといて
ループで監視じゃダメなの?
735デフォルトの名無しさん:2007/06/18(月) 00:57:49
いや、ループ監視中にサブスレッドが終了時にControl.Involeで
コールバックするとデッドロックするというのがもとの問題。
それでInvokeをBeginInvokeにすると回避できるというのが>>717
でも終了後にコールバックされるのが嫌だというのが>>728の主張。
終了フラグが立った時はコールバックしないようにするというのが>>718の案。
そもそもフォアグランウンドスレッドならメインは終了を待たずとも良いというのが>>713
それについてやはり問題が発生するというのが>>732
ということで、元の>>711の意見を聞きたい。
736デフォルトの名無しさん:2007/06/18(月) 01:10:05
すいません。教えて下さい。

HashtableをIDictionaryで受けているコードを目にするのですが、
何故、Hashtableでそのまま受けないのでしょう?

IDictionary hoge = new Hashtable();

Hashtable hoge = new Hashtable();
⇒こうしないのは何故でしょう?
737デフォルトの名無しさん:2007/06/18(月) 01:16:37
>>736
Hashtable以外のIDictionaryの実装を使うよう変更したくなったときに
変更するのが一箇所ですむから。
738デフォルトの名無しさん:2007/06/18(月) 01:18:48
>>735

Invokeでデッドロックしているのはほぼ間違いないけど、それが
もとの書き込みから断定はできないのでは? サブスレッドはEventで
親に通知しているのだから。
固まらない実装を訊く前に、なぜ固まるのかの情報が不足していると思います。

>>736
オブジェクトの振る舞いについての情報を、必要最低限のインターフェース
に絞り込みたいから。実装に関する余分な情報を晒したくないから。
そうすることでHashtableで問題が発生したときに、IDictionaryを実装する
自作のクラスに置き換えることができるから。
739デフォルトの名無しさん:2007/06/18(月) 01:43:57
>>737 >>738 早速のお答えありがとうござます。

特に新たなインターフェースの実装が想定にない場合は、
余り意味がないのでしょうか?
必要最小限のインターフェースに絞り込むというのはよく
分かる表現なのですが、そうすることでメモリの節約にも
なるのでしょうか?そうだとすると拡張の予定がなくとも
この記述のメリットがあると思いましたので。
740デフォルトの名無しさん:2007/06/18(月) 01:47:28
予定は未定
741デフォルトの名無しさん:2007/06/18(月) 01:56:15
>>738
>固まらない実装を訊く前に、なぜ固まるのかの情報が不足していると思います。 
この理由は予想がつきます。
フォームを持つメインスレッドがイベントを待って止まってしまったら、
Control.Invokeを処理するメッセージポンプまで止まってしまうからです。
当然これもメインスレッドですから。
742デフォルトの名無しさん:2007/06/18(月) 02:01:27
>>739
頭のメモリが節約できて ( ´ー`)b グッド
743デフォルトの名無しさん:2007/06/18(月) 02:22:32
>>739
メモリの節約にはなりませんが、
機能的・性能的な問題でなく意味的な違いがあります。
744デフォルトの名無しさん:2007/06/18(月) 03:11:14
こういうのでいきなりメモリの節約とか言い出すのはなぜ?
どういう発想なんだろう?
745デフォルトの名無しさん:2007/06/18(月) 03:15:41
言ってみたい年頃なんじゃねーの?
746デフォルトの名無しさん:2007/06/18(月) 03:27:10
まあふらっとなんだし。
インスタンスメソッドから明示的にデリゲートを作成するより匿名デリゲートで書いたほうが軽そうに見えるのに似てるかも。
747デフォルトの名無しさん:2007/06/18(月) 09:12:55
今のPCでメモリ節約する時は最後の最後だろ
昔とは違うんだよ・・・・
もちろん無駄な書き方をする必要はないけどね
748デフォルトの名無しさん:2007/06/18(月) 09:20:27
いまはPCは最適化、速度向上よりメモリ節約
なぜならマルチタスク環境であるから、頻繁にメモリからデータが出ていくと鈍くなるから
749デフォルトの名無しさん:2007/06/18(月) 09:21:26
昔のPCは、単一スレッドでしか動かなかったから
のっているメモリの上限までは自由に使って良かった
750デフォルトの名無しさん:2007/06/18(月) 09:52:35
スレッドごとにとられるメモリはせいぜいスタックとTLSぐらいだぞ。
問題になるのはコード部分の肥大化なんだけどな。
751デフォルトの名無しさん:2007/06/18(月) 10:05:41
本体もそうだけど、使用するメモリもへらした方がいい
全体で5Mつかうだけなら、メモリに乗り続けるだろうけど
50Mだとスワップアウトしてどんなに最適化、高速化しても意味が無くなるほど速度低下
752デフォルトの名無しさん:2007/06/18(月) 10:09:19
今の常識

速度上げるなら、速度最適化ではなく、メモリ最適化だ

速度上げるなら、Netつかわず、最低限度の機能(WindowsAPI)だけを使用だ
753デフォルトの名無しさん:2007/06/18(月) 10:12:38
NetはDLL読みに頻繁にハードディスクを読みに行く
だから鈍い
ハードディスクのアクセスが無くなれば速い
754デフォルトの名無しさん:2007/06/18(月) 10:21:43
なんでメモリ節約の話になるんだw
755デフォルトの名無しさん:2007/06/18(月) 10:36:42
アホがメモリ効率考えてゴチャゴチャやるとコンパイラさんが困惑するってさ
756デフォルトの名無しさん:2007/06/18(月) 10:40:10
Net使わずってのはスタンドアロンって意味かい?
757デフォルトの名無しさん:2007/06/18(月) 10:53:40
FrameWorkつかわずにネイティブってことじゃね?
758デフォルトの名無しさん:2007/06/18(月) 10:58:30
次あたりリアルモード最速というのが現れる予感。
759デフォルトの名無しさん:2007/06/18(月) 11:02:05
>>740
細かいこと気にせず、とっと書けばいいんですが、変なとこ
気になってしまって。。。

>>742
実は、このご指摘が一番的を得ています。。。
脳内メモリが節約できました。

>>743
ですね。参照型ですからメモリの節約は関係ないことが分かりました。
インターフェース指定で受けて位置づけを明示する意味があるということで
理解しました。(したつもり)

>>744
制御ソフト出身でちょっと趣味でC#始めました。
ROMにせこせこ書く様なことやっていたので、細かいこと考えるみたいです。

>>745
年頃といっても、もうオヤジです。

>>746
感覚的にはそうかもしれません。何か理由が欲しかったんです。
『まあふらっとなんだし』と言っていただけるとここへ来てよかったです。

>>747
そうですよね。私のPCもずいぶん老いぼれマシンですがメモリはそれなりに積んでます。
むしろ、エコロジーみたいな感覚で無駄ができない性分なんでしょうか。
でも、ずぼら面も多々ありそれほどマメな人間でもないのですが。。。
760デフォルトの名無しさん:2007/06/18(月) 11:03:45
>>748 >>749 >>750 >>751 >>752 >>753
性能向上の議論に展開されてなんか嬉しいです。
そういったセンスはこうした会話から生まれるのでは。
私のせこさも無駄ではなかったでしょうか。

>>754 >>755
なんでそんな受け方しなければならないのか気になってしまって。。。
なんかしようってのではなくて、理由が欲しかったんです。

なんとか自分なりに納得する為に頂いたコメントも合わせて
ちょっと調べてみてみました。

Hashtableは以下のインターフェース実装している様です。
IDictionary
ICollection
IEnumerable
ISerializable
IDeserializationCallback
ICloneable

>>736 の様に定義することで、これから使うのはDictionaryを使うよって
明示している意味が一番大きいって理解しました。
もちろん、自前でインターフェース実装して・・・という意味もあるでしょう
が、趣味のおじさんには余り縁がなくて。。。

そんな訳で、お蔭様で納得できる様になりました。
皆さん、ありがとうございました。
また、寄らせて頂きたいと思います。
よろしくお願いします。
761デフォルトの名無しさん:2007/06/18(月) 11:14:28
>>757
ええ、そうだろうと思ったんですけどピリオドが抜けてるんで
話の腰を折ってみました。すまん。
762デフォルトの名無しさん:2007/06/18(月) 11:54:57
ArrayListなんかと比べてHashtableはインターフェイスに載ってない
実装固有の便利機能が少ないから、どうせならインターフェイスを通しとこう
っていうくらいのもんだと思うよ
763デフォルトの名無しさん:2007/06/18(月) 12:39:21
C# で音声認識が可能なモノを作りたいのですが、
分からないので教えていただけないでしょうか?

VB.net ではそのサンプルがあり、サンプル自身は動きませんでした。
しかし書いてあることを行って VB.net では動くようにはなったのですが、
それを C# に直すことができません。

インポートに必要な SpeechLib は C# はエラー起こさずに
出来ましたので、C# に直す事が出来ると思うのですが、
私の知識では直す事が出来ません。

どなたか C# に書き直して下さるか、書き直し方を教えては
下さいませんでしょうか。

もしくは VB.net と C# の連携が可能なら教えて頂けないでしょうか
よろしくお願い致します。


VB.NETで音声認識(その1:音声認識ライブラリを作る)
http://kilala.mydns.jp/def/VBTIPS/005/

上を元にして作成した VB.net での音声認識
http://www.uploda.org/uporg861928.zip.html

pass: hoge
764デフォルトの名無しさん:2007/06/18(月) 12:57:47
>>763
あほか?
やりたいんなら自分で調べて移植しろ
今出来ないんなら勉強すればいい
その過程でわからない部分を聞くのはいいと思うが 作り直してくれとかおかしいと思わないか?

まずはここでもいってこい
ttp://authors.aspalliance.com/aldotnet/examples/translate.aspx
765デフォルトの名無しさん:2007/06/18(月) 13:08:22
>>763
見積もり出そうか?
766デフォルトの名無しさん:2007/06/18(月) 13:31:36
>>765
お願いします
767デフォルトの名無しさん:2007/06/18(月) 13:59:08
見積もり出してもらうくらいなら市販のやつかえよ
768デフォルトの名無しさん:2007/06/18(月) 14:07:41
>>765
の金額に期待
769デフォルトの名無しさん:2007/06/18(月) 14:25:18
200en
770デフォルトの名無しさん:2007/06/18(月) 14:30:32
pdfでおk
771デフォルトの名無しさん:2007/06/18(月) 15:48:41
>>763

.NET Framework 3.0 環境構築
http://www.microsoft.com/japan/msdn/netframework/downloads/netfx3.aspx#development

匣の向こう側 - あまりに.NETな
http://d.hatena.ne.jp/akiramei/searchdiary?word=*%5BWinFX%5D

Windows と話す: Windows Vista における音声認識と音声合成の新規 API -- MSDN Magazine, 2006 年 1 月
https://www.microsoft.com/japan/msdn/msdnmag/issues/06/01/speechinWindowsVista/default.aspx#void
772デフォルトの名無しさん:2007/06/18(月) 15:59:34
>>763
>>771

Text Services Framework によるディクテーションのサポート
ttp://msdn.microsoft.com/msdnmag/issues/07/07/Dictation/default.aspx?loc=jp
773デフォルトの名無しさん:2007/06/18(月) 17:09:49
質問です。

ListBox、ComboBoxにDataSet、DisplayMemberを設定してあげると
見た目の項目は普通に表示されるのですが
MessageBox.Show(ListBox.SelectedText)などで表示させると
System.Data.DataRowViewと表示されてしまいます。

MessageBoxなどで取得したときに上記のようにならないようにするには
どうすればいいでしょうか?
774デフォルトの名無しさん:2007/06/18(月) 17:15:36
SelectedValue
775デフォルトの名無しさん:2007/06/18(月) 17:27:37
SelectedValueをどのように使えばいいでしょうか・・・・

初心者ですみません。
776デフォルトの名無しさん:2007/06/18(月) 17:57:13
それくらいMSDNみてみろや

せめて判らないまでもキーワード貰ってヘルプで調べないで聞くとかありえんだろ
回答してくれた奴に失礼じゃないか?

777デフォルトの名無しさん:2007/06/18(月) 19:20:01
初心者に高圧的な態度で教えるのは失礼じゃないな
778デフォルトの名無しさん:2007/06/18(月) 19:42:10
すみません、ろくに調べもせずに・・・・MSDNを見たのですがイマイチ
良く分からなかったのでもうちょっと調べてみます。
779デフォルトの名無しさん:2007/06/18(月) 20:02:55
普通に
http://www.google.co.jp/search?num=100&hl=ja&safe=off&q=C%23+ListBox+SelectedValue&lr=lang_ja
でベストアンサーが出てくるのだが・・・。
780デフォルトの名無しさん:2007/06/18(月) 20:04:15
>>778
そのわからない部分
例えばこの言い回しが判らない 
とかだと穏便に済むと・・・・
781デフォルトの名無しさん:2007/06/18(月) 20:11:48
SelectedTextが分かってSelectedValueの使い方が分からないってどういうことだよ
782デフォルトの名無しさん:2007/06/18(月) 20:59:57
>SelectedTextが分かって
どう見ても分かってなさそうですが。。
783デフォルトの名無しさん:2007/06/18(月) 22:06:48
仕事でC#使うことになったプログラマ&C#初心者です。

APIのSendMessagecallbackを使って他のスレッドにデータを送信するのですが、
事前に調べて作ってあった使い方マニュアルみたいなものが理解できなくて困ってます。
「とりあえず」とか、「と思われる」とか、「おそらく」とかばっかり…

とりあえずMSDNとか見て宣言の仕方はわかったのですが、
そのマニュアルみたいなものにはなぜか構造体を作って、
その中に送信したいデータを入れて、
構造体変数をSendMessagecallbackの引数にして送信していました。
また受信側にも同様におなじ構造体を宣言してその構造体変数に受信したデータを入れて、
そこから別の変数に入れたりして使っています。

作成者に質問してみたらそれはstringを送信するために使うんだそうですが、
他の型はどうなのかは説明がありませんでした。

C#でSendMessagecallbackを使用する場合、構造体は必ずセットにして使うものなのでしょうか?
それとC#用のAPI講座か書籍を探しています。このマニュアルみたいなものに頼っていたらいつまで経っても
コーディングに移れないので。
784デフォルトの名無しさん:2007/06/18(月) 22:12:45
ほかのプロセスじゃなくてほかのスレッドに、わざわざ SendMessageCallback ……?
自プロセスだけなら Win32API 使う必要皆無なんだが……。
785デフォルトの名無しさん:2007/06/18(月) 22:15:27
とりあえずメッセージは何よ。
WM_COPYDATAでCOPYDATASTRUCTか?
786デフォルトの名無しさん:2007/06/18(月) 22:22:10
あSendMessageCallbackか
787デフォルトの名無しさん:2007/06/18(月) 22:22:51
>>785
それです。
COPYDATASTRUCTって構造体にまたコメントがなんだかよくわからない文が書いてあって、
IntPtrとかの変数が3つあって
メッセージとメッセージ長+1とかを入れてました。
自宅のPCなんで現物見ながらじゃないので正確ではないんですが。

私が担当するのはbyte型の構造体を別スレッドに送信する部分です。
SendMessageCallbackを使ってるのはマルチスレッドの関係上らしいです。
788デフォルトの名無しさん:2007/06/18(月) 22:35:31
BeginInvoke を知らなかったんだな、前任者。

SendMessageCallback は、メッセージを相手のウィンドウが処理し終わった際にコールバックが呼び出される以外は
SendMessage / PostMessage と同じと考えていい。
ということを踏まえて、
ttp://www.google.com/search?hl=ja&q=WM_COPYDATA+C%23&lr=lang_ja
この辺を参考にするといいよ。

なお、SendMessageCallback は呼び出すとすぐ返ってくるが、
そのタイミングでは COPYDATASTRUCT に設定したメモリを解放することができないので
コールバックの方で解放することになる。
コールバックは分かるかな?

Win32API の宣言集なら PInvoke.net にずらずら載っている。
Win32API の呼び出しを基礎から勉強したいなら MSDN の「相互運用マーシャリング」以下の項目を熟読。
789デフォルトの名無しさん:2007/06/18(月) 22:36:16
>>787
俺ならC++/CLIでラッパを書くよ。C++だったらサンプルかなんかあるんだろ?
790デフォルトの名無しさん:2007/06/18(月) 22:36:56
職場に問題があるのか
本人に問題があるのか
それとも両方か

>C#でSendMessagecallbackを使用する場合、構造体は必ずセットにして使うものなのでしょうか?

WM_COPYDATAがその構造体を要求してるだけでそ……
つーかSendMessageCallbackでWM_COPYDATA使えないでしょ?
791デフォルトの名無しさん:2007/06/18(月) 22:45:28
あほいな…
792デフォルトの名無しさん:2007/06/18(月) 22:46:30
>それとも両方か
に1カノッサ
793デフォルトの名無しさん:2007/06/18(月) 22:47:32
おいみんな、初心者ってことを理解してあげろよw

プログラム経験そのものや C/C++ の経験にもよるけど
794デフォルトの名無しさん:2007/06/18(月) 22:52:54
善意に解釈するとネイティブのDLLがあって、
その中でメッセージループつきのスレッドを生成している。
そいつと通信するのにその手順を踏む必要があるといったとこかな?
795デフォルトの名無しさん:2007/06/18(月) 22:57:41
>>788
ありがとうございます。
ただSendMessageCallbackを使用することは既に決まっていて、
他の方が作っている部分と足並みをそろえたいらしく私だけ独自に使うわけにはいかないんです。
提案してもおそらくもう他の部分で使っちゃってるし、と返ってくるでしょうし。
ちなみに前任者というか、今回新規の案件かつ、
職場内でC#が使える人がいないため全員素人状態からやっている状態で、
上に述べたマニュアルみたいなもの、も私と同期の新入社員が作ったものなのでもうなにがなんだか。

>>789
私自身はCしかいじってこなかった人間なため、職場についてからいきなりC#をやってる状態でC++に関してはまったくの無知です。
CのAPI講座はいくつかあったのでそちらでも勉強中です。

>>790
職場にもマニュアル書いた人も私にも問題がありすぎなんだと思います。

>WM_COPYDATAがその構造体を要求してるだけでそ……
>つーかSendMessageCallbackでWM_COPYDATA使えないでしょ?

まずこのこと自体が理解していないくらいですから。
とにかく頑張って今週中には一つ仕上げます。
796デフォルトの名無しさん:2007/06/18(月) 23:01:07
うちでは許可無くP/Invokeは使うなってことにしてる。
797デフォルトの名無しさん:2007/06/18(月) 23:13:59
で?
798デフォルトの名無しさん:2007/06/18(月) 23:16:38
馬鹿や子供に刃物は持たすなってことだろ
799デフォルトの名無しさん:2007/06/18(月) 23:52:27
>>798
じゃあプログラムさせちゃ駄目だろ・・・
800デフォルトの名無しさん:2007/06/18(月) 23:53:47
刃物は馬鹿や子供のためにあるんだぜ?
801デフォルトの名無しさん:2007/06/18(月) 23:57:55
795 は 788 の言わんとしていることが理解できてるんだろうか……?
802デフォルトの名無しさん:2007/06/19(火) 19:11:08
DataGridに書式を設定しようかと思い、↓のサイトを参考にしたのですがうまくいきません。
ttp://dobon.net/vb/dotnet/datagrid/columnformat.html

DataGridTableStyle ts;
ts = DataGrid1.TableStyles["DataTable1"];
の"DataTable1"というのは、DataSetにあるテーブル名で良いんですか?

また、
DataGridTextBoxColumn cs1;
cs1 = (DataGridTextBoxColumn) ts.GridColumnStyles["Column1"];
の"Column1"というのは↑のテーブルの中にあるColumnで良いんでしょうか?
803デフォルトの名無しさん:2007/06/19(火) 19:35:24
 ま た お ま え か
804デフォルトの名無しさん:2007/06/19(火) 19:49:05
const int A = 0;
const int B = 1;
const bool C = false;
void Hoge(){
int x = C ? A : B;
}
こういうコードを書いたら、C ? A : BのAについて
「到達できないコードが検出されました」っていうコンパイラの警告が出た
ダメなの?これ
805デフォルトの名無しさん:2007/06/19(火) 19:53:52
Cがconstだからだろうけど気にしなきゃいいんじゃね?
806デフォルトの名無しさん:2007/06/19(火) 20:09:02
int x = false ? A : B;
ってコンパイルされるから?
807デフォルトの名無しさん:2007/06/19(火) 20:12:36
そう。
808802:2007/06/19(火) 21:06:15
上のほうにかかれてた人とは別なんですが・・・・。ちょっと荒れてたみたい
ですね。
809デフォルトの名無しさん:2007/06/19(火) 21:49:33
つかまず試せ。
810802:2007/06/19(火) 21:53:30
いろいろ試したのですが・・・・

オブジェクト参照がオブジェクト インスタンスに設定されていません。

と出てしまいます。
811デフォルトの名無しさん:2007/06/19(火) 22:00:13
いろいろね。
じゃあもっといろいろ。
812デフォルトの名無しさん:2007/06/19(火) 22:12:27
原因分かってんじゃん
813デフォルトの名無しさん:2007/06/19(火) 22:44:42
>>810
いろいろためせ

あと、どうして、どこで、ダメだったか書かないの?
814デフォルトの名無しさん:2007/06/19(火) 22:48:03
【エスパー】超初心者の質問に答えるスレ487【マジレス】
よりコピペ。当てはまる内容はないか考えてみよう。

12 名前:名無しさん[sage] 投稿日:2007/06/17(日) 20:26:13 0
【質問をする皆さんへ。】

回答する人たちはあなたのパソコンに前にいるわけではありません。
画像や、なるべく分かりやすく書いてください。
「起動しないんですけどどうしたらいいんでしょう」や「〜が使えないんですけどどうしたらいいですか?」
といった曖昧な質問では、回答者もどう回答したらいいか分かりません。

箇条がきにするなどの工夫をすると回答は早くもらえるようです。

それに最低限必要なのはパソコンの機種とノートタイプかそうでないのか、自分でどこまでやったか
特に青画面や黒い画面で起動できないときはそのエラーメッセージを面倒でも書き込んでください
あなたにとって意味不明でもそこには貴重な情報が表示されています
815デフォルトの名無しさん:2007/06/19(火) 22:58:39
というか、読み手の視点に立って文章推敲する程度の知能もないんじゃ
初心者以前にプログラマなんて無理だ。

まあ国語の時間で文学鑑賞しか教えない日本の教育の問題もあるんだけどさそりゃ。
816デフォルトの名無しさん:2007/06/19(火) 23:01:04
じゃあお前が答えてあげれば良いじゃない
817デフォルトの名無しさん:2007/06/19(火) 23:04:19
じゃあ、っていう接続詞の使い方間違ってるよお馬鹿さん
818デフォルトの名無しさん:2007/06/19(火) 23:06:22
>>815

>国語の時間で文学鑑賞しか教えない日本の教育
もしかして40歳以上ですか
819デフォルトの名無しさん:2007/06/19(火) 23:10:52
早く答えてやれよ
820デフォルトの名無しさん:2007/06/19(火) 23:14:21
>>819
お前が>>802

内容を詳しく書け。
それともいちいち、DataGrid1はありますかとか
DataTable1はありますかと聞かれたいのか?
821デフォルトの名無しさん:2007/06/19(火) 23:19:48
プログラムが思ったように動きません。どうすれば動くようになりますか?
822デフォルトの名無しさん:2007/06/19(火) 23:22:06
>>821
DataGrid1はありますか?
DataTable1はありますか?
823デフォルトの名無しさん:2007/06/19(火) 23:24:15
もうそこまでにしとけよ。
そこまでやったら、
くだらない質問が来ないじゃないか。
824デフォルトの名無しさん:2007/06/19(火) 23:26:38
ふらっとなんだから質問者も回答者も適当でいいよ
気に入らないなら答えなきゃいいだけなんだし
825デフォルトの名無しさん:2007/06/19(火) 23:40:31
そうそう。ときに優しく。ときに煽り煽られ。
いいじゃないかふらっとだもの
826デフォルトの名無しさん:2007/06/20(水) 11:54:44
数字を1000ごとにカンマで区切りたいのですがどうすればいいですか?
827デフォルトの名無しさん:2007/06/20(水) 11:59:25
>>826
string.Format("{0:n0}",hoge);
828826:2007/06/20(水) 14:08:42
>>827
できました。ありがとう。
string.Formatだからhogeはstringじゃないと駄目かと思って嵌ったよ。
intでいいんだね。
829デフォルトの名無しさん:2007/06/20(水) 14:14:46
MSDN見る癖つけようね
830デフォルトの名無しさん:2007/06/20(水) 14:17:37
むしろインテリセンスで型が出てるじゃないかと・・・MSDN以前に画面を(ry
831デフォルトの名無しさん:2007/06/21(木) 01:20:05
目が悪いんだと思うよ
832デフォルトの名無しさん:2007/06/21(木) 01:45:10
SDK者だからIntelliSenseにはもう用はねぇ!
アハハハハ VisualStudioも必要ねぇやぁハハハ
833デフォルトの名無しさん:2007/06/21(木) 10:14:47
えっと、、、、それでC#を?
834デフォルトの名無しさん:2007/06/21(木) 11:06:10
多分#DevelopかEclipseでやってんだYO・・・・

つうか、テキストエディタでやってる勇者いないのか?w
835デフォルトの名無しさん:2007/06/21(木) 11:12:48
なんでそんな面倒なことを
836デフォルトの名無しさん:2007/06/21(木) 11:55:10
>>834
ちょっとしたものならテキストエディタで書くよ。
俺、スクリプト感覚で C# 使うときも多いから。

>>835
プロジェクト作らない、ソース単体の編集ってインテリセンス効かない場合があるから。
VS 立ち上げるのが面倒になるときが。
837デフォルトの名無しさん:2007/06/21(木) 12:31:14
自分もテキストエディタでちまちまとC#勉強中。
コンソールアプリはC#で、GUIアプリはVB2005EEで作っている。
C#はVB.NETと比べて専門用語の数と独自機能(例えばイテレータ)が飛躍的に増えるのでまだGUIアプリを作れる程C#の事を理解していない。
以前VC#2005EEを入れた事があるんだけど正直ヘルプが不親切過ぎて(どう考えてもCかC++を使える人向け)全く理解不能だった。
VB.NETをそこそこ使えるようになった今なら理解出来るかも知れないけど、当分はコンソールアプリで我慢する。
838デフォルトの名無しさん:2007/06/21(木) 12:40:49
飛躍的って程は増えないと思うけどw
あとunsafeと匿名メソッドぐらいしか差分はないでしょ
839デフォルトの名無しさん:2007/06/21(木) 13:19:14
C#に移行したしたいんだけどなぁ・・・
あのVirtual とかあのへんとVB.NETとの対応表みたいなのってあればラクに移行できそうなんだけど・・・・
840デフォルトの名無しさん:2007/06/21(木) 15:52:27
http://msdn2.microsoft.com/ja-jp/library/zwkz3536(VS.80).aspx
キーワードの比較。ほんとにキーワードだけだからあんまり意味無いと思うが。
確かにVB.NETのヘルプはC#と比べたら異様に親切だな
http://msdn2.microsoft.com/ja-jp/library/b86b82w0(VS.80).aspx
こんなの、言語を限定して解説することじゃないだろw
841デフォルトの名無しさん:2007/06/21(木) 16:27:14
>>840
情報サンクス 助かる
いや、それがあるだけでも移行ははかどりそう
なんせ仕事しながらだから効率よく行きたいし

まぁVB→C#変換して見比べろ とか言われたら微妙だけどなぁ・・・(;´∀`)
842デフォルトの名無しさん:2007/06/21(木) 16:32:31
俺はC#からVBに変わりそう
せめてVB.NETなら良かったのに……
843デフォルトの名無しさん:2007/06/21(木) 17:37:15
>>842
業務だから仕方ないだろうが・・・・
出来るものはそう変わらないけど 作る時にすげぇ手間取るしすげぇ時間かかるぜ
844デフォルトの名無しさん:2007/06/21(木) 17:43:38
>>842
なにその絵に描いたような地獄
.netのインテリセンスとか
便利なクラスになれてからVBAとか戻ると
スゲー不便なんだよなほんとに
845デフォルトの名無しさん:2007/06/21(木) 17:48:56
VBA...
846デフォルトの名無しさん:2007/06/21(木) 17:51:55
C#の1文字目インテリセンスは神
847デフォルトの名無しさん:2007/06/21(木) 17:53:47
マウスホイールも効かないんだっけ?
848デフォルトの名無しさん:2007/06/21(木) 18:34:00
フォーム間でのデータのやり取りがわからないので質問させてください。

http://tukaenai-pg.cocolog-nifty.com/blog/2006/05/c__2de6.html
こちらに書かれているコードをそのままコピーしてコンパイルしたところ

名前 'fm1' は現在のコンテキスト内に存在しません。

というエラーが出てしまいます。
どう直せばよいのでしょうか?
849デフォルトの名無しさん:2007/06/21(木) 18:37:14
そのページをコピペしても動かないんじゃないかな?
他を探せ
850デフォルトの名無しさん:2007/06/21(木) 18:41:40
その前に勉強しろ
851デフォルトの名無しさん:2007/06/21(木) 18:45:19
Form2クラスにForm1 frm1というフィールドつくれ

まあ最初はちゃんと勉強したほうがいいよ
852デフォルトの名無しさん:2007/06/21(木) 18:50:06
そもそも Form1 自体を渡す必要はどこにもない
ってのは位置づけとして脱初心者の一歩だろうか?
853デフォルトの名無しさん:2007/06/21(木) 18:51:21
だからってコントロールを直接渡すなよ
854デフォルトの名無しさん:2007/06/21(木) 19:13:26
nilぽ
855デフォルトの名無しさん:2007/06/21(木) 19:13:44
>>834
秀丸で1万行くらいのを書いてる俺が来ましたよ。
IDEは嫌いだ。
856デフォルトの名無しさん:2007/06/21(木) 19:16:51
.NET FrameworkやC#ってIDEのために作られたものだよ
857デフォルトの名無しさん:2007/06/21(木) 19:28:55
道路のために自動車は作られたった奴初めて見たよ
858デフォルトの名無しさん:2007/06/21(木) 19:36:11
もちつもたれつ
859デフォルトの名無しさん:2007/06/21(木) 19:36:43
ゲームのためunixは作られた。
unixの移植のためにCは作られた

嘘です。
860デフォルトの名無しさん:2007/06/21(木) 19:36:55
.NETは運転者よりも自動車メーカーのために作られたわけで
861デフォルトの名無しさん:2007/06/21(木) 19:45:31
.NETはマイクロソフトのために作られたんだよ。
862デフォルトの名無しさん:2007/06/21(木) 19:52:12
IDEのないC#はただのJava
863848:2007/06/21(木) 20:34:13
>>894-853
本質的に理解できていませんが、取り急ぎ解決できました。
ありがとうございます。
864デフォルトの名無しさん:2007/06/21(木) 20:37:06
自分に礼を言ってるよ。
865デフォルトの名無しさん:2007/06/22(金) 11:51:43
>>842
逆に「そうか、こう書けばよかったのか」とか再発見がまれにあったりする。
Win32API をラップするときとか、つい .NET の相当するクラスやメソッドを真似てみたりw
866デフォルトの名無しさん:2007/06/22(金) 18:54:53
.NET Framework 2.0を使っています。

System.Net.SocketsのSoketを用いて、Tcp通信を行う処理を作っています。

今問題になっているのは、IDE上からアプリを実行してSoketのConnect()を実行するところで
PlatformNotSupportedExceptionが発生して、
「この操作はWindows 2003 SP3 またはそれ以降のオペレーティングシステム上でのみ
サポートされています。」となります。
ですが、今使っているOSはXP home SP2です。
また、この例外はIDE上からではなく単体でアプリを実行してSoket通信を行った場合はConnect()は成功してConnectedプロパティはTureを返しています。

なぜこんなことが起こるのか、調べてもさっぱり分かりません。
解決策をご存知の方、教えてください。
867デフォルトの名無しさん:2007/06/22(金) 21:19:13
ソケットの作り方をミスってると思われ。
868866:2007/06/22(金) 21:41:40
>>867
MSDNの例を参考にしているのですが、どうにも上手くいかないんですよね…
例外が起こる部分のソースをのせます。(Tcpの通信先はローカルネットワーク内のPCと機器の一対一接続です。)

string server = " . . . ";  ←機器のIP
int port = 8802;
Socket sock = null;
IPHostEntry hostEntry = null;

hostEntry = Dns.GetHostEntry(server);

foreach(IPAddress address in hostEntry.AddressList)
{
IPEndPoint ipe = new IPEndPoint(address, port);
Socket tempSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

tempSocket.Connect(ipe); ←ここで例外発生

if(tempSocket.Connected){
sock = tempSocket;
break;
}
else{
continue;
}
}


繰り返しになりますが、現状はVisualStudio2005のIDEから実行すると例外が出るのですが、
IDEを介さず実行すると例外は発生せずsock.ConnectedはTrueを返すという状態です。

869デフォルトの名無しさん:2007/06/22(金) 22:09:35
スタックトレースはどんなもん?
念のために聞くけどそれで「ハンドルされていない例外が」が出て実行が止まるんだよな?
870866:2007/06/22(金) 23:21:12
! PlatformNotSupportedExceptionはハンドルされませんでした。
というように表示されています。


スタックトレースはこんな感じでした。(長いので直近の10個を表示します)

ConnectSocket at offset 353 in file:line:column <filename unknown>:0:0
oneToolStripMenuItem_Click at offset 152 in file:line:column <filename unknown>:0:0
RaiseEvent at offset 65 in file:line:column <filename unknown>:0:0
OnClick at offset 81 in file:line:column <filename unknown>:0:0
HandleClick at offset 199 in file:line:column <filename unknown>:0:0
HandleMouseUp at offset 544 in file:line:column <filename unknown>:0:0
FireEventInteractive at offset 135 in file:line:column <filename unknown>:0:0
FireEvent at offset 290 in file:line:column <filename unknown>:0:0
OnMouseUp at offset 199 in file:line:column <filename unknown>:0:0
OnMouseUp at offset 37 in file:line:column <filename unknown>:0:0
871デフォルトの名無しさん:2007/06/23(土) 00:00:44
nilpo
872デフォルトの名無しさん:2007/06/23(土) 00:01:44
えええ、ConnetSocket って 866 の人の自作メソッド?
それがスタックトレースの一番上?
873866:2007/06/23(土) 00:21:15
ConnectSocketはこうなってます。
public static Socket ConnectSocket(string server, int port){
Socket sock = null;
IPHostEntry hostEntry = null;
hostEntry = Dns.GetHostEntry(server);
foreach(IPAddress address in hostEntry.AddressList){
IPEndPoint ipe = new IPEndPoint(address, port);
Socket tempSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
String temp = " ";
try{
tempSocket.Connect(ipe);
}catch (Exception){
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
for (int StackLoop = 0; StackLoop < st.FrameCount; StackLoop++){
System.Diagnostics.StackFrame sf = st.GetFrame(StackLoop);
temp += sf.ToString();
}
using (StreamWriter sw = new StreamWriter("trace.txt")){
sw.Write(temp);
}
}
if(tempSocket.Connected){
sock = tempSocket;
break;
}else{   continue;
}
}
return sock;
}

スタックトレースのために、例外処理をしたら、tempSocket.Connect()で例外はなくなりましたが、その先のSend()で同じ例外が出ました。
もしかして、Socket周りは必ず例外処理しないとだめな処理だったりするのでしょうか…?
874デフォルトの名無しさん:2007/06/23(土) 00:28:50
わざわざ StackFrame とか見に行かなくても Exception.StackTrace で十分だよ。
て言うかそうじゃないと意味がないのでそっち見てくれ。
875デフォルトの名無しさん:2007/06/23(土) 00:43:19
バグだろ

関係ないけどMSDNのSocket.Disconnect メソッド で

>PlatformNotSupportedException
> このメソッドは、Windows 2000 以前でのみサポートされます。
>それ以外の場合は、例外がスローされます。

ってなってるけど意味が分からん。
876866:2007/06/23(土) 00:48:41
Exception.StackTraceを見たところ、このようになりました。

場所 System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
場所 System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
場所 HeatRot.ConnectData.ConnectSocket(String server, Int32 port)
場所 C:\Documents and Settings\knit\My Documents\Visual Studio 2005\Projects\HeatRot\HeatRot\ConnectData.cs:行 39


何が悪いのか、さっぱりわかりません。
バグだとしたら、どのように対応したら良いのでしょうか…
877デフォルトの名無しさん:2007/06/23(土) 01:03:21
878デフォルトの名無しさん:2007/06/23(土) 02:08:09
>>873
その発想はなかったわw
879デフォルトの名無しさん:2007/06/23(土) 06:15:09
OpenFileDialogで、画像のプレビューを表示しながら画像ファイルを選択することは可能でしょうか?
DelphiでいうOpenPictureDialogが欲しいです。
880デフォルトの名無しさん:2007/06/23(土) 09:49:11
表示を縮小版に切り替えればいいだろ
881デフォルトの名無しさん:2007/06/23(土) 10:11:38
きっとWin98だから縮小版表示がないんだろ
882デフォルトの名無しさん:2007/06/23(土) 10:13:40
意地悪してやんなよ
883デフォルトの名無しさん:2007/06/23(土) 11:00:21
>>879
これとかどうかな?
http://msdn2.microsoft.com/en-us/library/ms996463.aspx

前にちょっとコード斜め読みした感じでは、なんかものすごくアクロバティックというか、
美しくないコードだなと思った気がした。

そもそもFileDialogをどうして普通に継承して機能拡張できるように最初から
設計しなかったんだろう。
884866:2007/06/23(土) 11:49:23
>>878
経験がほとんどないので、良し悪しが分からりません。
もし、良くないところがありましたら教えていただけませんか?
885879:2007/06/23(土) 11:59:31
>>880
すいません、あくまでもプレビューは補助的なものとして使いたいので、
縮小版だと不便なんです。

>>883
ありがとうございます!まさにこれです。
886デフォルトの名無しさん:2007/06/23(土) 12:15:34
Project[A]の中にあるForm[a]に[bを開く]ボタンを配置
Project[B]の中にあるForm[b]に[aを開く]ボタンを配置して
それぞれのボタンを押すと対応するフォーム([〜を開く]ボタンは無し)が開くようにしたいのですが、
Projectの参照を追加しようとすると
「それ自身を参照として持つことになります」といわれてしまい実行できません。

なにかいい手段はありませんか?
887デフォルトの名無しさん:2007/06/23(土) 12:41:45
Forma と Formb は「フォームを開く要求が出てるぜ」イベントを公開して、
ProjectA と ProjectB を両方参照する ProjectC が Forma と Formb を管理するクラス持てば
888デフォルトの名無しさん:2007/06/23(土) 12:51:31
>>887
ありがとうございます。
仕様的に新しいProjectは作っちゃダメなんですが、
何とか共通関数が入ったProjectにねじ込んでみます。

> 「フォームを開く要求が出てるぜ」イベントを公開して
ってのが分かりませんが、がんばってみます。
889デフォルトの名無しさん:2007/06/23(土) 12:55:56
そもそも886みたいな関係ならプロジェクト分ける弊害はあっても有難みは
一つもない気がするんですが。。

だってプロジェクトBって他で使いまわせるわけじゃないじゃんw
890デフォルトの名無しさん:2007/06/23(土) 12:58:57
>>889
それは仕様書作った人に・・・
関係ないけどなんかほかにも「out」や「ref」は使っちゃダメとか
いろいろ制約が多くて困ってます。
891デフォルトの名無しさん:2007/06/23(土) 13:01:52
> 「out」や「ref」は使っちゃ
これはなくても別に困らんだろ

ところで共通関数が入ったプロジェクトは参照されるんであって参照するのではないと思うのだが
892デフォルトの名無しさん:2007/06/23(土) 13:04:58
>>888
887の言うように第三者のCを介在させる必然性は本当は必ずしもない。

要はBが起こしたイベントに反応してAがアクション(フォームの表示?)を
起こすようにすれば、BはAの存在を知る必要はないということ。
893デフォルトの名無しさん:2007/06/23(土) 13:56:47
俺はoutが使えないとTryParseが使えないから嫌だー
894デフォルトの名無しさん:2007/06/23(土) 13:58:10
いや意味わからないけど。。
895デフォルトの名無しさん:2007/06/23(土) 17:00:32
自分で新しくメソッドを定義するときだけじゃなくて
Int32.TryParse(string, out int)なんかの使用も禁止なの?
896デフォルトの名無しさん:2007/06/23(土) 17:02:07
メソッド内で使用するにはおkなんでね?
897デフォルトの名無しさん:2007/06/23(土) 17:13:12
じゃあポインタで
898デフォルトの名無しさん:2007/06/23(土) 17:33:29
複数の値を返す場合はどうするの?
Javaみたいに「その関数に渡すためだけのクラス」を定義するの?
禁止する意味がよくわからん。
899デフォルトの名無しさん:2007/06/23(土) 17:39:42
Java信者なんじゃね
class Ref<T>{public T Value;}
あてつけ
900デフォルトの名無しさん:2007/06/23(土) 17:50:15
GetValues(delegate(int a, int b) { x = a; y = b; } );
901デフォルトの名無しさん:2007/06/23(土) 18:19:58
>>898
>複数の値を返す場合はどうするの?

refから話がずれちまうが、
そういう場面で役立つ構文がC# 3.0で増えてるな。

ttp://ja.wikipedia.org/wiki/C_Sharp
>オブジェクトの初期化が簡潔に記述できるようになった。
>コレクションの初期化が簡潔に記述できるようになった。
>一時的に使用される型を簡単に定義するための匿名型が導入された。
>new キーワードを用いた配列の宣言の際、型を省略できるようになった。

よさげ。
Lightweight Language臭がするようになった気もするが。
902デフォルトの名無しさん:2007/06/23(土) 18:31:13
LLっぽく見えるがLLじゃない
厳密に型が付いている
903デフォルトの名無しさん:2007/06/23(土) 18:39:55
varなんてただの飾りです
型名のタイプをサボれるだけ
904デフォルトの名無しさん:2007/06/23(土) 19:38:22
>>901
別に複数の値を返す時に役立つ機能ではないと思うが。
さすがに匿名型を返すことはできないのでは?
905デフォルトの名無しさん:2007/06/23(土) 19:43:56
自動プロパティ良いな
906デフォルトの名無しさん:2007/06/23(土) 20:44:02
さすがに戻り値の型推論まではないわな
907デフォルトの名無しさん:2007/06/24(日) 00:00:31
画像のピクセルデータのような結構メモリを食うデータを、配列で持とうと思ってます。
で、そのデータがいらなくなったら、さっさとメモリを解放したいんですが、
こういうときはGC.Collect()を呼ぶくらいしか方法はないでしょうか?
配列だけ解放なんてことは無理ですか?
908デフォルトの名無しさん:2007/06/24(日) 00:02:49
ないし無理

いっそアンマネージドなメモリで持つ手もあるがね
909907:2007/06/24(日) 00:06:06
そうですか…
じゃあC++/CLIあたりでがんばります。
ありがとうございました。
910デフォルトの名無しさん:2007/06/24(日) 00:07:07
そもそも自分で開放する必要ってある?
参照がなければ、他でメモリが必要になった時に開放されるんだし。
911デフォルトの名無しさん:2007/06/24(日) 02:43:48
教えてください
1、usingとJavaのimportは意味合い的には同じモノとして考えてよい?
2、C#にJarファイルみたいに一つにまとまったクラスみたいなものはあるのでしょうか?
3、void Page_Load(object sender, EventArgs e) みたいなメソッドがありますが
これの引数の意味がいまいちわかりません。具体的にどう使われるんでしょうか?

4、public static void mainみたいなものはありますが、これっていつ呼ばれるのでしょうか?

たとえばPage_Load、Button_Click1、Button_Click2、mainの4つのクラスがあった場合
mainメソッドはいつ呼ばれるのでしょうか?
Page_Loadはページを読み込んだとき
Button_Click1、Button_Click2はボタンを押下したときに走るイベントだとおもいますが・・・

Javaなら一番初めによばれてって感じだと思いますが・・・
912デフォルトの名無しさん:2007/06/24(日) 03:05:55
>>911
1、うん
2、C# にはモジュールがある。あと Jar はクラスじゃない。
3、Java と似たようなもん
4、アプリケーション開始時(エントリポイント)
クラスとメソッドをちゃんと区別すること。
Page_Load、Button_Click1、Button_Click2 の各メソッドがいつ呼ばれるかは判らない。
イベントハンドラに設定されてたらそっちの期待通りに動くけど、設定されてなかったら……
913デフォルトの名無しさん:2007/06/24(日) 03:07:07
>>911
1. yes
2. dllまたはexe
3. sender->イベントの元になったオブジェクト e->イベントの情報
4. Javaと同じ。プログラムの開始時。
914907:2007/06/24(日) 03:13:00
>>910
でかい配列をもつオブジェクトを、短いスパンで何度か生成・削除を繰り返したいときに、
一時的にメモリ使用量がごりごり上がっていったらやだなと思ったんです。
明示的に開放できれば、そんなに増えないかな〜と。
.NETつかうならそんなことは気にしないほうがいいでしょうか?
915デフォルトの名無しさん:2007/06/24(日) 03:15:03
>>914
困ってから困れ。


とりあえず、先ずは作ってしまえ。
916907:2007/06/24(日) 03:20:14
じゃあとりあえずは配列でいってみます。
917デフォルトの名無しさん:2007/06/24(日) 03:38:37
増えそうになったらGC動くから問題ないだろ
918デフォルトの名無しさん:2007/06/24(日) 08:49:22
>>917
そうでもない。
壁紙クラス(5MB位)のデカい奴を短期間で読み込むとあっと言う間にメモリ使用量100MBオーバー。
やむなく配列に読み込み処理の頭でGC.Collect()してる位だし。
919デフォルトの名無しさん:2007/06/24(日) 10:09:27
たとえ100MBを超えてもメモリに余裕があればGCは動かないだろ
920デフォルトの名無しさん:2007/06/24(日) 11:44:26
>一時的にメモリ使用量がごりごり上がっていったらやだな
なんで?
921デフォルトの名無しさん:2007/06/24(日) 11:59:30
メモリがば空きの環境ならどんどんメモリ食って当然
922デフォルトの名無しさん:2007/06/24(日) 12:46:07
>>918
一昔前ならともかく、いまどき100MBってそんなに多くないだろ。
923907:2007/06/24(日) 12:53:26
>>920
このアプリひとりでメモリ使いまっくてんじゃねーよとか思われそうだな〜と。
空いてるからといって必要以上に使いまくるのは気が進まなかったのです
924デフォルトの名無しさん:2007/06/24(日) 13:08:46
常に100MB近くメモリを食うソフトなんて願い下げだな
925デフォルトの名無しさん:2007/06/24(日) 13:21:02
実際、 
おまえの作ったソフトラインタイムとか入れないといけないからめんどくせー とか
なんでメモリーこんな消費するゴミソフトつくってんの? とか言われる

メモリあいてるからって無駄に消費してもらうと
作者が無能に思われることがあるから
嫌と言えば嫌だ。

そういう勘違い野郎にいちいちGCの説明するのもかったるいし
926デフォルトの名無しさん:2007/06/24(日) 15:07:43
そこまでして入れる価値のないソフトなんだね
927デフォルトの名無しさん:2007/06/24(日) 16:16:40
自動配線ツールをCで書こうと思ってるんですけど。
アルゴリズムはmazeをベースで。

書くときに参考になるソースコードとかってどっかに落ちてるものなんでしょうか?
アルゴリズム分かっても、書くのが素人なので、どれ位の規模(行数)になるかとか、必要な関数が予想つきません。
例などがあれば要と思って質問させていただきました。
誘導していただければ幸いです。
928デフォルトの名無しさん:2007/06/24(日) 16:21:51
すれ違い
929デフォルトの名無しさん:2007/06/24(日) 16:27:56
>>928
どこで書き込むと良いんでしょうか?
930デフォルトの名無しさん:2007/06/24(日) 16:28:28
ここで聞くな
931デフォルトの名無しさん:2007/06/24(日) 16:30:10
でもここは何でも質問してよいところですよね?
932デフォルトの名無しさん:2007/06/24(日) 16:31:34
>>1
>このスレッドは
>「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。

C#関係ない質問するバカは死ね
933デフォルトの名無しさん:2007/06/24(日) 16:33:54
CとC#は違うんですか?
934デフォルトの名無しさん:2007/06/24(日) 16:53:40
違う
935デフォルトの名無しさん:2007/06/24(日) 16:57:46
ファイル送信中にprogressbarをつかってその進渉率を表したいのですが、
ファイル送信中の情報量を受け取れるメソッドとかがあるのでしょうか?
936デフォルトの名無しさん:2007/06/24(日) 16:59:04
すいませんでした。
誘導も無いようなので失礼します。
937デフォルトの名無しさん:2007/06/24(日) 16:59:21
>>935
マルチは死ね
938デフォルトの名無しさん:2007/06/24(日) 17:50:47
さすが日曜って所か
939デフォルトの名無しさん:2007/06/24(日) 20:30:53
>>935
前にも同じことを聞いてたよな
頭使えよ。
940デフォルトの名無しさん:2007/06/24(日) 20:46:14
自動配線ツールは有名ツールの機能制限版じゃだめなのかな?
それとも配線違いか?
いやすれ違い。
941デフォルトの名無しさん:2007/06/24(日) 21:08:04
ここは酷い釣り堀ですね
942デフォルトの名無しさん:2007/06/25(月) 00:58:48
現在、WindowsFormアプリを作成しているのですが、その作成した
WindowsFormアプリが常にアクティブ(手前)に表示されるといった状態
にしたいのですがどうすれば良いでしょうか?

例えば、ネットをする際にはIE・FireFox・Lunascape等を使う
かと思いますが、それらが起動していたとしても常に手前に
WindowsFormアプリを表示をしたいです。
(サイズ的にはブラウザの1/5位のサイズです。)

※常に手前に表示はされているけれでも、ブラウザ上の項目
(ID / PASSWORD 項目等)に対して入力をしたい場合には、
その箇所を選択(クリック)した上で入力が出来る状態にしたいです。

宜しくお願い致します。
943デフォルトの名無しさん:2007/06/25(月) 01:00:24
TopMost
944デフォルトの名無しさん:2007/06/25(月) 13:36:02
Enter押したら、タブと同じように次のフォーカスに移動させたいのですが
どうすればいいでしょう?
945デフォルトの名無しさん:2007/06/25(月) 13:37:54
946デフォルトの名無しさん:2007/06/25(月) 18:35:46
ttp://hiro.wankuma.com/CS2003/Control/OracleCommand/OracleCommand01.htm

このサイトみてOracleCommandを試してみてるのですが、取得したデータを
DataGridViewなどに表示させるにはどうすればいいでしょうか?
947デフォルトの名無しさん:2007/06/25(月) 18:41:57
DataReader使うなDataAdapter使え
948デフォルトの名無しさん:2007/06/25(月) 19:29:27
C#使いは偉そうなやつが多いね。
デスマってるやつが多いのかなw
949デフォルトの名無しさん:2007/06/25(月) 19:58:06
プチ北方謙三って奴だねw
950北方謙三:2007/06/25(月) 20:14:43
質問する暇あったらソープ百回行ってこい
951デフォルトの名無しさん:2007/06/25(月) 22:00:03
こっちのほうが馬鹿が少ないのか?
謙虚なのか?
952デフォルトの名無しさん:2007/06/25(月) 22:05:01
住人一緒だから違いはない
953デフォルトの名無しさん:2007/06/25(月) 22:13:29
あのボウヤはこっちへ来ないみたいだな。
954デフォルトの名無しさん:2007/06/25(月) 22:42:48
Jpegにカラープロファイルを埋め込む方法を教えてください。お願いします。
955デフォルトの名無しさん:2007/06/25(月) 22:55:04
まともなフォトレタッチソフト買え。
956デフォルトの名無しさん:2007/06/25(月) 23:17:10
>>943
解決しました。ありがとう。
957デフォルトの名無しさん:2007/06/26(火) 09:41:27
>>953
初心者と書かれたスレにはこないとさ
958デフォルトの名無しさん:2007/06/26(火) 14:19:57
Java Web Start みたいな事はできないのでしょうか?
959デフォルトの名無しさん:2007/06/27(水) 00:15:40
できるよ
960デフォルトの名無しさん:2007/06/27(水) 03:59:47
>>959
名称だけでも教えていただけないでしょうか?
961!=959:2007/06/27(水) 04:03:53
ClickOnce?使ったことないからわからんけども。
962デフォルトの名無しさん:2007/06/27(水) 08:40:29
二点間A(x1,y1) B(x2,y2)を通る直線上で
picture Box(A→Bまで)を移動させたいんだけどどうやるの?

座標がランダムに変化しても自動的に出力させたいのですが
お願いします。
963デフォルトの名無しさん:2007/06/27(水) 09:08:13
Timerでも使ってLocationを設定すれば?
アルゴリズムに関してはそのくらい自分で考えろ
964デフォルトの名無しさん:2007/06/27(水) 10:00:29
>>962
<BeginStoryboard>
 <Storyboard>
  <PointAnimation>
965デフォルトの名無しさん:2007/06/27(水) 10:03:26
WPFじゃないと思うぞ
966デフォルトの名無しさん:2007/06/27(水) 13:39:49
01〜12までのアイテムが入ったコンボボックス1と、01〜31までのアイテムが入ったコンボボックス2が
あります。

このとき、コンボボックス1が04でコンボボックス2が31の時はエラーメッセージを
出すようにしたいのですが、うまくいきません。


private void _Conbobox2_SelectedIndexChanged(object sender, System.EventArgs e)
{
if(Conbobox1.Items[3] == Conbobox2.Items[30])
{
MessageBox.Show("Error");
}
}
といった形でコーティングしているのですが、ifまで行かないようなのです。
967デフォルトの名無しさん:2007/06/27(水) 13:57:58
コードを書く前にやりたいことを日本語で書いてみるといい
968デフォルトの名無しさん:2007/06/27(水) 14:02:20
説明が下手ですいません。コンボボックス1と2で日付を指定したいのですが
4/31など、ありえない月の時はエラーメッセージを表示させようとしたいのですが・・・。
969デフォルトの名無しさん:2007/06/27(水) 14:09:34
あなたの条件式の意味:
「 4と31が等しいなら」

あなたが書くべき条件式:
「 月が4で、かつ日付が31のとき」
970966:2007/06/27(水) 14:19:33
自分の条件式じゃなぜ駄目なのでしょう?

また、書くべき条件式はどのような形で書いたら良いでしょうか?
971デフォルトの名無しさん:2007/06/27(水) 14:19:42
>>969 みたいに日本語にするといいよ。
今回やりたいのは、
comboBox2の選択内容が変わったら、
comboBox1の値によって変わる上限よりcomboBox2の値が大きかったらエラーを出力。
だろう。

まあ上限は配列にしておいて({31,29,31,30,31,30,31,31,30,31,30,31} とか)
確認するとか、DateTime につっこんで正しい日付かチェックするとかすればいいかと
972デフォルトの名無しさん:2007/06/27(水) 14:20:07
あなたが書くべきよりよい条件式:

( 2月 かつ ( ( 閏年 かつ 日付が29より大 ) または ( 非閏年 かつ 日付が28より大 ) )
または
( 日付が30より大 かつ ( 4月 または 6月 または 9月 または 11月 ) )
973966:2007/06/27(水) 14:30:00
はう・・・・そんな沢山の条件式を一度にやったりとか、どうすればいんでしょう・・・?
974デフォルトの名無しさん:2007/06/27(水) 14:31:29
月ごとの末日を配列にでも入れとけ。
あとは閏年かどうかで 2 月の場合に 1 日調整するだけ。
975デフォルトの名無しさん:2007/06/27(水) 14:37:21
bool fLeapYear = false;
bool fError = false;

int m = comboBox1.SelectedIndex + 1;
int d = comboBox2.SelectedIndex + 1;

switch( m )
{
    case 2:
        fError = fLeapYear ? d > 29 : d > 28;
        break;
        
    case 4:
    case 6:
    case 9:
    case 11:
        fError = d > 30;
        break;
}

if( fError )
{
    MessageBox.Show( "Error" );
}
976デフォルトの名無しさん:2007/06/27(水) 14:39:16
まあ今回は年が無いからうるう年は考慮無しでもいいじゃん

int[] monthDay = { 0, 31, 29, 31,30,31,30,31,31,30,31,30,31 };

if (monthDay[m] < d)

switch case をこれにしてもいいな。
977デフォルトの名無しさん:2007/06/27(水) 14:41:44
閏年考慮なしでいいとか本気?
捨てコードならともかく・・・。
978デフォルトの名無しさん:2007/06/27(水) 14:44:13
コンボボックスで日付選択した状態での範囲エラーだぜ
979デフォルトの名無しさん:2007/06/27(水) 14:45:06
年を入力するところが無いのにどうやってチェックするのかと
980デフォルトの名無しさん:2007/06/27(水) 14:45:18
ああ、そういうことか・・・。
年の情報はどこにもないのね。
981デフォルトの名無しさん:2007/06/27(水) 14:47:32
日付設定してから月を変更することもあるだろうし、
それをキーボードでやったときのことを考えると
月設定時にエラーは出しにくいし
最終チェックはどうせ必要なんだから、この場合の範囲チェックの時点で
「うるう年を考慮しないなんて本気?」とか言うほうがおかしいでしょ
982デフォルトの名無しさん:2007/06/27(水) 14:49:17
100年分ぐらいの年月日・曜日データぐらいデフォで登録しとけや
983デフォルトの名無しさん:2007/06/27(水) 15:03:45
DateTimePickerでいいじゃん……
984966:2007/06/27(水) 15:12:12
みなさん、ありがとうございます、助かりました!

C#初めてまだ1ヶ月で分からないことだらけでしたけど、また一つ覚えることが出来ました。
985デフォルトの名無しさん:2007/06/27(水) 15:54:34
昔沸いた変な馬鹿とは大違いだな
986デフォルトの名無しさん:2007/06/27(水) 15:57:43
昔?つい最近な気がw
987デフォルトの名無しさん:2007/06/27(水) 17:41:38
それよか && とか || を覚えた方がいいぞ >>984
988デフォルトの名無しさん:2007/06/27(水) 17:46:54
「&」と「&&」、「|」と「||」はどう使い分けたらいいの?
989デフォルトの名無しさん:2007/06/27(水) 17:53:51
使い分けなくていいよ
990デフォルトの名無しさん:2007/06/27(水) 17:59:26
全然違うものだから、使い分けるも何も、
お互いにお互いの代わりとして使えない。
991デフォルトの名無しさん:2007/06/27(水) 18:48:16
どっちも同じように使える。
ただし&や|の方は後ろのステートメントも常に評価するようになる。
992デフォルトの名無しさん:2007/06/27(水) 18:56:00
>>990
もしかして&や|はビット演算にしか使えないと思ってた?
993デフォルトの名無しさん:2007/06/27(水) 18:59:20
>>991
衝撃の新事実!
994デフォルトの名無しさん:2007/06/27(水) 19:10:10
すまん憶測で書いてたw
今試したら&&と同じように前のステートメントが偽だと後ろが評価されないね。
995デフォルトの名無しさん:2007/06/27(水) 19:10:12
C#ではboolとintは完全に別物だから、
intに対する | & とboolに対する | & は動作が違う。
intに || && は使えない。
996デフォルトの名無しさん:2007/06/27(水) 19:13:48
と思ったらMSDNに
>& 演算子は、1 番目の演算子の値に関係なく、両方の演算子を評価します
って書いてあった。

しかもさっき書いた検証コードもちゃんとそう動いてた。
testとtrue見間違えただけかよw
しっかりしろ俺www
997デフォルトの名無しさん:2007/06/27(水) 19:52:27
ええとつまり

if(A || B) は まずAを評価して OKでなければBを評価
if(A | B) はAがOKでもBを評価ってことか?

つか後者はどういうときに使うのか想像できない漏れがいる
998デフォルトの名無しさん:2007/06/27(水) 19:55:10
|はビット演算子
999デフォルトの名無しさん:2007/06/27(水) 19:56:22
ture演算子 false演算子あげ
1000デフォルトの名無しさん:2007/06/27(水) 19:59:27
ヽ(`Д´)ノ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。