1 :
デフォルトの名無しさん :
2007/05/16(水) 20:00:12 このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
前スレ: ふらっとC♯, C#(初心者用) Part15
http://pc11.2ch.net/test/read.cgi/tech/1176387265/
スレ埋まる前に新スレ立てられないものか
3 :
デフォルトの名無しさん :2007/05/16(水) 20:37:20
乙。
前スレのつづき ((Button)sender).Text = "aaa"; でよくて (Button)sender.Text = "aaa"; では何故ダメか? 演算の優先順位があるから。 (Button) のようなキャストより . のほうが優先されるため。 (Button)sender.Textだと . が優先され sender.Text を(Button)でキャストしようとするのでNG。 そこで ( )でくくってやって ((Button)sender)としてsenderを Buttonにキャストしてやる。 その上で ButtonクラスのTextを使う。
c#使えるお前らスゴイな
いいえ。すごいのはC#です。 誰でも使えるのです。
Form1_FormClosingイベントで if (MessageBox.Show("保存して終了しますか?", MessageBoxButtons.YesNoCancel) == DialogResult.Cancel) Cancelの処理 else if Noの処理 else Yesの処理 と書いたのですが、実際にMessageBoxの「はい」ボタンを押すとYesの処理がされる前に閉じられてしまいます。 Yesの処理が行われた後に閉じるようにするにはどうすればいいでしょうか?
そのコードではMessageBox.Showの戻り値のDialogResultを else句以下で使えないでしょうが。 switch文使うかDialogResultをいったん変数に受けてifで分岐してください
>>10 ありがとうございました。
間違えていた部分がわかりました。
指定したURIが存在しているかチェックしたいのですが、どのメソッドを 使えばいいでしょうか。
Windowsアプリケーション から コンソールアプリケーションを呼ぶ方法が よく使われると聞いたのですが、それにはexeファイルを呼ぶしかないのでしょうか?
comファイルでも大丈夫だと思います。
システムフォルダーやその他の 関連図けられたファイルのアイコン等を所得する方法ってありますか? 実行ファイルだけはわかるんですが やりたい事はエクスプローラーみたいなのを作ろうとしています。
Iconクラスにそれ用のメソッドがありましたよ。
>>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(){}}
>フィールドを自分は勝手にクラス内部(要はメンバ変数や定数とメソッド)の空間の事だと >思っていたのですが、まったく違いメンバ変数や定数の事のようだと知ったのですが >本当にその程度の理解で良いのかわかりません。フィールドとはメンバ変数や定数の事 >だと思っていていいのでしょうか。 ?? メソッドは違うといいたいの? MSDNによると「フィールドとは、クラスまたは構造体に含まれるオブジェクトや値のことです。 フィールドを使用すると、クラスおよび構造体でデータをカプセル化できます」 >internal修飾子がいまいちよくわかりません。 趣味のレベルならわかんなくていいんじゃない? アセンブリとか理解しない限りわかんないとおもうし つかわないんじゃない?
>フィールドとはメンバ変数や定数の事だと思っていていいのでしょうか。 はい。 静的フィールド(クラス変数)というのもあります。 以前の理解は「メンバ」に近いやろ。 >internal アセンブリの外からアクセスできないpublicと思えばよか。 >戻り値がインターフェイスというのはそのインターフェイス実装してる >クラスのオブジェクトを受け取れる?(戻り値がインターフェイスと言う時点でよくわかりません) はい。 でも戻り値がインターフェイスなら戻り値はインターフェイスです。 それ以上でも以下でもありません。 この場合GetSomething()は ITest 「としての」AClassのインスタンスを返します。 実装によってはITestを実装したBClassのインスタンスかもしれないっぺ。 例えばIEnumerableを返す場合、実体はArrayかもしれないしArrayListかもしれないし ControlCollectionかもしれないということだっぺ。
キモイ
テキストボックスに設定したcontextMenuStripを フォームに用意したボタンを押したら表示するとか コードから実行することって出来ますか?
できる
イベントを使って
↑?
Showメソッドのオーバーロード
>>28 こんな感じ?
ボタンクリックのイベントハンドラに
int x = MousePosition.X;
int y = MousePosition.Y;
ContextMenuStrip.Show += delegate()
{
contextMenuStrip1.Show(x, y);
};
C#の基礎から教えろって事か?
考えすぎwww private void button1_Click( object sender, EventArgs e ) { this.contextMenuStrip1.Show( Control.MousePosition ); }
>>31 できました!
なるほど、フィールド名はフォームにするのですね。
テキストボックスにしてどうにかしようとしてハマってしまっていました。
ありがとうございました。
すいません。 byte [][] test; と byte [,] test; とでは、どう違うのでしょうか。同じ気がするんですが。
[][]は aaaaaaaaaa aaaaaaa aaaaaaaaaaaaaaaa aaaaaa aaaaaaaaaaaaa [,]は aaaaaaaaaaaa aaaaaaaaaaaa aaaaaaaaaaaa aaaaaaaaaaaa aaaaaaaaaaaa aaaaaaaaaaaa
>>34 ありがとうございます。
謎が解けました。
>>35 ほんとにわかったの?
すごいな。
ジャグ配列なんだけどな。
なに、この小バカにした態度は
いやほんとにすごいと思うよ。 回答書いた人もえらい。
>>36 どちらもよく使うデータ構造なので大丈夫です。
C++やってたので、表記とデータ構造が一致せず、混乱してました。
普通の配列と構造体で間に合っちゃうんで ジャグ配列っていまいち使い方がわからないんだよな まぁ漏れが単純な事しか考えないってことか・・・
>>40 実はジャグ配列の方が要素の参照高速。
int[][] array = new int[]{
書きかけでボタン押しちゃった int[][] array = new { new int[n], new int[n], .・・・ みたいな書き方が面倒でなくて、かつメモリよりも速度優先なら ジャグ配列使った方がよかったり。
ジャグ配列のほうが高速って、情報ソースある? ジャグ配列の方が速度よりメモリ効率優先に見えるんだが
ジャグ配列だと int** っぽくなるため int* のポインタがメモリをちょっとだけ食う 長方形配列だとインデクスの掛け算をするからポインタアクセスよりちょっと遅い
俺もそう思う。 連続領域を確保するのにGCする必要のある場合とかは遅くなるんかな?
>>44 掛け算よりはメモリを読むほうが遅いだろ。常識的に考えて。
多次元配列のが遅くなる理由があるとすれば再配置にコストがかかるとかか
48 :
43 :2007/05/18(金) 20:11:25
アクセス速度だが、 ジャグ配列では、メモリのポインタ間接アクセスが二回 通常配列では、メモリのポインタ間接アクセス一回+インデックス計算の掛け算 通常、掛け算よりメモリアクセスの方が遅いので、ジャグ配列のほうがアクセス速度は遅いはず データが疎で、ある程度大きな二次元配列を使うと、使用されない無駄なメモリ空間が大量に発生する 通常そういうデータを扱うときは二次元のリンクリストを使うのが定石なのだが、これはアクセス速度が遅くなる で、ジャグ配列というのは、二次元配列と二次元リンクリストの折衷案に見えるんだがね データの特性にも因るが、一般論としては アクセス速度、配列>ジャグ配列>リンクリスト メモリ効率、リンクリスト>ジャグ配列>配列 だと思うんだが、間違ってる?
ふらっとスレに入り浸っている俺に聞かれても分かるわけないだろ
x[i][j] の i, j ともにランダムアクセスだとジャグ配列は遅いけど、 行単位のアクセスならジャグ配列の方が早くない?
つソース 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
なんの比較にもなってないがな。
ところで,話と関係ないんだけど 多次元配列の要素にポインタを使って直接アクセスするにはどうやればいいの?
まぁパソコンのCPU周りなら一般的にメモリーアクセスキャッシュでも 確実にインデックスレジスターのかけ算の方が早いだろうね .netがどうなってるかわからんけど
>>52 要素の参照が高速という話だからいいんじゃんない?
>>53 普通にピン刺せばいいんじゃないの?
unsafe {
int[,] a = new int[2, 2] { { 0, 1 }, { 2, 3 } };
fixed(int* p = a) {
Console.WriteLine(*(p+2));
}
}
見る限りジャグ配列のほうが掛け算もなく、メモリ参照も少ないな。
>>51 へーーー、そんな風に実行コードに落ちるんだ
かなりごついプログラム作ったとき効いてきそうだけど
フレームワークがコード解析する方が時間かかるきもする
59 :
43 :2007/05/18(金) 20:40:15
>>51 配列のサイズとかメモリから読み出してるんだね
C言語とかなら通常配列のほうが早いだろうけど
C#ならジャグ配列のほうが早いようだ
古いメモに書いてあったこと bool[,] < bool[][] int[,] > int[][]
最近は、型サイズ付インデックスレジスタもあるみたいだし、最適化してたら、また変わるかもね。 あるいは、unsafeにすれば・・・
まぁ売り物アプリみたいにどでかいメモリーエリアアクセスするんならかなり変わるけど 初心者が作る程度なら、それほど変わらない気がするな それよりパソコンで一番遅くて気になるのは表示 まぁダイレクトなんちゃら使えば早いらしいけど
.NETの公式解説書には1次元だと専用のIL命令が使えて、多次元だと使えないらしい。 ジャグ配列だと専用IL命令が使えるから1次元配列とパフォーマンスが同じになるって書いてあった。
そのようだな。 ildasmするとすごい汚いことになってる。
そもそもジャグ配列と多次元配列って使う場面が違うと思うんだけど。 ジャグ配列、っていう直観的でない言葉を使うから言葉に惑わされるんじゃないの? ジャグ配列なんていうけど、要はただの配列の配列でっせ。
多次元配列は滅ぼしていきたいというのが設計者の意向のように見える 一応残しておきましたけどみたいな
>>67 そんなわけないでしょw
チミがメモリ上にデータが配置されるイメージを持ってないからそう思うだけ
多次元配列は C とかにはないっしょ
あるがな。
>>68 それとライブラリのサポートの間に何の関係が?
話題のレベルが一気に下がったw
C の場合は配列の配列だろ
int square[][2] = { { 0, 1 }, { 2, 3 } }; int *jagged[] = { (int[]) { 0, 1 }, (int[]) { 2, 3 } };
だから「配列の配列」といってもcと.NETじゃ意味が違うんだよ。 cの意味で「配列の配列」というなら.NETの多次元配列だって配列の配列だ
2次元配列とジャグ配列で、初期化は2*2だと後者のほうが5倍以上速いみたいだが、16*16だと前者のほうが1.3倍くらい早くなる。 16*16の配列へのランダムアクセスだと2次元配列のほうが速かった。5%くらいだが。
ええぃもうええわ! どっちにしてもお前らが作るようなアプリに影響なんてないだろうが!
>>76 だから用途が違うものをそもそも比べるのがおかしいって
>>75 意味はいっしょ。。
cには配列の配列も表現できるし、多次元配列もある。
int a[2][2]; //cの多次元配列
int **b; //cのジャグ配列というかポインタのポインタ
>>79 C言語を良く知らないのなら、しったかしないほうがいい
? 大きくは間違ってはないと思うが。
>>81 よく知ってるよ。指摘できないなら黙ってたほうがいいよ。
C の規格票で多次元配列は配列の配列と定義しているから、 int a[2][2]; は C の二次元配列だ。
いや、
>>79 の言ってることは正しいけど最初の一行だけがおかしい。
ドトネトだと
int **b;
こっちが「配列の配列」
>>84 も書いてるけど、cの場合は普通
int a[2][2];
こっちの方を「配列の配列」という言い方をするんじゃないかな?
Cでは「配列の配列」が長方形配列で、「配列ポインタの配列」がジャグ配列
C#では「多次元配列」が長方形配列で、「配列の配列」がジャグ配列。
用語の違いだけで、
>>79 も
>>85 も間違っていないように思われる。
そうゆうことか。勘違いしてた。
Cでポインタのポインタを使えば、ジャグ配列のようなことは出来るが 出来るであって、イコールじゃあるまい
ナニをもってイコールじゃない、というのかよく分からないが 少なくともデータ構造的にはイコールだよ。
おまいらのせいで「配」って字が変に見えてきたぞ
>>85 確かK&Rの配列の説明だと[][]と**は同じものだと書かれてなかったっけか?
もうK&Rなんか、どこに置いたか忘れちまったくらい昔なんで怪しいんだが。
・・・文字列配列の項とごっちゃかな?
てか、多次元配列なんてオーバーフローが怖くてこの商売始めてこのかた
使ったことないな。
>>91 > 確かK&Rの配列の説明だと[][]と**は同じものだと書かれてなかったっけか?
そんなわけがなかろう・・・。
お前は酔っているのか。それとも本当に無知なのか。
**はただのポインタのポインタ。ジャグとは限らん。
もうやめない?この話・・・
>>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の文字列型に近いメモリ管理してる感じだね
cでは[][]はただの2次元配列。 a[x][y]は a+x+x*の要素数*yのポインタの指す位置をみてるだけ。
>>95 Cは一次元だって境界チェックはないんだから、それを言い出すのはおかしいだろう。
別にかまわんだろ。 もう終わる。
座標変換の時といい、キチガイ多いね
使い分けたら意図がはっきりする,でいいだろもう
座標変換はキチガイだったけど 配列はためになったぞ
どちらも議論も一方に正しいことを言ってる人間がいて他方で頓珍漢なこと言ってる奴がいるのに 片方がキチガイで片方がためになるって不思議な感覚だな。 まあ個人的には、演算精度の話も配列の構造の話も学部一年生レベルの話なわけで、 どちらも恥ずかしげもなく「ためになる」とは言いにくい類の話だとは思う。
>>103 そーいった決めつけをする藻前もかなりの馬鹿、何が誰に為になるかわからんもんだよ
C++だと想定どおりバイナリ吐いてくれるけど、今回の議論みたいに想定外のバイナリ吐かれると、 今までの経験が通用しなくなるな。ILを一から勉強しとくかな。
>>100 座標の話ではないのですが
簡単な2DCADを作ってみようと思います
んで回転させる場合、やっぱりサインコサインタンジェントなのですか?
いいサイトがあったら教えてくだちい
いいサイトっていうか、二次元の回転行列なら高校数学でやってるはずだろう。
数学は定義と定理の積み重ねだから、ピンポイントで調べても理解できないんじゃないかな。 本屋で高校の数学の参考書を買うか、NHK教育で数学番組みたほうがいいな。
CADみたいな図形をグリグリ動かすソフト作るんならC#より C++使った方が良いと思うが・・・
むしろ時代を先取りしてWPFで描画すれば。 本当に時代が来るのかは怪しいがw
CAD作る暇があったら、大検でも受けて、大学行け。
KeyDownからKeyUpまでの間、 フォームのサイズを変化させ続けるプログラムを作りたいのですが 一番簡単な作り方はどんなのですか?
KeyDownでタイマー動かしてKeyUpで止めりゃいいじゃない。
>>114 タイマーですか、わかりました。
調べてみます。
ありがとうございます。
何その斬新なインターフェイス
MS推奨のインターフェイスにしたほうがいいんじゃないの? それなら、Formに既に実装されるし。 alt+スペース、sの後、カーソルキーでサイズ変更できる。
>>117 もっともな話なんだけど、しかし実際問題そんな操作はパソヲタ的な人間しか
覚えられないよ。
まあしかし、一見快適そうに思えるUIの改良が、実はイライラをもたらす改悪でしかない、
っていうのはありがちな話で、
>>113 もその類にしか思えないな。
Excel等のメジャーアプリに合わせるのが後々のため。 アプリごとに異なるとショートカットなんかすぐ忘れてしまう。
一般的にはマウスで図形を選択した後、矢印キーで移動 シフト+矢印キーでサイズ変更だな、あとはマウス操作で移動やらサイズ変更
Formの話でどうして図形が出てくるの?
CADとごっちゃになってるんだろう
質問です。 あるインターフェースを積んだDLLがあって、このインターフェースを積んだクラスを 以下のようにして使おうと思ったのですが、 ConstructorInfo ci; インターフェース temp = (インターフェース)ci.Invoke(BindingFlags.CreateInstance, null, null, null); \プログラム.exe \インターフェース.DLL \Directory\クラス.DLL \Directory\インターフェース.DLL とファイルが配置されていた場合、InvalidCastExceptionが発生してしまい、キャストできなくて 困っています。 参照している物のパスが違うだけなのに、なぜキャストできなくなってしまうのでしょうか?
>>121-122 頭悪いなw
120はそう変なことは言ってない。
四角い領域のサイズを変更する、という抽象水準ではなにも変わらないからな。
>>107-
>>112 ありがとうございます!
回転行列はなんとか理解できました。三角関数で検算しても合ってるから
多分大丈夫だと思いますw
でも、数学って判った時は本当に面白い!!!!って思いますね
乞われるまで喋っちゃだめなんて我慢できん
Do nothing till you hear from me.
>>125 三角関数で検算って何なの
回転行列自体三角関数使ってるだろ
>>125 なんか分かっててネタで書いてる気がするけど、
本当は座標系の回転なんてGDI+組み込みの機能でできるんだけどね。
107はネタというか、話の取っ掛かりを作ったつもりだったんだが。
ああ書けば誰か一人ぐらい突っ込む奴がいるだろうと思って。
精度的にも二次元のCADならまず問題にならんと思うし。
μmオーダーで設計することを意図するのなら別だろうけど、そんなの普通の用途じゃありえんよね。
私は、VisualC#2005ExpressEditionで初歩から勉強中なのですが、 これでGUIのソフトを作って公開したとすると、利用者には別途に .NET Frameworkのインストールが必要になると聞いています。 しかし、巷では「このソフトには.NET Frameworkが必要です」のような文言はほとんど見かけません。 これはVisualStudio2005でソフトを作っている人がほとんどいないということでしょうか? 皆さんはどのような環境でC#プログラムを作っているのでしょうか?
いまどきのパソコンには.NetFrameworkなんてもともと入ってるし。
135 :
133 :2007/05/20(日) 23:42:07
>>134 そうだったんですか、杞憂だったようです。
>μmオーダー ネタ投入しようとしても無駄だよ。
0.1mm = 100μm よく使うサイズですよ。 俺だったら1μm = 1.0f とするんだがな。
>>135 ちょいまち。
XPのSP2では標準では.Net1.1しか入ってないと思う。> 出典 Wikipedia
Vista なら3.0まで入っているはずだが人柱はゴメンだとSP2あたりが出るまでXPから買い換えない人も多い。
VisualStudio2005は 2.0 用なので、何も考えないで作って配布した場合、やはり別途WindowsUpdateで2.0を
入れる必要が出てくる。(もちろんダウンロード版で入れてもいい)
これは、ちょっと調べれば分かることなので一々書いていないか、もしくは1.1をターゲットに作ったかだと思う。
ということで、ダウンロードの解説あたりに.Net2.0必要と書いてあるのは親切だと思う。
標準で1.1入ってるのは2003じゃなかったか XPのSPじゃ入らないでしょ
XPのCDに同梱されているだけだね、1.1は。 ただメーカー製の場合だと初めから「1.1がインストール」されているかも。 ダウンロードのページに2.0が必要な旨と.NETのダウンロードページへのリンクを貼っておくといいよ。 自分の場合はそうしている。 それからVisual Studio 2005を使わなくても.NET2.0入れてそのコンパイラ(csc.exe)でコンパイルしたら実行には2.0が必要だよ。
.NET FrameworkはJavaと違って、読み込まれたクラスはすべてすぐJITでコンパイルされるのですか?
違うよ
javaをちょっと触っただけでC#に移ってきた初心者なんですが、 C#にはjavaのループ用ラベルみたいな機能ってありますか? 2重ループの中でbreak文を使ったときに 内側のループを抜け出すか外側のループを抜け出すかを それぞれ記述したいので、一番推奨される方法を教えてください。
breakは一段階しか抜けないからgotoを使う。
>>144 了解です。ごーつー使います。
ありがとうございます。
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%近くなってしまうのですが、他に良い方法はあるのでしょうか?
こんな感じ、じゃなくてやってることをマンマ書けよ そんなセンスだから問題が解決できないんとちゃうの?
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);
}
そりゃあマウスポインタが移動する毎にビットマップ作ってたらマズイんじゃない?w 一旦書いた線を消去する方法が分からない、ということだろうけど そんな姑息な方法じゃなく正攻法でやることを考えないとダメだよ
正攻法って?
1. 消したい部分だけ無効化して再描画 または、 2. 線を書く前に書く部分の状態をバックアップしといて、 線を消すときにはそのバックアップを復元する
ですよね
MSX世代。
>>152 ありがとうございます。
無効化とか線を消すってのの意味がよくわかんないので、もうちょっと調べてみます。
正攻法w回答にセンスが無いなぁ。
>>155 何だ、線を消すのが面倒だから毎回ビットマップ作ってそれに描画してたんじゃないんだw
むしろWinのグラフィックのお作法を本当に何も知らないんだな。
Picturebox(に限らないけど)描画するときには、Imageプロパティに設定した
イメージに描画するんじゃなくてPictureboxそのものに描画するんだよ。
つーか、そのぐらいのこと勉強してからコード書くだろう普通。
なーんも理解しないうちからこんなことで質問するって、大げさじゃなく頭オカシイと思うぞ
いや低レベルなのはかまわないが、最低限やるべきことやってないやる気の無さは 低レベルかどうかとはまた別の問題だろう
>>161 > 最低限やるべきことやってない
それは、その最低限やるべきことを既に知っているものの言い分だぞ。
ならばロクに理解してもいない技術に手を出す前に、 まず「最低限なにを知るべきか」を人に聞くのも一つの手だろう。 そういうことならこのスレの趣旨にあってると思うし、俺も噛み付かないよ
っていうか、繰り返しになるけど、たとえばdobonとかにある簡単なサンプルに目を通すぐらいの 努力はやっているかどうか、というのはレベルが低いかどうかとは完全に別問題だろやはり サンプルみ目を通したがここは理解できないから教えてくれ、 って質問なら文句言わないよ。 何もしないでできん・わからん、ってそりゃ当たり前だろ、って言ってんの。
>>166 うんうん、そうだねそうだね
わかったから、これ以上荒さんでくれ
ま、みんなこれからは穏便に行こうや。
>>169 本気か?
それを言うなら、それすらできない人間ならこんなスレで何きいても所詮無駄じゃないのか?
そうだね。 よく考えたら君が正しい。 俺が間違ってたよ。
ガキ大杉
どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド
質問スレに常駐しているとたまに
>>170 みたくなるから恐ろしいな。
下らない質問にイライラするために居続けるなんて無駄だよね。
取り敢えず、参考になりそうな、サイトを知ってるんなら提示して、 それでもわかんなかったら、またいらっしゃいぐらい書けないのかなぁ。 どうしてわかんないんだ?そんな事も知らんのか? っておごり高ぶる人は大成しないよ。
pictureBoxの中のときだけ、マウスカーソルを十字カーソルにするだけでいいんじゃないの?
CADとかペイントでも作ってるのかな? PictureBoxの端に目盛りでもあるんじゃないのかな。 だとすれば十字線が端まで伸びてると便利だと思うけど。
自分の書いたコードの処理の負荷が想像できない人っているよね。かわいそう。
それは経験を積めばある程度わかるようになるよ。 そんなことより君は初心者をバカにするためにわざわざこのスレに来てるのか?
いえ、励ましたいのです。なぜなら私も初心者だから。
小学生が大人ぶりたいから幼稚園にきたら 先生に叱られれて僕も子供ですから、と開き直った状況
性格悪いよ、君たち。
すいません,ファイルの読み取りで質問させて下さい. 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と一行とばしにしか入力されませんでした. なぜでしょうか・・・
while (sr.ReadLine() != null) // <- 一回読み捨てて、 { line.Add(sr.ReadLine()); // <- 次の一行を読んでる }
185 :
183 :2007/05/22(火) 17:43:23
ありがとうございました.do whileで書き換えて解決しました.
こういうやり方もある string text; while ((text = sr.ReadLine()) != null) { line.Add(text); }
すげぇ!
MSDNの使用例ほとんどそのまんまなのに、驚くなよ。
190 :
デフォルトの名無しさん :2007/05/23(水) 04:38:31
メインフォームだけを半透明にしたいのですが、どうしたらいいのでしょうか? 上に乗っているボタンとかは半透明にしたくないのですが、 this.Opacity = 0.5f とかにすると全部が半透明になってしまいます。
初心者さんのやることは凄いなぁ 遊びなら良いが、言語以前に論理的思考ができない香具師はこの手の仕事は やらない方がいいな、作るモノが全部最終的につじつまが合わなくなって ノイローゼとか鬱になる
またおまえか。
>>190 Opacityの型はdoubleなのに、なんで0.5fって書くの?
>>190 設定ひとつでできるようなスマートな方法はない。
スマートでない方法なら、キャプションなしのボタンだけのフォームを別に作って、
半透明フォームの決まった位置にそのフォームが常に表示されるようにプログラムする。
すいません.配列int[] hoge = new int[8]の各成分を Console.Writeline("{0},{1},{2},....",hoge[0],hoge[1],hoge[2],....)とむりやり横に表示させています. 配列の成分を横に並べて表示させるとき,もっとスマートなやり方はないでしょうか?
forだのforeachだので回して stringだのStringBuilderだのに連結して それを表示したら?
for(i=0;i<hoge.Length-1;i++)
Console.Write(hoge[i] + ",");
Console.WriteLine(hoge[hoge.Length-1]);
>>197 の方が効率は良そうだけど
Joinでええやん
これでいんじゃない string.Join(",", Array.ConvertAll<int, string>(hoge, delegate(int value){return value.ToString();}));
使いづれー。
C#2.0の新機能サンプルみたいだな
>string.Join(",", Array.ConvertAll<int, string>(hoge, delegate(int value){return value.ToString();})); 何のために匿名デリゲートなんか使ってるんだ? string.Join(",", Array.ConvertAll<int, string>(hoge, Convert.ToString)); でいいやん。
なにがなんでも匿名を使いたいんだよぉ
メソッドからデリゲートへの暗黙の変換も 2.0 の機能か。
すいません、質問です。 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で異なるインスタンスが生成されてしまいます。 これの回避方法ってありますでしょうか。
>>206 dic1とdic2を同時にシリアライズしてみたら?
たとえば object[] objs = new object[]{ dic1, dic2 }; をシリアライズするみたいな感じで。
>>207 ありがとうこざいます。その方法でできました。
四角形の領域内チェックは Rectangle.Contains とかあるのですが 多角形の領域内チェックってあるんでしょうか? 計算方法は分かりますが、もしあるならそっちを使いたいので・・・・
リージョン使うんじゃねーか?
質問させて下さい。 あるbyte配列の中から特定の文字列を取得したいと思っています。 『Encoding.Default.GetString(byte配列)』でbyte配列を文字列に変換し、 文字列の中を正規表現で検索しようとしたのですが、 \x00〜\x80までしか検索にかからず、\x81以上の値は無視されるようです。 文字列に変換した物をbyte配列に戻すと\x81以上の値は保持されているのですが、 \x81以上の値を取得する方法はないでしょうか? 『\xFD 4byteの適当な値 \xFD』の文字列が抜き出せたらと思っています。 もう1つ、byte配列もしくはバイナリファイルの中から特定の文字列を検索する方法はありますか? 1つめの物を含め1byteづつ判定しつつ繰り返すことしか思い浮かびません、、、
それはバイト列であって文字列じゃないだろ。 普通に >1つめの物を含め1byteづつ判定しつつ繰り返す でいいよ。
>>212 ナニ言ってのお宅
>>211 まずさまざまある文字のエンコーディングの違いについて調べた方がいいよ。
それを知らないことには話にならない。
アンカも満足に(ry
エンコーディングのちがいとか以前の問題だろ。
>\x81以上の値を取得する方法はないでしょうか? エンコードせずに、バイト配列から取得するしかないです。 >もう1つ、byte配列もしくはバイナリファイルの中から特定の文字列を検索する方法はありますか? >1つめの物を含め1byteづつ判定しつつ繰り返すことしか思い浮かびません、、、 それで十分です。
クマー
221 :
211 :2007/05/25(金) 07:22:38
改めて調べてみました。 ASCIIは7bitまでしかなく、ShiftJISで8bit目を使っているんですね。 更に正規表現の所のヘルプをよく見てみると、ASCII文字だけと。 >>『16 進数 (2 桁) で表される ASCII 文字と一致します。』 Unicodeの文字表までは見つかりませんでしたが、 『\u0000』の形式でも検索出来ないので、Unicodeでも割り当てられてないんでしょうね。 少し残念ですが、どうもありがとうございました。
なに言ってるかサッパリわからんが 検索文字列をByte配列にエンコードして検索すりゃいいはなしだろ
223 :
211 :2007/05/25(金) 21:29:48
>>222 正直諦めてましたが、ヒントをくれたおかげで解決出来ました。
正規表現の中で文字コードを指定して検索しようとしてたのを、
検索したい文字コードを一度stringに変換することで検索出来るようになりました。
何故そうなるのか理解は出来ていませんが、とりあえず満足です。
>>212 確かにバイト配列であって文字列ではなかったですね、、
上で解決するまで指摘されてることが理解出来なかった馬鹿者でした (´・ω・`)
[StructLayout(LayoutKind.Sequential, Pack = 1)] struct test { public byte A; public byte B; public ushort C; } のような構造体をbyte[]に高速に変換する方法はありますでしょうか?
StructLayout属性でLayoutKind.Explicitを指定して、 バイト配列を構造体の他のメンバーにオーバーラップするように配置すればいいんじゃない? ちょうどcの共用体のイメージだよ。 "c# 共用体"でググるとヒントがみつかる
それならfixed byte[]にしないといけないんじゃないの? それで本当に出来るのかどうかは知らんが
まあ、unsafe でいいなら stackalloc で取った byte 配列を 無理やり test* にキャストして、 そこに test の中身を代入で byte 配列化できる。
意味がわからない。 どうせunsafe使うなら固定して普通に読むだけだろうw
struct struct 何を固定するんだよっ 普通に読むってbyte[]にしたいんだろ。 byte[]へのコピーはどうしたっているんじゃないの?
230 :
224 :2007/05/26(土) 13:14:19
うん
横から質問だけど、 fixed byte Hairetsu[3]; みたいに構造体に宣言された配列にはどんな感じでアクセスするの? Hairetsuの型は何になるの? 今試せないので
普通にreadonlyなbyte[]と等価だと思えばいいんじゃないの?
>fixed byte Hairetsu[3]; Hairetsuの型はbyte*になる
へー だからunsafe必須なのか byte* hairetsu = stackalloc byte[3]; と同じような感じなのかな
確保されるのは stack じゃないけどな
っていうか、MarshalAs属性でUnmanagedType.ByValArray指定する方が ドトネト的にはお行儀がよいやり方なんじゃないのかな
マーシャリングとは別だろうが
.NET 的には 一々バイナリなんて考えるなよこのロートル(プゲラ だと思うけどね
>>238 そうだったね。
このあたり、しばらくやってないといつも混乱するよ。
>>239 普通にアプリ書いてる限りはね。
でも、まあ、一応、過去との互換性とかのために MarshalAs とか unsafe があるわけで。
すべてのクラスにunsafe付けてるような人っているのかな
VS2005のプロパティ欄やソリューションエクスプローラーのような 切り離したりドッキングができるようなコントロールはどうやって作るんでしょうか どなたかご存知でしたら教えて頂きたい
244 :
デフォルトの名無しさん :2007/05/27(日) 15:45:26
いない
日本語的に質問の答えになってないな。
フローティング状態のときはMDI子ウィンドウでドッキング時は 子コントロールにするんじゃない?
CodePlexかCodeProjectを"docking"で検索すれば
そんな営利目的には使えないようなもの自分の手柄みたいに得意げに紹介されても困るでしょ
作り方を知りたいだけなら、十分な情報だろうに
まあ、確かにそれはそうだね
CodePlexかCodeProjectを"docking"で検索すれば ↓ そんな営利目的には使えないようなもの自分の手柄みたいに得意げに紹介されても困るでしょ どう書いたら「自分の手柄みたいに得意げ」じゃないと見てもらえるのだ?
this.contextMenuStrip1.Show( MousePosition.X, MousePosition.Y ); の間違いね。。
>>253 どうやらFormがアクティブの時は出ずに
ドロップ元のエクスプローラーがアクティブの時に出るようですね。
257 :
デフォルトの名無しさん :2007/05/28(月) 14:47:42
すみません、VB.NET の方で訊いてみたのですがご指導いただけません でしたのでこちらでも訊かせてください。すみません。 WebBrowser で Excelファイルを表示したとき、 VB6 の頃は Excel のツールボタン列がいくらでも選択できて 表示できたのですが、VB2005 になってから表示されないようなのですが、 もし表示するための方法等がありましたら教えてください。 よろしくお願いします。
お帰り下さい
WebBrowserコントロールから画像(ねらったオブジェクト)を取得したいのですが GetNextControlで拾おうとしましたができませんでした どのようなメソッドを使えば可能か教えていただけませんか?
260 :
デフォルトの名無しさん :2007/05/28(月) 15:55:54
>>258 このたびはVB.NETスレからカスが流出してしまった事を真に深くお詫び申し上げます。
今後このようなことが内容にカス叩きを徹底してまいります。
今後ともよいご関係が続いていけますようお祈り申し上げて、お詫びの言葉とさせていただきますぉ
>>259 DOMで。
HtmlDocument.GetElementFromPointあたり?
262 :
259 :2007/05/28(月) 16:03:28
>>261 サンクス!!
調べつつがんばってみます
>>257 excelはインストールされていますか?
webbrowser上でActiveXコントロールで実現しているだけじゃないのかと。 webbrowserでは閲覧だけにしといて、ツールバー使いたければオートメーションのほうを考えたほうがいいのかも。
266 :
デフォルトの名無しさん :2007/05/29(火) 09:59:01
>>264 参照先ありがとうございました。
>>263 Excelは2003が入っていますが、VB6でのWebBrowserではツールバーも
すべて表示できていたと記憶しています。
>>265 >ツールバー使いたければオートメーションのほうを考えたほうがいいのかも
方法はあるということですね、そうですか、また調べてみます。
また質問するかもしれませんが、よろしくお願いします。
どうもでした。
いや、VB.NETスレから出るなよ
268 :
デフォルトの名無しさん :2007/05/29(火) 11:50:18
ユーザーコントロール内のdataGridViewにマウス関係のイベントがまったく 発生せず、Drag&Dropの処理ができずに困っています。 ユーザーコントロールにせず、Form内にdataGridViewを作成した場合は マウスイベントが発生し、Drag&Dropの処理ができています。 なにかやってないからだと思うのですがヒントをいただけないでしょうか?
Drag&Dropとマウスイベントって関係なくね?
マウスイベントではないですね(汗 ドラッグアンドドロップイベントでした。 DragEnter,DragOver,DragDrop この3つで処理するんですが、 これらがぜんぜんイベントかかりません。
ユーザコントロールにマウスイベントが起こってると予想。
>>271 最初私もそうにらんで、ユーザーコントロール側、PageGridViewっていう
class名なんですが、_DropEnter とか作成して AllowDrop をTrueにして
やってみたんですが、ブレークポイントかけてもまったくイベントかかって
きてないんです。
すみません。ケアレスミスでした。 イベントの関数を書いておきながらイベントに登録してませんでした。 m(_ _)m
274 :
デフォルトの名無しさん :2007/05/29(火) 14:27:17
画像ファイルを読み込む処理についての質問です Image imgGetPict = Image.FromFile(ファイルパス); としてImageを取得しているのですが ファイルパスがURIの場合、どのようなクラス、メソッドを使用すればよろしいでしょうか? 取得したいのはbmpやGIFファイルです
WebClient or WebRequest/WebResponse
276 :
274 :2007/05/29(火) 15:17:24
>>275 Image.FromStream(MemoryStream(WebClient.DownloadData(URI)))
で読み込めました
ありがとうございます
難しいな〜
>>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使って コンパイル→できたファイルをそのまま走らす 時には何か特別な書き方がいるのでしょうか?
普通にフォームを表示するアプリでDirectory.GetCurrentDirectoryを使うと実行ファイルのあるフォルダパスを取得出来ますが、Environment.GetCommandLineArgsで引数を拾って起動した場合、何故か実行ファイルのあるフォルダとは異なる場所が取得されます。 ヘルプにも > 現在のディレクトリは、元のディレクトリとは異なり、プロセスが開始されたディレクトリです。 と書かれていますが、引数を拾う場合でも実行ファイルのある(フォルダ)パスを取得するにはどうしたら良いのでしょうか。
Application.StartupPath
>>280 >何故か実行ファイルのあるフォルダとは異なる場所が取得されます。
もともと 実行ファイルのあるフォルダを取得するメソッドじゃないからな。
ヘルプに書かれている通りカレントディレクトリを取得する…
答えは親切な人が書いてるけど、
カレントディレクトリってなにか調べたほうがいいんじゃないのか?
>>281 ありがとうございます。
EnvironmentクラスやDiagnosticsクラス辺りを一生懸命探していました。
クラス名の名前と機能が一致しなくていつも目的のクラスを探すのに苦労しています。
>>282 カレントディレクトリは現時点で参照している作業ディレクトリで、MS-DOSならCHDIR(省略形CD)で変更する事が出来るものですね。
それを踏まえても何故起動方法の違いでカレントディレクトリが変わるのでしょうか。
GetCommandLineArgsを使うとコンソールアプリと見なされるから変わるのでしょうか。
仮にそうだとしても何故コンソールアプリと見なされると変わるのか理由が解りません。
>>283 メソッド名は呪文や暗号ではない。素直に読んでみ。
Environment.GetCommandLineArgsで引数を拾って起動ってどういう風にやってる? 普通に起動と方法が違ってないか? そこにヒントがある。
コンソールアプリとフォームの違いではないよ。 実行の呼び出し元がカレントディレクトリ。 エクスプローラだとダブルクリックしているフォルダー ショートカットだとショートカットのある位置。 コンソールだとコンソールのカレントフォルダ。
作業ディレクトリを指定する場合も考えられるな そして OpenFileDialog
> 現在のディレクトリは、元のディレクトリとは異なり、プロセスが開始されたディレクトリです。 これが全てじゃないか。 現在のディレクトリ=カレントディレクトリ
> The current directory is distinct from the original directory, > which is the one from which the process was started. 訳がおかしくないか?
一つ目の whichはどこにかかっているんでしょうか。
意味的にthe original directoryでしょう。 だから誤訳。
意訳でしょ
293 :
デフォルトの名無しさん :2007/05/30(水) 11:29:39
WebBrowserコントロールでGIF画像の有るページを表示させた上で 表示させたGIFをローカルに取得したいのですが URL指定ではなく(サーバーにある画像ファイルではなく)、 WebBrowserコントロールに表示されている画像を取得することは可能でしょうか。 表示後にネットから切断されたりサーバーからファイルが無い状態でも ローカルのブラウザに表示済みのものを保存したいのです
294 :
デフォルトの名無しさん :2007/05/30(水) 11:38:18
>>293 が
とにかくWEBBROWSERコントロールのこと聞きすぎなのにワロタ
295 :
293 :2007/05/30(水) 11:44:49
>>294 すみません
MSDNも参照してるのですがどうも思ったように作れなくて…
解説してるページも見つけられなかったので悩んでます
>>292 意味が正反対になっちまったら意訳とはいえないだろうw
ヘルプは機械翻訳みたいだな。 yhooo翻訳もおかしな結果になる。 内容としては、 現在のディレクトリはプロセスが開始されたディレクトリとは限らない。ってことだろうな カレントディレクトリは変更できるからね。
変更できるもなにも、最初からカレントディレクトリと実行ファイルが存在する ディレクトリには何の関係もなかろう。
300 :
293 :2007/05/30(水) 21:33:27
>>297 ごめんマジでした
HtmlDocument.GetElementFromPoint
HtmlDocument.GetElementsByTagName
を使えばオブジェクトとして持ってこれるのかな
もう少し試してから出直してきます
ありがとうございました。
また文脈読めない馬鹿が出てきたね。
ちなみに
>>300 じゃないよ。
いちいち煽らない。
>>301 ああすまん、確かに誤読してるな。
まあでもお前さんほど馬鹿じゃないけど
304 :
301 :2007/05/30(水) 21:57:23
>>303 何故わかったんだ?
お前ただの馬鹿じゃないな?
俺ハッカー!
TreeViewにデータをドロップし、ドロップされた座標のノードの下に新規ノード追加 という動作を行っております。 ドロップされた座標のノードの下に線を表示したいと考えているのですが どのようにすればよいのでしょうか?
>>306 ドロップされた座標のノードの取得方法がわからないのか?
線の引き方がわからないのか?
すみません、メソッドの参照型の引渡しで、そのメソッド内でのみ、 参照型引数のメンバ変数を変更禁止にする方法ってありますか。
リードオンリーなラッパをかぶせてから渡す。
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 がメソッド内で書き換え可能でした。 できればコンパイルエラーになればいいんですが。
a フィールドが読み取り専用になるだけであって x フィールドは好き勝手に書き換えできるわい
たぶん
>>310 はこういうことを言ってるんだと思う
class ReadonlyA{
private A a;
public wrapper(A a){this.a=a;}
public int X{get{return a.x;}}
}
もしくはCloneして渡す
関係ないけど引数名の先頭にアンダーバー付けたりするのはマナー違反
マナー違反ではないが、マイクロソフト様のガイドラインに違反している。
C みたいに規格で処理系の予約語になってたりはしないのか?
しない。アンダースコアで始まる識別子なんて汚いだろ。 互換性に拘らないMicrosoftだからこそなせる業。 まあ、@つけりゃ予約語も識別子として使えるしな
内部の実装はどうでもいいから外から見える名前は整えろ っていうのがマイクロソフト様の方針
>a フィールドが読み取り専用になるだけであって >x フィールドは好き勝手に書き換えできるわい この言語仕様ってどうなん?違和感があるんですが。 C++のようにメソッドの引数にconst使えないのか。
319 :
306 :2007/05/31(木) 20:50:41
>308 線を表示するほうです >307 参考にするもリンク切れのようで キャッシュもなかったようですがどうすれば・・
DrawNode イベントで自分で描画。
>違和感があるんですが 俺はないな。 内部構造、動作がわからないものを外から勝手にリードオンリーできるほうがおかしいと思う。 >const使えないのか。 コーディングの問題で、これは別問題。
話が通じてないな。
>>321 doubleの内部実装しらないけど、readonlyにできるよ。
メソッドの使用者に対してこの引数は弄りませんと明示できるほうがバグが減ると思う。C++はそうなってる。
public readonly A a; で、aメンバーもリードオンリーになるのは変だと書きたかっただけなんだけどな。
それを変とおもう発想の方が変だろう。 いや、変というより貧弱というべきか。
>>309 に対して、
>C++のようにメソッドの引数にconst使えないのか。
は的外れじゃないか?
確かにconstパラメータほしぃ
あるインスタンスがリードオンリーなのに、そのインスタンスのメンバは書き込みOKっておかしいよ。 ファイルシステムで、c:\dataは読み取り専用なのに、c:\data\testは書き込みOKって言ってるようなもんでしょ。
ネタですよね?
>>329 初心者乙
参照型インスタンスは実はポインタ。
実体は別物。
リードオンリーだと1回設定したら実体が入れ替え出来ないだけ。
普段は実体が入れ替え可。
めちゃくちゃな例えで言うと人間の頭とアンパンマンの頭の違い
329はネタだと思うけど、もし本気で書いてるとしたら 331の説明では意義を理解できないのは確かだと思う
>>323 お前こそ
c++のconstの意味分かってないだろ?
>>331 そんな基本的なことは分かった上で言っている。
c#のリードオンリーの定義に問題があると言っている。
ネタはもう結構。
c++のconstがほしい。
バグぐらい自分で潰せよ。
>メソッドの使用者に対してこの引数は弄りませんと明示できるほうがバグが減ると思う。 すいません、結局C#では、これはできないの?
const引数やメソッドが仕様に無いのは、セキュリティとかパフォーマンス上の 問題があるのであえてそうなってるってばっちゃが言ってた。 ちなみにC#の言語仕様ではなくCLRの仕様らしいよ。C++/CLIも然り。 俺もconst欲しいけど、まぁあくまでコンパイル時の検証より 実行時の実用性を優先させたってことでしょ。
>>337 開発の仕事をすれば、constのありがたみが分かるよ。
>>340 このスレの人はconstがなんだかわかってないと思うよ。
自動的に書き換え禁止になる機能とかと勘違いしてるよ。
public readonly DateTime dt; で dt.Nowが何になれば満足するの? これはプロパティで構造体か。
>c#のリードオンリーの定義に問題があると言っている。 んー、まぁC++のconstはあくまでコンパイル時の検出のみであることを考えれば、 逆にC++の仕様の方が不自然だったりするんだけどね。
>>309 は放置されてる。
変更禁止ってのは取り方がいろいろあるよな。
コンパイル時にはねるのか、
書き込もうとしたら実行時例外がおこるのか、
書き込んだ値を反映させないのか。
>>340 コンパイルが通らないという理由だけで、const_cast使う奴もいるので、結局デスマーチ。
const_cast ならまだ検索効くから対処できないこともないが、 C 風キャストで const 外されるとタマランな。
というより、C++のconstみたいな使用にははっきりいって意味がないでしょ。
参照先を書き換えないと宣言することに意味はないし、
書き換え禁止を強制する仕組みにも意義を認めにくい。
メソッドの最初の行と最後の行をかく間にそのメソッドの機能を忘れてしまうような
プログラマなら、最初から何を強制しようと無意味だろう。
>>309 意味ないと思うけど、サブクラスだけにプロパティもたせてるようにして、
引数の型はプロパティをもたないベースクラスにするとか。
あとは普通にインターフェイス使うとか
C++のconstはコードの最適化のためじゃあるまいか
const 使うと対象のクラスのメソッドにconst 汚染が…
特定のメソッドのために不自然なconstが。
で、
>>334 はどこに行ったの?
>メソッドの最初の行と最後の行をかく間にそのメソッドの機能を忘れてしまうような >プログラマなら、最初から何を強制しようと無意味だろう。 で、君はプロジェクトリーダーだったらどうするの?それにPGが一日20hコーディングしてたら? PGを外してもモノはできないよ。プロジェクト放り出して逃げる気? constが無意味とかいう奴は素人だろ。
>>350 今後javaがconst取り入れるかどうかみとけば。
>>350 デスマーチ乙。今日は早いお帰りですね。
では次の質問カモン! なんか忘れているような。。。
ちゃんと使うやつと使わないやつがばらばらすぎて 実質あまり役に立たないおち
経験からすると、まわりJavaプロジェクトの8割が火を噴いている。 constがないからだったのかw
今はjavaが持てはやされてるけど、今後どうなるんかねぇ
やっぱり意味ないとしか思えんなあ。 C#でもアンマネージドコードを呼び出す時にはInAttributeがあるわけだから、 忘れたとかではなく、設計者が明確にマネージドの範囲内ならイラネと考えたのだろう。
多分あまり変わらない。 それかc++使いが減ってjava使いが増える
演算子をオーバーロードして、擬似的にconstって実装できないかなぁ とふと思った
無理。
Const属性を定義してコンパイラを自分で作れば言語仕様上はいけるんじゃね
教えてください。 C#の話です(.NET2003) テキストボックスの制御の話です。 1行25文字で25行までしか入力できなくしたいのです 複数行が可能にしてあるため1行に25文字以上入力しようとすると 自動で折り返してしまい改行になりません。 折り返し時に自動で改行が入るようにしたいのですが・・・ どうすればよいですかね
ProcessCmdKeyあたりで入力監視して 自分で改行いれればいいんじゃね?
レスありがとうございます。 ProcessCmdKey ですか… 初めて聞く言葉なんでちょっと調べてみます。 ところで テキストボックスで指定行の文字だけ取得するってできましたっけ? たとえば現在カーソルがある行の文字数取得 とか・・・
やろうと思えばできるわな
つまりそう簡単には出来ないって事なんですねー せめて1行あたり25文字しか入力できなく するってのでもいいんですが 行の文字数調べられないとできないですもんね・・・
367 :
デフォルトの名無しさん :2007/06/01(金) 16:43:35
>>366 うぜぇwwwwwwww
行の文字の長さならCRLFで区切ってLength調べりゃいいだけだろうが
小細工はそれが出来てからすればいい
僕も思い出してください
>>367 最初の行のコメントがなければいいヤツに見えるんだがな。
wの数だけでそいつのキモ度が想像できる。
370 :
366 :2007/06/01(金) 20:40:53
初歩すぎる質問だと思いますが、メインメソッドにargsやSTAThread を付ける意味が愚ぐったりもしましたが、どうしても理解出来ません [STAThread] static void Main(string[] args) とかなぜstatic void Mainだけじゃ駄目なのか教えてくれませんか?
>>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);
}
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); }
376 :
374 :2007/06/01(金) 23:23:08
ふだんVB.NETメインで使ってるんでc#的におかしいところがあるかもしれない。 あと、AcceptsReturn 使ってるのはただの手抜きだからたぶん修正した方がいいと思う。
>>372 削除してDrag&DropとかShellExecuteとか使ってみれば分かる
先生 args消したけど分かりませんでした!!
そっちかよ。 argsは起動時のコマンドライン引数でしょうが。 いらないならいらない。
横から質問だけど argsを使わずに起動時のコマンドライン引数を取得するにはどうすればいいの?
string 引数[] = Environment.GetCommandLineArgs(); とか
383 :
382 :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の参照に問題があるようなんですが、 どうやって直したらいいのでしょうか? おねがいします。
例外名を書けよハゲ
386 :
デフォルトの名無しさん :2007/06/02(土) 11:28:27
ハゲでサーセン
ファイルの属性を強制的に解除しようと以下のように書いたのですが、コンパイルすると「演算子 '!' を '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#では駄目なのでしょうか。
! は bool 用の演算子 否定のビット演算子は別にあるので MSDN 漁ってみ
初めまして、C#初心者です。 unsafe private int RetrievalWord( bool first, string* pLog, int maxLogLong ) { } という文で 「マネージ型のアドレスの取得、マネージ型のサイズの取得、またはマネージ型へのポインタの宣言が実行できません ('string')」 というエラーが出て困っています。 いったいどこがいけないのでしょうか?
>>387 c#は普通で、vbは適当に解釈してるから。
>>389 どこがと言われても、エラーメッセージ通りとしか言いようがないが。
コンパイルエラーなら MSDN でエラーコード調べるといいよ。
string* がマネージ型へのポインタの宣言が実行できません に当てはまっている。 マネージ方のオブジェクトは場所が変わる可能性があるからそのままだとポインタでさせない。
>>388 ~ 演算子(反転)というのがあったのですね。
「否定」で一生懸命探していたので気付きませんでした。
ありがとうございます。
File.SetAttributes(filepath, File.GetAttributes(filepath) & (~ (FileAttributes.ReadOnly | FileAttributes.Hidden | FileAttributes.System)));
つまり fixed( string* pLog = log ) { pLog = RetrievalWord( true, pLog, LoadIndexLong ); } の様にすれば良いということでしょうか?
おいおい、 string* = string ってどんな代入だよ
哲学的ですな。
398 :
デフォルトの名無しさん :2007/06/02(土) 13:27:47
ログファイル出力に特化したクラスって有りますか? みんな自前で実装してるの?
何でもいいからやってみろ。 失敗してもそこから学ぶことが大事。 人に聞くのは一番最後。
private string[] log; fixed( string* pLog = log ) { pLog = RetrievalWord( true, pLog, LoadIndexLong ); } これで無理なら、引数としてでは無理ということでしょうか?
えらーめっせーじみてもういちどかんがえてみよう。 ひんと かたがちがうかな
TraceSourceに自作リスナ ややいまいちだが
効率は2の次 自分で解決する能力をみにつけにょう
>>398 DataTable使って作った。XML読み書き楽。
>>405 物によっては容量が馬鹿でかくなっちゃうよな。
>ひんと かたがちがうかな 型ですか?型いろいろ変えてもできません。>< 引数としてでは可能ということは分かりました。ですが、やっぱり渡せません。><
>>407 なんか回答してる方も馬鹿っぽいからあんまり真に受けて
その話題に固執すべきでないかもなw
比較的まともな人に回答してもらいたければ、そもそも
RetrievalWordとやらで何をしたいのかをまず書くべきだと思う。
>>409 もう遅いですが、過去のリストから類似するリストを検索しようとしています。
VC++から移植していて、ここで躓きましたorz
そもそもString*を引数で渡す必要があるなんてどんな場面なのか想像がつかん。
まずunsafeコードを諦めよう
413 :
384 :2007/06/02(土) 15:58:10
>>385 eigo de suimasenn.
reigai no namae ha TypeLoadException desu.
hikituzuki onegaisimasu
英語じゃなくローマ字じゃね?
ログ出力にDataTableて
>>411 refで参照渡しできるのを知らないとか
418 :
デフォルトの名無しさん :2007/06/03(日) 01:58:36
ImageListのImageをウェブから取得するには、どうしたらいいですか? お気に入りのfaviconを.urlファイルを読んでURLを取得、そのURLから アイコンを得たいです。お願いします。
どぼんとかの初心者向けサイトを漁ってみたらどうだろうか。 ちなみに、HTTP では基本的にファイル単位でやり取りすることになる。 直接 Image オブジェクトを受け取るんではなく、ファイルを受け取ってそこから Image を作るってことだ。
420 :
418 :2007/06/03(日) 04:01:16
>>419 ありがとう。じゃあキャッシュを探してそれをImageListに加えればいいのかな?
なんか激重になりそうだが・・・・・・
いろいろやってみます。ありがとうございました。
質問です。 マルチTiffなファイルを作成しようとしているのですが、Image.SaveAdd()の EncoderParameterに何を入れたらいいのかわかりません。 なにかヒントだけでもいいので、教えていただけたらうれしいです。 よろしくお願いします。
System.Drawing.Imaging.Encoder クラスを調べるといいよ
>>422 MSDNのEncoder.SaveFlag フィールドのページに
やりたいことのサンプルコードがありました。
これを元にいろいろいじってみます。
ありがとうみございました。
>>420 >>419 はどこにも「キャッシュ」なんて書いて無い罠
[1] URL から HTTP 経由でファイルを取得する方法
[2] ファイルから Image を作る方法
この2つに分けて考えなさいな
>>418 WebClientを使えば超簡単
using (WebClient webClient = new WebClient())
using (Stream stream = webClient.OpenRead("URL"))
{Image image = Image.FromStream(stream);}
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); }
428 :
418 :2007/06/03(日) 14:36:13
>>424-
>>427 ありがとうございました。おかげでうまくアイコンを取得できました!
MFCにはOnUpdateUIだったか非同期で呼ばれて、ツールバーや ステータスバーの状態を変更できるものがあったと思うのですが、 .netにも同様の機構はありますのでしょうか?
BackgroundWorker が一番近いかね
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(); }
IsBalloonやめればいいんじゃない?
434 :
432 :2007/06/03(日) 20:29:49
>>433 ありがとうございます。
その通りでした。
良く考えれば、まさにその通りですね・・・orz
そのコードだとForm1_MouseDownの度にイベントが堆積してくけど?
今VC#を触り始めたわけなんですが、 初心者向けのサイトをいくつか列挙していただけないでしょうか
あっれれれ? 昔テンプレなかったっけ?
前スレにはあった
441 :
432 :2007/06/03(日) 22:15:38
>>435 あ、いえ。
もともとToolTipを継承したクラスでオーナードローを試していて、
ソースを小さくしていったらこうなっただけなので、
その辺は多分大丈夫だと思います。
元のコードはデザイナで追加されたInitializeComponent()でやっています。
ListBoxのItemsの中身をシリアライズしたいんですが、どこかにサンプル無いでしょうか?
443 :
442 :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());
}
446 :
デフォルトの名無しさん :2007/06/04(月) 21:52:42
C#ていうか.NET系では参照渡しは多用するの?
日本語でおk
しないしない .NET Frameworkのライブラリ見てたらわかるでしょ
449 :
デフォルトの名無しさん :2007/06/04(月) 22:15:55
>>446 構造体(含む数値型、論理値型)や列挙体は値型、
それ以外のクラス型(?)は全部参照型なので、クラスインスタンスを
やり取りするときは参照渡し。
値型はref, out キーワードで参照渡しが可能。
(不正確な言い方だったらすまんです)
値型/参照型と値渡し/参照渡しは無関係。 値型/参照型に限らずref/outをつければ参照渡しになるし、そうでなければ値渡し
参照型オブジェクトへの参照を引数に渡すのは参照渡しじゃないぞ 参照型もrefやoutで渡せるし、ちゃんと意味がある 被った…
void hogehoge(ref hoge class) { class = null; }
結局
>>446 は「参照型の値渡し」と「refやoutによる参照渡し」の
どっちの意味で言ってたんだろ
前者なら常用されるし後者なら
>>448 なわけだが
refつけた参照型のパラメータとつけないパラメータの違いって何? 教えてくれよん
__makerefって面白いね
なにそれ?
C#の隠しキーワード int hoge = 0; TypedReference tref = __makeref(hoge); __refvalue(tref, int) = 5; Console.WriteLine(__refvalue(tref, int)); 出力結果:5 unsafeつけなくてもおk
実際にtypedrefを使う場面なんかないだろ。
460 :
458 :2007/06/05(火) 01:21:19
間違えたこれじゃ意味無いな Console.WriteLine(hoge);ね どっちみち意味無いけど
こんなのどこで見つけるの? ほかにどんなのがあるの?
コレってrefつけなくても参照になるってこと? どんなとき使うんだろ
エディタでも青色になるね<__makeref, __refvalue Reflectorで見てもそのままだった
誰かunsafeなしで値型のサイズを知る方法知らないかい? この辺の隠し機能とかでないかのう?
何に使うかによってあったりなかったりする。
動的にアセンブリを作って、sizeof相当のILを実行する。
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); } アホらし
Marshal.SizeOfじゃあかんのん?
marshal後のサイズでいいならそれを使えばいいわけだが、 unsafeって言ってるってことはsizeof演算子で求まる値が欲しいんだろう。
言葉足らずだった。 >unsafeって言ってるってことはsizeof演算子で求まる値が欲しいんだろう。 そういうこと。 何で知りたいかっていうと、アトミックに値を置き換えられないサイズの値型の場合のみ ボクシングなり参照型でラップなりして保持する、というようなことがしたかった。 ジェネリックとマルチスレッドからみでいろいろとね… ※でも実は特定サイズ以下の値型のコピーが内部的にアトミックな実装になってる「保証」はない気がする。
>>467 みたいなコードの方がunsafeよりよっぽどunsafeな気がする
sizeofは普通はunsafeでしか使わんもんだけど、 それ自体はunsafeなもんじゃないんだからunsafeでなくても使えたらいいのに。 まあ混乱を招きそうだけど。
え?普通に使えなかったっけ?
sizeofって使い道あんまりない。
> C# バージョン 2.0 以降、定義済みの型に sizeof を適用する場合に、unsafe (C# リファレンス) モードを使用する必要はありません。 ……いつの間に。
あ、でも T where T : struct には無理だな。> 非 unsafe で sizeof
>定義済みの型 やっぱり使い道ないな…
もともと分かってんだから必須じゃないもん(定義済みの型の場合)
Emitも/unsafe必須にすればいいのに
スレッドセーフなジェネリックコレクション実装時に、 アトミックに値を置き換えたい場合があるんだよね。 この場合、参照型もしくはアトミックに置き換え可能なサイズの値型の場合は 単に値をセットすれば言いだけだが、 そうではない値型の場合だけ特別扱いせにゃならん。
>Emitも/unsafe必須にすればいいのに なんでだよw
while(i++) が型変換エラー吐くのだが、なんとかできないのこれ
Marshal.SizeOf()
>>483 それは先人の知恵って奴だ。
エラー無視しちゃ駄目。
下手なテクニカルより、ランダムで売り買いしたほうが、 バックテストのパフォーマンスが良かったりするから、使えなくはないんじゃないの?
なんでRECTからRectangleへ仕様が変更になったの? 一発で、回転とか座標変換できないよ。
なんでってここで聞かれてもなあ
>>488 何でかわからないのは、おまいのRectangleの使い方がRECTだから。
RECTってWin32の? こんなんただのcの構造体じゃねえか。 一発で回転とか座標変換とか何を言ってるんだアホかw
バカはバカみたいな回答しかしない手本です。
RECTは2点のデータ持ってるけど、Rectangleは1点のデータしかないからでしょ。 というかそんなことも理解できない奴がアホつっこみすんなよ。恥ずかしい。
意味的に今のが妥当だと思うが、 拡大縮小、90度単位の回転のときは、2点座標のほうがちょっとだけ楽かな。
496 :
デフォルトの名無しさん :2007/06/06(水) 21:11:37
TextBox1とTextBox2の内容を比較するには、どのようにすればいいでしょうか?
if (TextBox1.Text is TextBox2.Text){}
ウソ付くなw
499 :
496 :2007/06/06(水) 21:21:32
説明がわるかったかもしれません。 そのTextBox1と2の中身が<で比較できるようにしたいのです。
頭が悪いのか 日本語が下手なのか センスが悪いのか
えーと……<で比較したいのは文字の長さ……?
503 :
496 :2007/06/06(水) 21:29:07
すいません、日本語&説明下手で・・・ Buttonを押したらTextBox1とTextBox2に入力された年号(2007/12/12) を比較するプログラムを組みたいのですが・・・・
>>503 単純な比較じゃ意味なし。
一旦、日付の型に直すべし。
よく考えよう。
文字の比較だけなら2007/6/6と2007/06/06は同じなのか?
違うだろ?
>>496 でそこまでわかったらリアル超能力者だぞw
DateTime.Parse
DateTime.TryParse(this.textBox1.Text, out date1)
>>506 それ知らなかった。
いつの間にc++のようなメソッドができたんだ。
便宜上許されるけどそのときは必ず 例外投げるバージョンも用意しないといけないことになってる
>>493-495 何を訳のわからないこと言ってるんだアホか本当。
>>494 その「混乱」(そんなもので混乱するプログラマってPGとして資質を欠くと思うんだが)
はRectangleでも何も変わらないじゃないかw
Rectangleに仮にRECTにない利点があるとすれば、
それは平行移動が簡単ってことだけだろう。
つーか回転ってなんのこと言ってるんだw
RectangleにしろRECTにしろ、座標系に対して「斜めでない」(二次元の直交座標の
何れか座標軸に平行な辺を持つ)長方形を表現するものでしょうが。
おいおい
そりゃ507だろ
>その「混乱」(そんなもので混乱するプログラマってPGとして資質を欠くと思うんだが) >はRectangleでも何も変わらないじゃないかw アホだろお前
混乱するか? 座標の回転に関係あるか?
>>515 君の意見を聞きたい。
矩形を表すデータ構造RECTのRECT.right、RECT.bottomの点は、矩形に含まれるの? で、そう思う根拠は?
線を表すデータ、始点のPoint構造体、終点のPoint構造体があるとして、終点はその線に含まれるの? で、そう思う根拠は?
これを明確に回答できるなら、混乱してないだろうな。回答できないなら、かなりのバカ。
根拠ってw プログラミングは数学でも自然科学でもない、どちらかといえば人文的なものだ。 要するに定義の問題に過ぎないだろうに。 ウダウダ言ってないでドキュメント読む。無ければ自分で確認する。 それだけのことだろうに。
ありがとう。
519 :
デフォルトの名無しさん :2007/06/07(木) 00:38:30
C#のListViewでExcelの分割みたいな事はできないのでしょうか? カラム幅でぴこぴこスプリッタが動く様な。 既製のコントロールとかでもいいので、教えてください。
さっきからアホアホゆーてる
>>517 ==509は
>>491 なの?
だとしたら
>一発で回転とか座標変換とか何を言ってるんだアホかw
というのはつまり
>Rectangleに仮にRECTにない利点があるとすれば、
>それは平行移動が簡単ってことだけだろう。
という発言がアホだと言いたいんだよね?
またやってるのかよ
>>517 ひとつの仕様に対して自分の意見のないバカがPGの資質とか語るなよ。
つづきは電話でやれ
ハロー、ダーリン
>>496 戻ってきてもいいが、いちから全部聞くのはなしね。
526 :
デフォルトの名無しさん :2007/06/08(金) 05:01:35
質問です。 現在、下記のようなソリューション構成で趣味の開発をしています。 ソリューションhoge(2プロジェクト) ┣ プロジェクトhage(Windowsアプリケーション) ┃┗ 参照設定 ┃ ┗ hige ┗ プロジェクトhige(クラスライブラリ) 【環境】 VisualC#2005 Express , WindowsXP HOME
527 :
526 :2007/06/08(金) 05:02:18
・・・書き込み途中orz 書き直します
528 :
526 :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
プロジェクトのプロパティ
ドトネトのアプリってdllを参照するパスって指定できるんだっけ?
もし出来ないとしたら、ユーザーの環境に配置するときも
>>528 みたいに
dllをサブフォルダに突っ込むと参照できないと思うんだけど。
サブディレクトリなら構成ファイルで指定すればいい
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) こんな感じじゃいけないの?
ctype
(藤井隆)松山ケンイチ キャストできそうだ。
Visual C# 2005 Expres Editionでフォームを作って遊んでいるのですが、 HTMLでいう<h>タグのような横線を入れるにはどのコントロールを使えばいいのでしょうか?
h じゃなくて hr じゃないのかと
横線を入れるコントロールは無いよ。 ラベルか何かを細長くしてそれっぽく見せたら?
540 :
536 :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 さん、本当にありがとうございました! 助かりました。
C# 2003を使っています。 Process実行時の環境変数はどうやれば設定できるのでしょうか? Processを実行する場合、ProcessStartInfo.EnvironmentVariablesで 現在の環境変数は取得できるみたいですが、そのProcessに対して 環境変数を設定するメソッドがみつかりません。 2005では、Environment.SetEnvironmentVariableというのが追加されていますが、 2003にはこれに代わるものはないのでしょうか?
追加されたってことはそれまでなかったってことだからな Win32API 呼び出すしかないんじゃない?
543 :
541 :2007/06/09(土) 17:32:03
やっぱりそうなんでしょうか? もう少し調べてみます(;´Д`)
ProcessStartInfo.EnvironmentVariables.Add()
545 :
デフォルトの名無しさん :2007/06/10(日) 15:18:56
XmlSerializerで循環参照もったオブジェクトのシリアライズするのって どんな感じですればいいんでしょうか? 普通にやると例外出てしまいます。
546 :
536 :2007/06/10(日) 15:43:08
547 :
546 :2007/06/10(日) 15:44:11
すみません、名前はミスです。
ForeColorにalphaつきのColorあげればいいんじゃない?
549 :
546 :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);
ControlPaint.DrawStringDisabled
>>546 まずその俺様定義の「透過テキスト」って言葉の意味を
はっきりさせるのが先決じゃないの?
その画像みても100人中100人がそれを「透過テキスト」とは呼ばないことは
俺が保証するよ。
552 :
546 :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をベースにした画面の表示ってどういった方法で作成するのでしょうか? 参考書を見てもいわゆるフォームでの実装(ボタンを押下したらどういったイベントが走るとか) しか乗っていませんので教えてください
ASP.NETのこと?
555 :
デフォルトの名無しさん :2007/06/10(日) 21:29:05
分かってんなら ASP.NET の参考書読めよ
ファイル→新規作成→Webサイト→ASP.NET Webサイト、場所:ファイルシステム、言語:C# というかぐぐれ
VS2005のウィンドウの右側に「ソリューションエクスプローラ」と「プロパティ」を 自動的に隠さない(ピンが下向き)設定で上下に並べているのですが、 プロパティの方を縦に広くしておいても、再起動後には小さめになってしまいます。 このあたりの設定を固定しておくことはできないのでしょうか?
ASP.NETってどう発音してる? うちの上司はアスプテンネットって言ってるんだが、同じように言っていいものか悩む
ei-ess-pee dot net
えいえすぴーどっとねっと
あすぷどっとねっと
あーえすぱーだっとねーと
564 :
デフォルトの名無しさん :2007/06/11(月) 19:54:54
ListBoxで選択されたアイテムをDataGridに表示させたいのですが、どのようにしたらいいでしょうか? foreach(object item listBox1.SelecteItem) { listBox2.item } のような形でやろうとしたのですが、上手くいかず・・・ご教授お願いしますm(__)m
日本語で頼む
566 :
デフォルトの名無しさん :2007/06/11(月) 20:08:58
ListBoxにある項目を選択した状態で、Botton1を押すと、選択した項目をDataGridに 表示させたいのです。
すみません、教えてください。 listviewのカラムにプログレスバーを置くのってできますか? 難しいんでしょうかね?
できます。 あなたには難しいかもしれません。
>>567 オーナードローとかになるんじゃね?
そういやオーナードローよりもライトな○○ドローってなかったっけ?
DirectDraw
>>564 DataGridのデータソースのアイテム.Clear();
foreach (object item in this.listBox1.SelectedItems)
{
DataGridのデータソースのアイテム.Add(item);
}
これ以上は日本語で頼む
572 :
567 :2007/06/11(月) 20:44:26
わかりました!頑張って調べてみます! ありがとうございました
>>567 普通のプログレスバー貼り付けて位置だけ調節すればよくね?
>>573 そうしたいんですけど・・・
スクロールしなければならない程アイテムがおおいんです・・
ありがとうございます
1200ほどの座標配列をGraphics.DrawLineで折れ線グラフにしています。 しかしStopwatchで計ったところ700msはかかってしまいます。 Graphics.DrawLines以外の高速な線の描画方法をご存知ないでしょうか? よろしくお願いします。
WPFでも試してみれば
>>575 もしFormのPaintで毎回DrawLinesしてるなら、
描画自体は速くはならないがいったんBitmapオブジェクトに描画して
保存しておけば再表示は速くなる。
578 :
575 :2007/06/11(月) 21:28:59
>>576 正式リリース時に試すつもりです。
>>577 環境詳しく書かず、すいません。
PictureBoxに描画
折れ線は4本
座標変換&描画で700ms
裏画面としてBitmapを保持しています。
また紛らわしいかもしれませんが
DrawLinesではかなり早いです。
DrawLineを使用して700msという状況です。
※欠線なども考慮しているためDrawLinesでは都合が悪いのです。
>※欠線なども考慮しているためDrawLinesでは都合が悪いのです。 ちょっとよく意味が分かりませんが。。
>>578 > 正式リリース時に試すつもりです。
.NET Framework 3.0 はもう Windows Update からでもインストールできるが。
VS 2007 の正式リリースってことかな? やっぱ多くの人にとって、IDE まで出て初めて正式リリースなのかな。
昔々Cで書いたプログラムをC#に移植しているのですが、 sprintfの書式指定の部分をどうすれば良いか解らなくて 困っております。 unsigned long sum = 0; char str[64]; /* 省略 */ /* この部分をどう置き換えるか解りません */ /* どうやればいいのでしょうか? */ sprintf(str,"%lx",sum);
>>583 まあ、それくらいなら sum.ToString() でできるけど、
もっと凝ったことしたい場合は
string.Format か System.Text.StringBuilder 使う。
string str = sum.ToString();
ありゃ x だったんだね。
string str = sum.ToString( "X" );
何そのミッフィーの口みたいの
('x') (*x*) ( ゜x ゜) ( ; x ; ) (@x@)
聞く前に 使 っ て み ろ
.dllファイルのパブリックプロパティの型と名前を参照したい んですけどできません;; リフレクションをキーワードにいろいろ探ってみたのですが、 なかなかこれだって思うものがなくて。 どなたかお力を貸してください><
パブリックプロパティの型とか意味が分からん
いや、それはそれで。 dll とパブリックプロパティの関係が不明だけど。
>< これは女以外禁止 男が使うものではない。
dllとどういう関係があるかわからんが? PropertyInfo メンバ
596 :
デフォルトの名無しさん :2007/06/12(火) 00:07:12 BE:610452364-PLT(12500)
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でアクセスを試みたのですがこちらもできませんでした。 何かご教授ください。
まず C か C++ で動くか確認するのが先決な気がする
フンドル ってなに? そのまえにDirectoryInfoとかDriveInfoでアクセスしない理由(あるとは思うけど) はなに?
flush
>>599 知らない or VS2003使い だろうな。
602 :
575 :2007/06/12(火) 09:00:18
>>580 データがない場合は線を引かない、ということを表現するため
与えられた座標にすべて線を引いてしまうDrawLinesでは都合が悪いということです。
>>581 ,582
そうです、IDEフェチなのでVS2007待ちです。
2007は出ない 2008なら出る
2007年中に2008が出るな
605 :
デフォルトの名無しさん :2007/06/12(火) 10:01:11
そんな細かい所どうでもいいだろうに・・・ 恐らく観測の結果か何かなのだろうけど せめて欠損していない部分までのデータ単位でDrawLinesやってみるのはどう? 有有有無無有有無有有有 なら 3,2,2 のポイントで線を引くような そもそも欠損時はラインを引かない・ データのある部分1点が欠損に囲まれれば点だけの描画になる というイメージだけど
2007もうでてるじゃん。うちには、申込書きてたよ
すまん誤爆
>>602 1200本のライン程度で時間かかってるな。幅のあるラインやアンチエイリアスしてるのかな?
ところでDrawLineを使ってどのくらい遅くなってる?
>>602 全部互いにまったく繋がりのないバラバラの線分ってわけかな?
つながってる部分があればその部分だけでもDrawLinesで....ってそのぐらい人に言われなくてもやるよね。
>>608 どのぐらいってちゃんと書いてあるじゃん。
昨日正100角形の対角線を引くコード書いて実測してみたけど
>>575 の話は大げさじゃないと思う。
あと、一応ベタにDrawLineで線引っ張る方法と一旦GraphicsPathに必要な線分を 追加してから描画する方法を試したが、普通に前者の方が速かった。
じゃあもうDirectXで
>>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;
613 :
575 :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);
614 :
575 :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);
こっちで計ると時間差は1.5-1.8倍程度だな。7倍の差というのは何だろう?
616 :
575 :2007/06/12(火) 14:31:11
>> 615 1200の座標配列が4本なので、その差ではないでしょうか?
700msくらいいいんじゃないの。エクセルより速いべ…たぶん
>>616 LinesとLineに同じ仕事をさせてるかどうか疑問になってきた。
違ってたら比較にはならないと思うのだが。
ラインの本数が同じなのは当然として、線の長さも処理時間にかかわってくる。
619 :
575 :2007/06/12(火) 16:40:14
>>617 (゚д゚)
>>618 現在ダミーデータとして画面いっぱいにギザギザになるデータをぶちこんでます。
/|/|/|/| ← イメージ
なので線の長さは最大値だと思います。
DrawLineの代替手段があればと思ったのですが、あとはWinApiを叩くしかなさそうですね。
>>619 GDI+というかDIBは基本的にソフトウェア描画だけど、
メソッド呼び出し1回のDrawLinesのスループットが許容範囲内なら、
同じことを自前でCPU処理させても多分同程度の速度はでる。
Bitmapをロックしてポインタで自前描画とかね。
このスレで一日粘るぐらいの時間があれば十分作れるんじゃない?
有名なBresenham Line Algorithmとか。
GDIのAPI叩いてDDBに描画するようにすれば
環境によっては速くなるかもしれないけど
VistaのWDDM以降はDDBのハードウェアアクセラレーションが
効かなくなるので注意ね。
>>594 (>く)
これ流行らそうとおもってるんだが。。
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 はやるわけありません!(> く;)
く ↑ これが乳首に見える
さっきからうざいよ。
みんながおもしろいとでも思っているんのだろうか。 感性が小学生みたいだ。
>>575 Linesの集合に変換して、Linesで描画でいいんじゃね?
フォントのアウトライン表示ではそういう方法取る。
>>628 グラフィック関係触ったことないのバレバレの恥ずかしいこと言ってるよ君w
連続しない線分はDrawLinesじゃ書けないんだよ
631 :
デフォルトの名無しさん :2007/06/13(水) 13:18:28
DataGridの中身を初期化したいんだけど、どうすればいいかな。
なんでお前は前からDataGridにこだわっているんだ?
DataGridバカは質問しっぱなしで毎回消えるからなぁ
質問です。 MDIで子ウィンドウを親ウィンドウの外に出してやるには どうすればよいでしょうか?
639 :
637 :2007/06/13(水) 19:35:51
ごめんなさい。 本気で分かりません(;つД`)
640 :
637 :2007/06/13(水) 19:43:27
お騒がせしました。 自己解決しました
MDI子にしないで普通の子ウィンドウにする
横槍だが、
>>638 はスレ違いだろ。
優しくレスできないなら、そもそもレスしないかまたはお死になさい。
っ[鏡]
質問です。 Format8bppIndexedなBitmapのColorPaletteをforでブン回して設定し 直したのですが、どうしても設定するときにColorのRとBが入れ替わっていまい、 ColorPaletteをセットしたときに色が反転してしまいます。 これはなぜなのでしょうか?
よくわからん現象だな。 なんかほかに条件は? ある画像だけとかある画像形式だけとか。 GDI 通してるとか。
>>645 ピクセルフォーマットをチェック。
AARRGGBBとかXXBBGGRRとか色々ある。
GDI+とかDirectXは前者(が主流)。
GDIのCOLORREFは後者。
>>646 ,647
新しくBitmapを作って、それにFormat8bppIndexedを指定しているので
GDIは通してないと思います。
また、Colorにはアルファを設定していません。
んー? そりゃ変だな。 再現コード書いてみてくれる?
Color.FromArgb の引数勘違いとかないよな?
テストコードうpしろ。 ポインタとかでやってないよな?
>>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 他の部分も見直した所そのような所はないと思います。
>>648 GDIは通してなくても
BMPファイルのフォーマットって
インデックスカラーはCOLORREF型で格納すること、
って仕様だからなぁ。
その辺の影響調べてみたら?
なんかわかったかも。。。
655 :
652 :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
どう考えてもその colors が問題じゃね? どっから出てきたんか知らんけど
Accessのfix関数と同じ物がfloor関数だと思うのですが Accessのint関数と同じ関数はないのでしょうか? -2.5は-3に、-2.4は-2の結果が欲しいのですがどうしていいか分かりません・・・
658 :
デフォルトの名無しさん :2007/06/15(金) 11:47:34
math.round とかどう?
0から遠いほうに丸める、か。なるほどねー
660 :
デフォルトの名無しさん :2007/06/15(金) 12:55:11
0.5でやってみろ
>>661 MidpointRounding.AwayFromZero で
-2.5 → -3
-2.4 → -2
0.5 → 1
だったけど
やってんならいいよ
0.5足して切捨てしてたんですけど もしかして0.5足してroundすればいいの? ちょっと、やってみます
ナニイッテンダー
666 :
デフォルトの名無しさん :2007/06/15(金) 16:41:22
早まるなwwwwww
Roundの引数にMidpointRounding.AwayFromZeroで 四捨五入になるんですね! ありがとうございました!
2.0から四捨五入が可能になってたんだな知らなかった。 でもアクセスの丸めは四捨五入じゃなくて「銀行の丸め」ってやつだと思うけど。
銀行丸めはMidpointRounding.ToEven
というか、普通にintにキャストすればアクセス(というかVBA?)の関数の動作とたぶん同じなんじゃないかと思う
それVB
672 :
デフォルトの名無しさん :2007/06/15(金) 20:25:06
すいません。 C#を使って、サイトの更新情報(ヘッダーやサイトの更新日、サイズ)などを調べたいのですが Googleなどで調べる際に目安となりそうなキーワードやサイトってないですかね? 関連性のありそうな言葉がまったく思いつかないんですわ。 orz
WebRequest
674 :
672 :2007/06/15(金) 22:27:55
サンクス
クラスどうこうより先に HTTP のお勉強の方が先かも知れぬ
>>672 意外とjavaのスパイダークッキングレシピとかいう本が参考になる。
C#を使ってDirectShowプログラミングをしたいのですが、何かいい方法ありますか? 動画を扱うプログラムとか出来ればいいなぁと思ってます ちょっとググったらManaged DirectShowなるものは無いらしいんですけども、解決方法があれば教えて欲しいです しかし、DirectShow自体使ったこと無いんですが、DirectShowの本てほんと無いですね
>>677 いい方法なし。地道にテストコード書いていくべし。
ググって見つかるサイト程度しか情報がない。
サンプルコード程度ならなんとかなるが
本格的にやるのは大変
>>678 やっぱりそうですか
少し自力でやってみます
(挫折しそうだ・・・
誰か海外の人が DirectShow.NET だかなんだか公開してくれてなかったっけ?
681 :
デフォルトの名無しさん :2007/06/15(金) 23:02:35
DirectShowNET
Visual C# 2005 Express Editionを使用しています。 プレーンテキストファイル中の文字列の、所々を色を変えて表示したいと思い、 richTextBoxにファイルの中身をロードして色を変えたい部分をrichTextBox1.SelectionStartと richTextBox1.SelectionLengthで選択し、richTextBox1.SelectionColorで色を設定したところ、 私の意図したとおり、色が変わって表示されました。それは良いのですが、SelectionStartと SelectionLengthで文字列が選択されると、カーソルがその選択場所に移動します。 私にはそのカーソル移動表示処理が結構時間を要しているように思えます。 色を変えて表示したい部分はたくさんあり、カーソル移動も頻繁に発生するので、 ちょっと我慢しにくいです。文字列の所々を色を変えて表示させるのに、もっと高速な 方法はないものでしょうか?
>>681 DirectShowNETでググったらわかりやすいC#のDirectShowプログラミングのサンプルが紹介されているページにたどり着きました
ありがとう
今更C#2.0入門なんか書いてんのかいなw
686 :
デフォルトの名無しさん :2007/06/16(土) 01:08:47
.netってcomがウンコんだよな com使う場合はc++にすべきか なんか今後良くなる方向にないかな・・・
>>684 制御構造を記述できるようになる。
例えば、擬似的にIF文を作れるというとわかる?
>>684 メソッドに渡すメソッドをその場で書けて、そのメソッドから、hogeの位置の変数が見えてるとか。
string hoge = "・・・";
List<String> names = new List<String>();
names.ForEach(delegate(String name)
{
Console.WriteLine(name + hoge);
});
>>691 >>684 のリンク先に2.0って書いてあるから、匿名クラスって匿名メソッドのことかと思ったんだけど。
たぶんそう思う。 で、使いではあるし便利ではあるが、 使いまくるとほかの人が読めなくなるから ほどほどにしてる。 ※なんでもかんでも匿名メソッドにしてしまおうなんて思わない。 まあいつもの煽り記事だろ。
>>684 よくみてみたら川俣か。
読者がJavaScriptはOOPじゃないと、勘違いしそうなあやしい文章。
あいかわらずだな。
川俣ってあんな糞記事書いて飯食ってるの? 生意気だな
同じような内容でも「2.0の機能を活用しよう」くらいにしとけばいいのに、 なんで「C# 2.0らしいプログラミングとは」とか、見識が問われるような書き方するんだろう。 まあ本人は釣り師のつもりなんだろうけど。
>>682 それはもう自分でそういうコントロールを作るしかないよ。
TextBoxやRichTextBoxの拡張じゃ無理。
WebBrowser
700 :
デフォルトの名無しさん :2007/06/16(土) 08:52:50
現在VC# .NET 2003でタブコントロールを試しているのですが、わからないことが出てきました。 テキストエディタなどのように、タブごとにファイル名などの変数を管理したいと思っています。 タブを追加するときに、変数の数を増やし、タブを閉じるときにその変数を破棄するには どうすればよいでしょうか?
Listでも使えば?
Tagプロパティに入れとけば?
>>686 httpと、formの仕組みを覚えてブラウザがpostしたときと同じデータを送ればよし
704 :
686 :2007/06/16(土) 13:01:42
>>703 ご回答ありがとうございます。
因みに何か参考になるサイトはありますでしょうか?
んー、私はCGIで、formデータを受け取るほうからやったから リクエストする側をやるときには、内容わかってたからなあ・・・ C#だと、、、System.Net.WebRequest とかで検索してみては
706 :
686 :2007/06/16(土) 14:37:04
>>705 ぐぐって調べてみます。
ありがとうございます。
707 :
デフォルトの名無しさん :2007/06/16(土) 17:18:14
.NET2003でWebBrowserコントロールは使えますか?
いいえ。
AxWebBrowser が代わり。
710 :
707 :2007/06/16(土) 17:35:12
711 :
デフォルトの名無しさん :2007/06/16(土) 19:18:50
WinFormからThreadを生成して、ThreadからWinFormに文字列をWinForm.Invokeを呼んで渡しています。 WinFormを閉じる時にTharedの終了を待ちたいので WinFormからTharedへの終了の通知をManualResetEvent利用して行い Threadの終了時にSetされるManualResetEventをWinForm側で待つということをしたのですが WinFormが固まったままになってしまいます。 どのように実装したら固まらないようにして終了できるしょうか。
(お待ちくださいダイアログを出しつつ) タイマ使ってタイムアウト0でWaitOne
スレッドをフォラグラウンドにするだけじゃ何かまずいの?
>>711 なんでManualResetEvent使うの?
使い方がおかしいんじゃないかな
>イベントが発生したことを、1 つ以上の待機中のスレッドに通知します
別におかしくない そういうコーディングしてあるなら...
まあどういうコードかわからんから何にも言えんわな
どうせInvokeとWaitでデッドロックだろ。 BeginInvokeにしたらどうなる?
WinFormからTharedへの終了の通知した時はWinForm.Invokeしない または Invokeやめる または スレッド終了をタイマーで定期チェック または 自身をTerminate
バックグランドスレッドにして自動強制終了とかTerminateで強制終了 して良心が痛まない奴は職業プログラマの資格無し。素人なら許す。
ところで、あなたにはそんな事言う資格はあるの?
そんなこと聞いてどうするんだ?
興味があったから聞いただけだよ 言う資格もないのに「資格なし」なんて言ってるとしたら、 かなり痛い奴だなーと思ってさ
許すとか許さないとかいう以前に719は解決策を知らないだろwww
むしろプログラム終了時にスレッドが強制終了されて問題がある場合なんて ほとんどないと思うけどね俺は。
んなアホな。
いやそれは・・・
解決策は
>>719 の1か3でよいんじゃない?
>>718 は確かにできそうですが、
スレッド待機完了した後でコールバックされるのが気持ち悪い。
>>726 は主義者という言い方がアレだけど、その通りだと思う。
プロセス終了しても残る類のリソース解放ができなくなるので。
ごめんなさい。引用間違えました。
(誤)解決策は
>>719 の1か3でよいんじゃない?
>>718 は確かにできそうですが、
(正)解決策は
>>718 の1か3でよいんじゃない?
>>717 は確かにできそうですが、
プロセス終了しても残るリソースって具体的にどんなの? アンマネージドでもあんまりない気がするんだけど。 テキトーな会社が作ったデバドラ関連のdllとか?
というか、だから最初からスレッドフォアグラウンドにするのじゃどうしてダメなんだ?
フォアグランウンドっていうのは、サブスレッドの終了をまたずに そのままアプリ終了するっていうことだよね? それで自動的にサブスレッドが 安全に完了するまでプロセス終了が遅れると。 コールバックしたときにフォームが破棄されている可能性があるから。
テキトーな会社が作ったDLLで問題が起きるのは昔何度か経験しました。 ビデオボード制御のアプリです。 あと他のプロセスと通信するプログラム全般に言えることですが、 後始末をしないと可用性が落ちる場合があります。 例えばWebブラウザのようにアプリが落ちることが検出できないシステムでは タイムアウトを設けたりしますが、後始末をきちんとしていればタイムアウト 待ちになる可能性が減ります。 他には、中間ファイルを作成して終了時に消すようなものだと、プロセスの 異常終了を考慮してミドルウェア等で監視してクリーンアップしたりしますが、 監視が異常に気づくまで多少のサービス停止が発生したりします。やはり 自分のしたことは責任を持って「気持ちよく」きれいにしてから終了したいなぁと。
終了フラグ作っといて ループで監視じゃダメなの?
いや、ループ監視中にサブスレッドが終了時にControl.Involeで
コールバックするとデッドロックするというのがもとの問題。
それでInvokeをBeginInvokeにすると回避できるというのが
>>717 。
でも終了後にコールバックされるのが嫌だというのが
>>728 の主張。
終了フラグが立った時はコールバックしないようにするというのが
>>718 の案。
そもそもフォアグランウンドスレッドならメインは終了を待たずとも良いというのが
>>713 。
それについてやはり問題が発生するというのが
>>732 。
ということで、元の
>>711 の意見を聞きたい。
すいません。教えて下さい。 HashtableをIDictionaryで受けているコードを目にするのですが、 何故、Hashtableでそのまま受けないのでしょう? IDictionary hoge = new Hashtable(); Hashtable hoge = new Hashtable(); ⇒こうしないのは何故でしょう?
>>736 Hashtable以外のIDictionaryの実装を使うよう変更したくなったときに
変更するのが一箇所ですむから。
>>735 ?
Invokeでデッドロックしているのはほぼ間違いないけど、それが
もとの書き込みから断定はできないのでは? サブスレッドはEventで
親に通知しているのだから。
固まらない実装を訊く前に、なぜ固まるのかの情報が不足していると思います。
>>736 オブジェクトの振る舞いについての情報を、必要最低限のインターフェース
に絞り込みたいから。実装に関する余分な情報を晒したくないから。
そうすることでHashtableで問題が発生したときに、IDictionaryを実装する
自作のクラスに置き換えることができるから。
>>737 >>738 早速のお答えありがとうござます。
特に新たなインターフェースの実装が想定にない場合は、
余り意味がないのでしょうか?
必要最小限のインターフェースに絞り込むというのはよく
分かる表現なのですが、そうすることでメモリの節約にも
なるのでしょうか?そうだとすると拡張の予定がなくとも
この記述のメリットがあると思いましたので。
予定は未定
>>738 >固まらない実装を訊く前に、なぜ固まるのかの情報が不足していると思います。
この理由は予想がつきます。
フォームを持つメインスレッドがイベントを待って止まってしまったら、
Control.Invokeを処理するメッセージポンプまで止まってしまうからです。
当然これもメインスレッドですから。
>>739 頭のメモリが節約できて ( ´ー`)b グッド
>>739 メモリの節約にはなりませんが、
機能的・性能的な問題でなく意味的な違いがあります。
こういうのでいきなりメモリの節約とか言い出すのはなぜ? どういう発想なんだろう?
言ってみたい年頃なんじゃねーの?
まあふらっとなんだし。 インスタンスメソッドから明示的にデリゲートを作成するより匿名デリゲートで書いたほうが軽そうに見えるのに似てるかも。
747 :
デフォルトの名無しさん :2007/06/18(月) 09:12:55
今のPCでメモリ節約する時は最後の最後だろ 昔とは違うんだよ・・・・ もちろん無駄な書き方をする必要はないけどね
748 :
デフォルトの名無しさん :2007/06/18(月) 09:20:27
いまはPCは最適化、速度向上よりメモリ節約 なぜならマルチタスク環境であるから、頻繁にメモリからデータが出ていくと鈍くなるから
749 :
デフォルトの名無しさん :2007/06/18(月) 09:21:26
昔のPCは、単一スレッドでしか動かなかったから のっているメモリの上限までは自由に使って良かった
スレッドごとにとられるメモリはせいぜいスタックと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読みに頻繁にハードディスクを読みに行く だから鈍い ハードディスクのアクセスが無くなれば速い
なんでメモリ節約の話になるんだw
アホがメモリ効率考えてゴチャゴチャやるとコンパイラさんが困惑するってさ
Net使わずってのはスタンドアロンって意味かい?
757 :
デフォルトの名無しさん :2007/06/18(月) 10:53:40
FrameWorkつかわずにネイティブってことじゃね?
次あたりリアルモード最速というのが現れる予感。
>>740 細かいこと気にせず、とっと書けばいいんですが、変なとこ
気になってしまって。。。
>>742 実は、このご指摘が一番的を得ています。。。
脳内メモリが節約できました。
>>743 ですね。参照型ですからメモリの節約は関係ないことが分かりました。
インターフェース指定で受けて位置づけを明示する意味があるということで
理解しました。(したつもり)
>>744 制御ソフト出身でちょっと趣味でC#始めました。
ROMにせこせこ書く様なことやっていたので、細かいこと考えるみたいです。
>>745 年頃といっても、もうオヤジです。
>>746 感覚的にはそうかもしれません。何か理由が欲しかったんです。
『まあふらっとなんだし』と言っていただけるとここへ来てよかったです。
>>747 そうですよね。私のPCもずいぶん老いぼれマシンですがメモリはそれなりに積んでます。
むしろ、エコロジーみたいな感覚で無駄ができない性分なんでしょうか。
でも、ずぼら面も多々ありそれほどマメな人間でもないのですが。。。
>>748 >>749 >>750 >>751 >>752 >>753 性能向上の議論に展開されてなんか嬉しいです。
そういったセンスはこうした会話から生まれるのでは。
私のせこさも無駄ではなかったでしょうか。
>>754 >>755 なんでそんな受け方しなければならないのか気になってしまって。。。
なんかしようってのではなくて、理由が欲しかったんです。
なんとか自分なりに納得する為に頂いたコメントも合わせて
ちょっと調べてみてみました。
Hashtableは以下のインターフェース実装している様です。
IDictionary
ICollection
IEnumerable
ISerializable
IDeserializationCallback
ICloneable
>>736 の様に定義することで、これから使うのはDictionaryを使うよって
明示している意味が一番大きいって理解しました。
もちろん、自前でインターフェース実装して・・・という意味もあるでしょう
が、趣味のおじさんには余り縁がなくて。。。
そんな訳で、お蔭様で納得できる様になりました。
皆さん、ありがとうございました。
また、寄らせて頂きたいと思います。
よろしくお願いします。
>>757 ええ、そうだろうと思ったんですけどピリオドが抜けてるんで
話の腰を折ってみました。すまん。
ArrayListなんかと比べてHashtableはインターフェイスに載ってない 実装固有の便利機能が少ないから、どうせならインターフェイスを通しとこう っていうくらいのもんだと思うよ
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
767 :
デフォルトの名無しさん :2007/06/18(月) 13:59:08
見積もり出してもらうくらいなら市販のやつかえよ
768 :
デフォルトの名無しさん :2007/06/18(月) 14:07:41
769 :
デフォルトの名無しさん :2007/06/18(月) 14:25:18
200en
pdfでおk
773 :
デフォルトの名無しさん :2007/06/18(月) 17:09:49
質問です。 ListBox、ComboBoxにDataSet、DisplayMemberを設定してあげると 見た目の項目は普通に表示されるのですが MessageBox.Show(ListBox.SelectedText)などで表示させると System.Data.DataRowViewと表示されてしまいます。 MessageBoxなどで取得したときに上記のようにならないようにするには どうすればいいでしょうか?
SelectedValue
775 :
デフォルトの名無しさん :2007/06/18(月) 17:27:37
SelectedValueをどのように使えばいいでしょうか・・・・ 初心者ですみません。
776 :
デフォルトの名無しさん :2007/06/18(月) 17:57:13
それくらいMSDNみてみろや せめて判らないまでもキーワード貰ってヘルプで調べないで聞くとかありえんだろ 回答してくれた奴に失礼じゃないか?
初心者に高圧的な態度で教えるのは失礼じゃないな
778 :
デフォルトの名無しさん :2007/06/18(月) 19:42:10
すみません、ろくに調べもせずに・・・・MSDNを見たのですがイマイチ 良く分からなかったのでもうちょっと調べてみます。
780 :
デフォルトの名無しさん :2007/06/18(月) 20:04:15
>>778 そのわからない部分
例えばこの言い回しが判らない
とかだと穏便に済むと・・・・
SelectedTextが分かってSelectedValueの使い方が分からないってどういうことだよ
>SelectedTextが分かって どう見ても分かってなさそうですが。。
仕事でC#使うことになったプログラマ&C#初心者です。 APIのSendMessagecallbackを使って他のスレッドにデータを送信するのですが、 事前に調べて作ってあった使い方マニュアルみたいなものが理解できなくて困ってます。 「とりあえず」とか、「と思われる」とか、「おそらく」とかばっかり… とりあえずMSDNとか見て宣言の仕方はわかったのですが、 そのマニュアルみたいなものにはなぜか構造体を作って、 その中に送信したいデータを入れて、 構造体変数をSendMessagecallbackの引数にして送信していました。 また受信側にも同様におなじ構造体を宣言してその構造体変数に受信したデータを入れて、 そこから別の変数に入れたりして使っています。 作成者に質問してみたらそれはstringを送信するために使うんだそうですが、 他の型はどうなのかは説明がありませんでした。 C#でSendMessagecallbackを使用する場合、構造体は必ずセットにして使うものなのでしょうか? それとC#用のAPI講座か書籍を探しています。このマニュアルみたいなものに頼っていたらいつまで経っても コーディングに移れないので。
ほかのプロセスじゃなくてほかのスレッドに、わざわざ SendMessageCallback ……? 自プロセスだけなら Win32API 使う必要皆無なんだが……。
とりあえずメッセージは何よ。 WM_COPYDATAでCOPYDATASTRUCTか?
あSendMessageCallbackか
>>785 それです。
COPYDATASTRUCTって構造体にまたコメントがなんだかよくわからない文が書いてあって、
IntPtrとかの変数が3つあって
メッセージとメッセージ長+1とかを入れてました。
自宅のPCなんで現物見ながらじゃないので正確ではないんですが。
私が担当するのはbyte型の構造体を別スレッドに送信する部分です。
SendMessageCallbackを使ってるのはマルチスレッドの関係上らしいです。
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 の「相互運用マーシャリング」以下の項目を熟読。
>>787 俺ならC++/CLIでラッパを書くよ。C++だったらサンプルかなんかあるんだろ?
職場に問題があるのか 本人に問題があるのか それとも両方か >C#でSendMessagecallbackを使用する場合、構造体は必ずセットにして使うものなのでしょうか? WM_COPYDATAがその構造体を要求してるだけでそ…… つーかSendMessageCallbackでWM_COPYDATA使えないでしょ?
あほいな…
>それとも両方か に1カノッサ
おいみんな、初心者ってことを理解してあげろよw プログラム経験そのものや C/C++ の経験にもよるけど
善意に解釈するとネイティブのDLLがあって、 その中でメッセージループつきのスレッドを生成している。 そいつと通信するのにその手順を踏む必要があるといったとこかな?
>>788 ありがとうございます。
ただSendMessageCallbackを使用することは既に決まっていて、
他の方が作っている部分と足並みをそろえたいらしく私だけ独自に使うわけにはいかないんです。
提案してもおそらくもう他の部分で使っちゃってるし、と返ってくるでしょうし。
ちなみに前任者というか、今回新規の案件かつ、
職場内でC#が使える人がいないため全員素人状態からやっている状態で、
上に述べたマニュアルみたいなもの、も私と同期の新入社員が作ったものなのでもうなにがなんだか。
>>789 私自身はCしかいじってこなかった人間なため、職場についてからいきなりC#をやってる状態でC++に関してはまったくの無知です。
CのAPI講座はいくつかあったのでそちらでも勉強中です。
>>790 職場にもマニュアル書いた人も私にも問題がありすぎなんだと思います。
>WM_COPYDATAがその構造体を要求してるだけでそ……
>つーかSendMessageCallbackでWM_COPYDATA使えないでしょ?
まずこのこと自体が理解していないくらいですから。
とにかく頑張って今週中には一つ仕上げます。
うちでは許可無くP/Invokeは使うなってことにしてる。
で?
馬鹿や子供に刃物は持たすなってことだろ
>>798 じゃあプログラムさせちゃ駄目だろ・・・
刃物は馬鹿や子供のためにあるんだぜ?
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で良いんでしょうか?
ま た お ま え か
const int A = 0; const int B = 1; const bool C = false; void Hoge(){ int x = C ? A : B; } こういうコードを書いたら、C ? A : BのAについて 「到達できないコードが検出されました」っていうコンパイラの警告が出た ダメなの?これ
Cがconstだからだろうけど気にしなきゃいいんじゃね?
int x = false ? A : B; ってコンパイルされるから?
そう。
808 :
802 :2007/06/19(火) 21:06:15
上のほうにかかれてた人とは別なんですが・・・・。ちょっと荒れてたみたい ですね。
つかまず試せ。
810 :
802 :2007/06/19(火) 21:53:30
いろいろ試したのですが・・・・ オブジェクト参照がオブジェクト インスタンスに設定されていません。 と出てしまいます。
いろいろね。 じゃあもっといろいろ。
原因分かってんじゃん
>>810 いろいろためせ
あと、どうして、どこで、ダメだったか書かないの?
【エスパー】超初心者の質問に答えるスレ487【マジレス】 よりコピペ。当てはまる内容はないか考えてみよう。 12 名前:名無しさん[sage] 投稿日:2007/06/17(日) 20:26:13 0 【質問をする皆さんへ。】 回答する人たちはあなたのパソコンに前にいるわけではありません。 画像や、なるべく分かりやすく書いてください。 「起動しないんですけどどうしたらいいんでしょう」や「〜が使えないんですけどどうしたらいいですか?」 といった曖昧な質問では、回答者もどう回答したらいいか分かりません。 箇条がきにするなどの工夫をすると回答は早くもらえるようです。 それに最低限必要なのはパソコンの機種とノートタイプかそうでないのか、自分でどこまでやったか 特に青画面や黒い画面で起動できないときはそのエラーメッセージを面倒でも書き込んでください あなたにとって意味不明でもそこには貴重な情報が表示されています
というか、読み手の視点に立って文章推敲する程度の知能もないんじゃ 初心者以前にプログラマなんて無理だ。 まあ国語の時間で文学鑑賞しか教えない日本の教育の問題もあるんだけどさそりゃ。
じゃあお前が答えてあげれば良いじゃない
じゃあ、っていう接続詞の使い方間違ってるよお馬鹿さん
>>815 >国語の時間で文学鑑賞しか教えない日本の教育
もしかして40歳以上ですか
早く答えてやれよ
>>819 お前が
>>802 ?
内容を詳しく書け。
それともいちいち、DataGrid1はありますかとか
DataTable1はありますかと聞かれたいのか?
プログラムが思ったように動きません。どうすれば動くようになりますか?
>>821 DataGrid1はありますか?
DataTable1はありますか?
もうそこまでにしとけよ。 そこまでやったら、 くだらない質問が来ないじゃないか。
ふらっとなんだから質問者も回答者も適当でいいよ 気に入らないなら答えなきゃいいだけなんだし
そうそう。ときに優しく。ときに煽り煽られ。 いいじゃないかふらっとだもの
826 :
デフォルトの名無しさん :2007/06/20(水) 11:54:44
数字を1000ごとにカンマで区切りたいのですがどうすればいいですか?
>>826 string.Format("{0:n0}",hoge);
828 :
826 :2007/06/20(水) 14:08:42
>>827 できました。ありがとう。
string.Formatだからhogeはstringじゃないと駄目かと思って嵌ったよ。
intでいいんだね。
MSDN見る癖つけようね
830 :
デフォルトの名無しさん :2007/06/20(水) 14:17:37
むしろインテリセンスで型が出てるじゃないかと・・・MSDN以前に画面を(ry
目が悪いんだと思うよ
SDK者だからIntelliSenseにはもう用はねぇ! アハハハハ VisualStudioも必要ねぇやぁハハハ
えっと、、、、それでC#を?
834 :
デフォルトの名無しさん :2007/06/21(木) 11:06:10
多分#DevelopかEclipseでやってんだYO・・・・ つうか、テキストエディタでやってる勇者いないのか?w
なんでそんな面倒なことを
>>834 ちょっとしたものならテキストエディタで書くよ。
俺、スクリプト感覚で C# 使うときも多いから。
>>835 プロジェクト作らない、ソース単体の編集ってインテリセンス効かない場合があるから。
VS 立ち上げるのが面倒になるときが。
自分もテキストエディタでちまちまとC#勉強中。 コンソールアプリはC#で、GUIアプリはVB2005EEで作っている。 C#はVB.NETと比べて専門用語の数と独自機能(例えばイテレータ)が飛躍的に増えるのでまだGUIアプリを作れる程C#の事を理解していない。 以前VC#2005EEを入れた事があるんだけど正直ヘルプが不親切過ぎて(どう考えてもCかC++を使える人向け)全く理解不能だった。 VB.NETをそこそこ使えるようになった今なら理解出来るかも知れないけど、当分はコンソールアプリで我慢する。
飛躍的って程は増えないと思うけどw あとunsafeと匿名メソッドぐらいしか差分はないでしょ
839 :
デフォルトの名無しさん :2007/06/21(木) 13:19:14
C#に移行したしたいんだけどなぁ・・・ あのVirtual とかあのへんとVB.NETとの対応表みたいなのってあればラクに移行できそうなんだけど・・・・
841 :
デフォルトの名無しさん :2007/06/21(木) 16:27:14
>>840 情報サンクス 助かる
いや、それがあるだけでも移行ははかどりそう
なんせ仕事しながらだから効率よく行きたいし
まぁVB→C#変換して見比べろ とか言われたら微妙だけどなぁ・・・(;´∀`)
俺はC#からVBに変わりそう せめてVB.NETなら良かったのに……
843 :
デフォルトの名無しさん :2007/06/21(木) 17:37:15
>>842 業務だから仕方ないだろうが・・・・
出来るものはそう変わらないけど 作る時にすげぇ手間取るしすげぇ時間かかるぜ
>>842 なにその絵に描いたような地獄
.netのインテリセンスとか
便利なクラスになれてからVBAとか戻ると
スゲー不便なんだよなほんとに
VBA...
C#の1文字目インテリセンスは神
マウスホイールも効かないんだっけ?
そのページをコピペしても動かないんじゃないかな? 他を探せ
その前に勉強しろ
Form2クラスにForm1 frm1というフィールドつくれ まあ最初はちゃんと勉強したほうがいいよ
そもそも Form1 自体を渡す必要はどこにもない ってのは位置づけとして脱初心者の一歩だろうか?
だからってコントロールを直接渡すなよ
nilぽ
>>834 秀丸で1万行くらいのを書いてる俺が来ましたよ。
IDEは嫌いだ。
.NET FrameworkやC#ってIDEのために作られたものだよ
道路のために自動車は作られたった奴初めて見たよ
もちつもたれつ
ゲームのためunixは作られた。 unixの移植のためにCは作られた 嘘です。
.NETは運転者よりも自動車メーカーのために作られたわけで
.NETはマイクロソフトのために作られたんだよ。
IDEのないC#はただのJava
863 :
848 :2007/06/21(木) 20:34:13
>>894-853 本質的に理解できていませんが、取り急ぎ解決できました。
ありがとうございます。
自分に礼を言ってるよ。
>>842 逆に「そうか、こう書けばよかったのか」とか再発見がまれにあったりする。
Win32API をラップするときとか、つい .NET の相当するクラスやメソッドを真似てみたりw
.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を返しています。 なぜこんなことが起こるのか、調べてもさっぱり分かりません。 解決策をご存知の方、教えてください。
ソケットの作り方をミスってると思われ。
868 :
866 :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を返すという状態です。
スタックトレースはどんなもん? 念のために聞くけどそれで「ハンドルされていない例外が」が出て実行が止まるんだよな?
870 :
866 :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
nilpo
えええ、ConnetSocket って 866 の人の自作メソッド? それがスタックトレースの一番上?
873 :
866 :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周りは必ず例外処理しないとだめな処理だったりするのでしょうか…?
わざわざ StackFrame とか見に行かなくても Exception.StackTrace で十分だよ。 て言うかそうじゃないと意味がないのでそっち見てくれ。
バグだろ 関係ないけどMSDNのSocket.Disconnect メソッド で >PlatformNotSupportedException > このメソッドは、Windows 2000 以前でのみサポートされます。 >それ以外の場合は、例外がスローされます。 ってなってるけど意味が分からん。
876 :
866 :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 何が悪いのか、さっぱりわかりません。 バグだとしたら、どのように対応したら良いのでしょうか…
OpenFileDialogで、画像のプレビューを表示しながら画像ファイルを選択することは可能でしょうか? DelphiでいうOpenPictureDialogが欲しいです。
表示を縮小版に切り替えればいいだろ
881 :
デフォルトの名無しさん :2007/06/23(土) 10:11:38
きっとWin98だから縮小版表示がないんだろ
意地悪してやんなよ
884 :
866 :2007/06/23(土) 11:49:23
>>878 経験がほとんどないので、良し悪しが分からりません。
もし、良くないところがありましたら教えていただけませんか?
885 :
879 :2007/06/23(土) 11:59:31
>>880 すいません、あくまでもプレビューは補助的なものとして使いたいので、
縮小版だと不便なんです。
>>883 ありがとうございます!まさにこれです。
Project[A]の中にあるForm[a]に[bを開く]ボタンを配置 Project[B]の中にあるForm[b]に[aを開く]ボタンを配置して それぞれのボタンを押すと対応するフォーム([〜を開く]ボタンは無し)が開くようにしたいのですが、 Projectの参照を追加しようとすると 「それ自身を参照として持つことになります」といわれてしまい実行できません。 なにかいい手段はありませんか?
Forma と Formb は「フォームを開く要求が出てるぜ」イベントを公開して、 ProjectA と ProjectB を両方参照する ProjectC が Forma と Formb を管理するクラス持てば
>>887 ありがとうございます。
仕様的に新しいProjectは作っちゃダメなんですが、
何とか共通関数が入ったProjectにねじ込んでみます。
> 「フォームを開く要求が出てるぜ」イベントを公開して
ってのが分かりませんが、がんばってみます。
そもそも886みたいな関係ならプロジェクト分ける弊害はあっても有難みは 一つもない気がするんですが。。 だってプロジェクトBって他で使いまわせるわけじゃないじゃんw
>>889 それは仕様書作った人に・・・
関係ないけどなんかほかにも「out」や「ref」は使っちゃダメとか
いろいろ制約が多くて困ってます。
> 「out」や「ref」は使っちゃ これはなくても別に困らんだろ ところで共通関数が入ったプロジェクトは参照されるんであって参照するのではないと思うのだが
>>888 887の言うように第三者のCを介在させる必然性は本当は必ずしもない。
要はBが起こしたイベントに反応してAがアクション(フォームの表示?)を
起こすようにすれば、BはAの存在を知る必要はないということ。
俺はoutが使えないとTryParseが使えないから嫌だー
いや意味わからないけど。。
自分で新しくメソッドを定義するときだけじゃなくて Int32.TryParse(string, out int)なんかの使用も禁止なの?
メソッド内で使用するにはおkなんでね?
じゃあポインタで
複数の値を返す場合はどうするの? Javaみたいに「その関数に渡すためだけのクラス」を定義するの? 禁止する意味がよくわからん。
Java信者なんじゃね class Ref<T>{public T Value;} あてつけ
GetValues(delegate(int a, int b) { x = a; y = b; } );
>>898 >複数の値を返す場合はどうするの?
refから話がずれちまうが、
そういう場面で役立つ構文がC# 3.0で増えてるな。
ttp://ja.wikipedia.org/wiki/C_Sharp >オブジェクトの初期化が簡潔に記述できるようになった。
>コレクションの初期化が簡潔に記述できるようになった。
>一時的に使用される型を簡単に定義するための匿名型が導入された。
>new キーワードを用いた配列の宣言の際、型を省略できるようになった。
よさげ。
Lightweight Language臭がするようになった気もするが。
LLっぽく見えるがLLじゃない 厳密に型が付いている
varなんてただの飾りです 型名のタイプをサボれるだけ
>>901 別に複数の値を返す時に役立つ機能ではないと思うが。
さすがに匿名型を返すことはできないのでは?
自動プロパティ良いな
さすがに戻り値の型推論まではないわな
画像のピクセルデータのような結構メモリを食うデータを、配列で持とうと思ってます。 で、そのデータがいらなくなったら、さっさとメモリを解放したいんですが、 こういうときはGC.Collect()を呼ぶくらいしか方法はないでしょうか? 配列だけ解放なんてことは無理ですか?
ないし無理 いっそアンマネージドなメモリで持つ手もあるがね
909 :
907 :2007/06/24(日) 00:06:06
そうですか… じゃあC++/CLIあたりでがんばります。 ありがとうございました。
そもそも自分で開放する必要ってある? 参照がなければ、他でメモリが必要になった時に開放されるんだし。
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なら一番初めによばれてって感じだと思いますが・・・
>>911 1、うん
2、C# にはモジュールがある。あと Jar はクラスじゃない。
3、Java と似たようなもん
4、アプリケーション開始時(エントリポイント)
クラスとメソッドをちゃんと区別すること。
Page_Load、Button_Click1、Button_Click2 の各メソッドがいつ呼ばれるかは判らない。
イベントハンドラに設定されてたらそっちの期待通りに動くけど、設定されてなかったら……
>>911 1. yes
2. dllまたはexe
3. sender->イベントの元になったオブジェクト e->イベントの情報
4. Javaと同じ。プログラムの開始時。
914 :
907 :2007/06/24(日) 03:13:00
>>910 でかい配列をもつオブジェクトを、短いスパンで何度か生成・削除を繰り返したいときに、
一時的にメモリ使用量がごりごり上がっていったらやだなと思ったんです。
明示的に開放できれば、そんなに増えないかな〜と。
.NETつかうならそんなことは気にしないほうがいいでしょうか?
>>914 困ってから困れ。
とりあえず、先ずは作ってしまえ。
916 :
907 :2007/06/24(日) 03:20:14
じゃあとりあえずは配列でいってみます。
増えそうになったらGC動くから問題ないだろ
>>917 そうでもない。
壁紙クラス(5MB位)のデカい奴を短期間で読み込むとあっと言う間にメモリ使用量100MBオーバー。
やむなく配列に読み込み処理の頭でGC.Collect()してる位だし。
たとえ100MBを超えてもメモリに余裕があればGCは動かないだろ
>一時的にメモリ使用量がごりごり上がっていったらやだな なんで?
メモリがば空きの環境ならどんどんメモリ食って当然
>>918 一昔前ならともかく、いまどき100MBってそんなに多くないだろ。
923 :
907 :2007/06/24(日) 12:53:26
>>920 このアプリひとりでメモリ使いまっくてんじゃねーよとか思われそうだな〜と。
空いてるからといって必要以上に使いまくるのは気が進まなかったのです
常に100MB近くメモリを食うソフトなんて願い下げだな
925 :
デフォルトの名無しさん :2007/06/24(日) 13:21:02
実際、 おまえの作ったソフトラインタイムとか入れないといけないからめんどくせー とか なんでメモリーこんな消費するゴミソフトつくってんの? とか言われる メモリあいてるからって無駄に消費してもらうと 作者が無能に思われることがあるから 嫌と言えば嫌だ。 そういう勘違い野郎にいちいちGCの説明するのもかったるいし
そこまでして入れる価値のないソフトなんだね
自動配線ツールをCで書こうと思ってるんですけど。 アルゴリズムはmazeをベースで。 書くときに参考になるソースコードとかってどっかに落ちてるものなんでしょうか? アルゴリズム分かっても、書くのが素人なので、どれ位の規模(行数)になるかとか、必要な関数が予想つきません。 例などがあれば要と思って質問させていただきました。 誘導していただければ幸いです。
すれ違い
ここで聞くな
でもここは何でも質問してよいところですよね?
>>1 >このスレッドは
>「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
C#関係ない質問するバカは死ね
CとC#は違うんですか?
違う
ファイル送信中にprogressbarをつかってその進渉率を表したいのですが、 ファイル送信中の情報量を受け取れるメソッドとかがあるのでしょうか?
すいませんでした。 誘導も無いようなので失礼します。
さすが日曜って所か
>>935 前にも同じことを聞いてたよな
頭使えよ。
自動配線ツールは有名ツールの機能制限版じゃだめなのかな? それとも配線違いか? いやすれ違い。
ここは酷い釣り堀ですね
942 :
デフォルトの名無しさん :2007/06/25(月) 00:58:48
現在、WindowsFormアプリを作成しているのですが、その作成した WindowsFormアプリが常にアクティブ(手前)に表示されるといった状態 にしたいのですがどうすれば良いでしょうか? 例えば、ネットをする際にはIE・FireFox・Lunascape等を使う かと思いますが、それらが起動していたとしても常に手前に WindowsFormアプリを表示をしたいです。 (サイズ的にはブラウザの1/5位のサイズです。) ※常に手前に表示はされているけれでも、ブラウザ上の項目 (ID / PASSWORD 項目等)に対して入力をしたい場合には、 その箇所を選択(クリック)した上で入力が出来る状態にしたいです。 宜しくお願い致します。
TopMost
944 :
デフォルトの名無しさん :2007/06/25(月) 13:36:02
Enter押したら、タブと同じように次のフォーカスに移動させたいのですが どうすればいいでしょう?
946 :
デフォルトの名無しさん :2007/06/25(月) 18:35:46
DataReader使うなDataAdapter使え
C#使いは偉そうなやつが多いね。 デスマってるやつが多いのかなw
プチ北方謙三って奴だねw
質問する暇あったらソープ百回行ってこい
こっちのほうが馬鹿が少ないのか? 謙虚なのか?
住人一緒だから違いはない
あのボウヤはこっちへ来ないみたいだな。
Jpegにカラープロファイルを埋め込む方法を教えてください。お願いします。
まともなフォトレタッチソフト買え。
956 :
デフォルトの名無しさん :2007/06/25(月) 23:17:10
958 :
デフォルトの名無しさん :2007/06/26(火) 14:19:57
Java Web Start みたいな事はできないのでしょうか?
できるよ
>>959 名称だけでも教えていただけないでしょうか?
ClickOnce?使ったことないからわからんけども。
二点間A(x1,y1) B(x2,y2)を通る直線上で picture Box(A→Bまで)を移動させたいんだけどどうやるの? 座標がランダムに変化しても自動的に出力させたいのですが お願いします。
Timerでも使ってLocationを設定すれば? アルゴリズムに関してはそのくらい自分で考えろ
>>962 <BeginStoryboard>
<Storyboard>
<PointAnimation>
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まで行かないようなのです。
コードを書く前にやりたいことを日本語で書いてみるといい
968 :
デフォルトの名無しさん :2007/06/27(水) 14:02:20
説明が下手ですいません。コンボボックス1と2で日付を指定したいのですが 4/31など、ありえない月の時はエラーメッセージを表示させようとしたいのですが・・・。
あなたの条件式の意味: 「 4と31が等しいなら」 あなたが書くべき条件式: 「 月が4で、かつ日付が31のとき」
970 :
966 :2007/06/27(水) 14:19:33
自分の条件式じゃなぜ駄目なのでしょう? また、書くべき条件式はどのような形で書いたら良いでしょうか?
>>969 みたいに日本語にするといいよ。
今回やりたいのは、
comboBox2の選択内容が変わったら、
comboBox1の値によって変わる上限よりcomboBox2の値が大きかったらエラーを出力。
だろう。
まあ上限は配列にしておいて({31,29,31,30,31,30,31,31,30,31,30,31} とか)
確認するとか、DateTime につっこんで正しい日付かチェックするとかすればいいかと
あなたが書くべきよりよい条件式: ( 2月 かつ ( ( 閏年 かつ 日付が29より大 ) または ( 非閏年 かつ 日付が28より大 ) ) または ( 日付が30より大 かつ ( 4月 または 6月 または 9月 または 11月 ) )
973 :
966 :2007/06/27(水) 14:30:00
はう・・・・そんな沢山の条件式を一度にやったりとか、どうすればいんでしょう・・・?
月ごとの末日を配列にでも入れとけ。 あとは閏年かどうかで 2 月の場合に 1 日調整するだけ。
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" ); }
まあ今回は年が無いからうるう年は考慮無しでもいいじゃん int[] monthDay = { 0, 31, 29, 31,30,31,30,31,31,30,31,30,31 }; if (monthDay[m] < d) switch case をこれにしてもいいな。
閏年考慮なしでいいとか本気? 捨てコードならともかく・・・。
コンボボックスで日付選択した状態での範囲エラーだぜ
年を入力するところが無いのにどうやってチェックするのかと
ああ、そういうことか・・・。 年の情報はどこにもないのね。
日付設定してから月を変更することもあるだろうし、 それをキーボードでやったときのことを考えると 月設定時にエラーは出しにくいし 最終チェックはどうせ必要なんだから、この場合の範囲チェックの時点で 「うるう年を考慮しないなんて本気?」とか言うほうがおかしいでしょ
100年分ぐらいの年月日・曜日データぐらいデフォで登録しとけや
DateTimePickerでいいじゃん……
984 :
966 :2007/06/27(水) 15:12:12
みなさん、ありがとうございます、助かりました! C#初めてまだ1ヶ月で分からないことだらけでしたけど、また一つ覚えることが出来ました。
昔沸いた変な馬鹿とは大違いだな
昔?つい最近な気がw
それよか && とか || を覚えた方がいいぞ
>>984
「&」と「&&」、「|」と「||」はどう使い分けたらいいの?
使い分けなくていいよ
全然違うものだから、使い分けるも何も、 お互いにお互いの代わりとして使えない。
どっちも同じように使える。 ただし&や|の方は後ろのステートメントも常に評価するようになる。
>>990 もしかして&や|はビット演算にしか使えないと思ってた?
すまん憶測で書いてたw 今試したら&&と同じように前のステートメントが偽だと後ろが評価されないね。
C#ではboolとintは完全に別物だから、 intに対する | & とboolに対する | & は動作が違う。 intに || && は使えない。
と思ったらMSDNに >& 演算子は、1 番目の演算子の値に関係なく、両方の演算子を評価します って書いてあった。 しかもさっき書いた検証コードもちゃんとそう動いてた。 testとtrue見間違えただけかよw しっかりしろ俺www
ええとつまり if(A || B) は まずAを評価して OKでなければBを評価 if(A | B) はAがOKでもBを評価ってことか? つか後者はどういうときに使うのか想像できない漏れがいる
|はビット演算子
999 :
デフォルトの名無しさん :2007/06/27(水) 19:56:22
ture演算子 false演算子あげ
1000 :
デフォルトの名無しさん :2007/06/27(水) 19:59:27
ヽ(`Д´)ノ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。