ふらっとC#, C♯, C#(初心者用) Part15
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
前スレ: ふらっとC♯, C#(初心者用) Part14
http://pc11.2ch.net/test/read.cgi/tech/1172662746/
TabControlのページにWebBrowserを表示させています。 よくあるタブブラウザです。 タブを選択したとき、WebBrowserがマウスウィールで動くようにしたいん ですが、どうしたらいいでしょうか? SelectedイベントでWebBrowserにFocus()してもうまくいきません。 お願いします。
.NET Framework 1.0/1.1のListViewコントロールでは MFCのCListCtrl::SetItemCountのように、リストにあらかじめ アイテム数を設定しておくようなメソッドは無いのですか?
>>7 それでどうなるのか知らんが、空文字列の ListViewItem でも突っ込んどけばいいんじゃね
>>8 本格的にやるなら仮想リストを使うべきだが
そうしなくても
大量にアイテムを挿入するときに速くなる。
意味がわからない。 普通に考えて早くなる理由がないと思うんだが。。 SetItemCountでググってみてもそのように書いてあるところが見つかるし。
大量に挿入したい時は AddRange か BeginUpdate 使っとけ。
10件まとめて設定するのは遅いけど 1000件まとめて設定するのは速いんだよ いやまじで
ThreadStateがSuspentedのスレッドをAbortメソッドで終了させようとすると例外が発生します 中断中のスレッドを終了させる場合、どんな手段が適切でしょうか
なんでサスペンドなんかさせてるわけ?
適切な方法はAbortなんか使わずに強調的におだやかに終了すること。 ただまあ、場合によっては強制終了させざるをえないこともあるので、 そういう場合は仕方なくAbort。 それ以外のサスペンドとか、そんなものはそもそも使わない。
強調的>協調的
while(true) { this._CntA++; this.textBox1.AppendText(this._CntA + "回目のThreadA" + "の出力です。\n"); Thread.Sleep(600); } こんな感じのメソッドを回していました あと、トグルスイッチ風ボタンでスレッドを止めたり動かしたりしたかったのでサスペンドを使いました
タイマの方が適してる用途のような気が。。
あああ、もしかしてすごい勘違いをしていたかもしれない メインスレッド(フォーム?)からスレッドAとスレッドBを起動したとして、 スレッドA,Bが動作中にユーザがフォームを閉じたとしても、 Closingイベントにスレッド終了コードのようなものは書かなくてもいいのかな?
スレッドがバックグラウンドならね。 っていうか、そんなことも知らずにスレッド使ってるのか。 キチガイに刃(
スレッド自体は最終的に自動終了されるが、
そもそも閉じたら動いちゃいけない処理とかもあるでしょ、大抵は。
※そりゃほんとに大丈夫ってこともないこたないが、普通は適切な条件で終了するようにする。
ていうかよ
>>17 なんて突っ込んだらいいのか…
あと、スレッドの操作はなるべく 同期用「オブジェクトなどを使って自立的に行うべき。 どうしようもない場合は仕方ないが。
24 :
6 :2007/04/15(日) 02:33:52
すいません。 どなたかお願いします。 いまだにできません。
>>24 なんかできる時とできない時あるな…
ちなみに Selected イベントじゃなく SelectIndexChanged な。
それ以前に、言っちゃ悪いけど
>>6 の日本語には問題あるだろ。
マウスウィールは良いとしても、「WebBrowserが〜動く」っていうのは
どういう状態のことを差してるんだよw
基本的に、人語すら正確に操れない奴が融通利かねえマシン相手の言語を
使えるわけがないと思う。
輪路他
29 :
デフォルトの名無しさん :2007/04/15(日) 16:48:42
ある関数を変数配列にいれて、関数を引数にする関数とかで使いたいんですがEventHandler()とか 関数の配列宣言って具体的にどうやるんでしょうか?教えてください。
delegate void Func(); Func[] func;
31 :
29 :2007/04/15(日) 16:55:26
ありがとうございます
32 :
速報+ :2007/04/15(日) 17:23:59
壁紙の変更の方法教えて下さい ググッたけど見つからなかったもので
>>33 俺がググったらすぐ見つかった。ググり直せ。
>>33 「C# 壁紙の変更」でググッたら見つかるが?
>>34 >>35 ググったけどよくわからん
C++のSystemParametersInfo(SPI_SETDESKWALLPAPERのC#版教えて
37 :
デフォルトの名無しさん :2007/04/15(日) 19:18:32
見つかったなら、ここに貼れよ。愚図。
39 :
デフォルトの名無しさん :2007/04/16(月) 01:53:37
質問です。 DataGridViewの全セルのサイズ(縦、横)を揃えたいのですが、 コード上でどのように設定すればよいのでしょうか? 碁盤目状のものを作りたいのですが、ご存知の方がおりましたら よろしくお願いします。
C#2005 ExpressEditionのフォームデザイナで、メニューを追加し、 メニューの項目を日本語で設定すると、関連するイベントハンドラの 名前などもコード上に日本語で生成されますね。 英語圏なら問題ないでしょうが、これはある意味バグですね。 しかし、メンバ名が日本語でもコンパイルできるんですね。驚いた
そこまでして人に構ってもらいたい自分が嫌にならないとしたらおめでたい奴だな。
42 :
デフォルトの名無しさん :2007/04/16(月) 13:16:43
MaskedTextBoxで全選択状態(反転表示)を実現しようと 模索しております。色々なサイトを検索してGot Focusイベント にてSelectAllを使用すれば実現出来る事は確認しました。 しかし、Got Focusイベントは低水準イベントで使用することを 推奨できない かつ FormがActiveになるとGot Focusイベント が発生する。この2つの理由でお手上げ状態です。 コントロールをMaskedTextBox -> TextBoxに変更して正規 表現で入力チェックを行えば済ことなのですが… MaskedTextBoxで全選択状態(反転表示)の実現方法は あるのでしょうか?
>>42 MaskedTextBoxだろうがTextBoxだろうがSelectAll()同じように効くはずだけど?
もしかしてボタンクリックでSelectAllしてない?
SelectAll() の前に Focus()すれば済む話しだったりして?
44 :
デフォルトの名無しさん :2007/04/16(月) 14:03:10
勘違いしてるみたいだけど、 MaskedTextBoxとTextBoxとでSelectAllの挙動に違いは見られない。 >FormがActiveになるとGot Focusイベント ってのは単にMaskedTextBoxがActiveControlなだけのはなしでしょ。 それがいやなら適切なタイミングで Form.ActiveControlを他のコントロールに設定すればいい。 private void maskedTextBox1_Enter( object sender, EventArgs e ) { this.maskedTextBox1.Focus(); this.maskedTextBox1.SelectAll(); } ってすればいいだけじゃね EnterじゃなくてGotFocusでもいい
46 :
デフォルトの名無しさん :2007/04/16(月) 14:49:20
47 :
デフォルトの名無しさん :2007/04/16(月) 20:12:58
どなたか教えてください
ProcessStartInfo startInfo = new ProcessStartInfo(IEXPLORE.exe);
startInfo.Arguments = "
http://localhost/WebApplication1/version.html ";
Process.Start(startInfo);
と言うように、Processを使ってIEを起動した場合、targetは指定できないのでしょうか?
何度も新規ウィンドウを表示したくないのですが・・・
48 :
デフォルトの名無しさん :2007/04/16(月) 20:19:06
もう一つ質問です。 C#のコードで、現在開いている特定のブラウザ(IE)を閉じる事はできますか? 連続質問で申し訳ありません・・・
>>47 出来ない
>>48 FindWindow で IE 捕まえて WM_CLOSE 投げる
51 :
47 :2007/04/16(月) 20:31:14
>>49 その記述だと、target指定できるのでしょうか?
>>50 ありがとうございます、FindWindow 関連を調べてみます。
targetって何だよ
たぶん<a target="hogehoge" 〜>のことかと思われ
54 :
47 :2007/04/16(月) 20:56:14
>>52 targetは
>>53 のことです。
>>50 申し訳ありません。
FindWindow や WM_CLOSE はC#で使用できるものでしょうか?
>>47 DDE使えばいいんじゃね?
なんかものすごい旧時代を感じさせられる名前だがw
57 :
デフォルトの名無しさん :2007/04/16(月) 21:05:02
数十K〜数MByte分のbyte配列をsbyte配列に変換、またはその逆にするのに、 byte[] data; //元のデータ sbyte[] sdata = new sbyte[data.Length]; //変換後のデータ for (int i = 0; i < data.Length; i++) { sdata[i] = (sbyte)data[i]; } といったように素直にキャストしていくのと、 [StructLayout(LayoutKind.Explicit)] public struct ChangeArray { [FieldOffset(0)] public byte[] Data; [FieldOffset(0)] public sbyte[] SData; } … byte[] data; //元のデータ sbyte[] sdata = new sbyte[data.Length]; //変換後のデータ ChangeArray ca = new ChangeArray(); ca.Data = data; sdata = ca.SData; という風に変換するのとでは、どちらが速いでしょうか?
前者は間違いなく遅い。 後者は動作が保証されない。 Buffer.BlockCopy しとけ。
やればすぐ結論がでることをやらずにわざわざ人に質問する君の神経は理解不能だな
>>59 >後者は動作が保証されない。
そうなんですか…
Buffer.BlockCopyっていうものの存在を知らなかったので
どうしようかずっと悩んでました。
ありがとうございました。
>>60 今コンパイラがないもので、試そうにも試せません(インスコしようにも制限がかかってる) orz
スレの流れと全く関係なくてすまんが、 プログラム板って他の板に比べて格段に優しい人が多いね。 正直ちょっと感動した。
黙れカス
いや、
>後者は動作が保証されない。
これって本当か?
この.NETの構造体を共用体的に使うテクニックって
割と一般的に用いられていると思うんだけど。
まあでも
>>58 の意図が不明なんでなんともいえないが、変換(?)後のデータを
破壊的に使っても変換前のデータまで壊れないようにしたいのなら
unsafe使ってコピーとか、そういう方法の方が良いのは確かだけど。
>>64 よく見れ。
値型を重ねるなら意味分かるが、
>>58 で重ねているのは値型の配列だ。
参照型には使っちゃいかんのよ。 しかしドキュメントにはろくすっぽ記述がないんだよな。 『Unions のサンプル』に「参照型の場合には明示的なレイアウトが許されないからです。」と書かれてるくらい。
ここは
>>59 の言うとおり、Buffer.BlockCopy()一択だろう。
69 :
デフォルトの名無しさん :2007/04/16(月) 23:16:56
>>69 TextChangedイベントハンドラ内でTextを変更しているから。
そうしなければその時点でTextChangedイベントが発生して無限ループ。
だがいいコードではないと思う
>>69 TextChanged イベントハンドラの中で Text プロパティの値を変更すると、そこでさらに
TextChanged イベントが発生してしまう。
さらにそのイベントハンドラのの中で Text プロパティの値を変更……と、延々とTextChanged イベントが
発生し続け、しまいにはStackOverflowExceptionでアプリケーションが落ちる。
試しに適当なフォームにTextBoxを配置して、TextChanged イベントハンドラの中で
textBox1.Text += "A";
とでもやってみ。
>>65-66 ああなるほど。
ではMarshalAs属性でUnmanagedType.ByValArrayを指定すればCと同じように
構造体の中に参照ではなく配列そのものが確保されるようになるのかな。
それともこの属性の意味は、あくまでアンマネージコードを呼び出す前後の
変換方法を指示しているだけになるのか?
unsafe指定すればcなんかと同じように構造体の中に配列を確保できる。 尤も固定長に限られるけど。
>>71 >>72 ありがとうございます。理解できました。
日本語とアルファベットを交互に入力して
文字数制限するいい方法が他に思いつきませんが、
このサイトの方法でとりあえず使ってみます。
>>73 マーシャリングにのみ関わってくる属性のような気がする。
>>73 >それともこの属性の意味は、あくまでアンマネージコードを呼び出す前後の
>変換方法を指示しているだけになるのか?
正解。
CLR管理下で特殊なメモリイメージを作りたいというのなら、
アンセーフだが一応こういう方法はある。あと固定長専用。
[StructLayout(LayoutKind.Explicit)]
public unsafe struct ChangeArray
{
[FieldOffset(0)]
public fixed byte Data[128];
[FieldOffset(0)]
public fixed sbyte SData[128];
}
ttp://msdn2.microsoft.com/ja-jp/library/zycewsya (VS.80).aspx
78 :
77 :2007/04/16(月) 23:51:06
でも fixed は配列 (System.Array 派生型) じゃなくてポインタなのよね
それは勿論だろ。Arrayは参照型だからそんなことろに組み込みようがない。
81 :
39 :2007/04/17(火) 00:26:24
質問の仕方が悪かったかな? C♯, C#相談室 で聞くべき?
83 :
デフォルトの名無しさん :2007/04/17(火) 01:56:48
プログラミング初心者なんですけど、プログラミングを始めるにあたって、どの言語で始めればよいか迷っています。 候補はC#・VB・JAVAです。 ゆくゆくはC言語とC++も学びたいと考えています。 ということはやっぱりC#から始めるのがいいのかなと思って、こちらに投稿してみました。 だけど本屋にはC#の本は少ないですね。 JAVAとVBは多いです。 だからC#がよさそうだとは感じながらも、ちょっと心配もしているのです。
C#おすすめですよ。 VisualC# Express EditionはMSから無料で落とせます。 C#を一通りやったら、ポインタの概念を勉強するためC++ or Cをかじりましょう。 書籍は、Amazonで探せば結構あります。
>>83 VBはMSも無理やり繋げてる状態
java・C#は似てるからどっちか覚えれば違和感無く書ける
つかrubyも選択肢に入れてあげて
Lispやろうぜ
??演算子使ってる? 地味に便利そうなんだけど, ついつい存在を忘れて a != null ? a : "nullですよ";ってやっちゃう
>>87 むしろ君が普通ではないと思う 俺は異端児?
フーン。便利なら使えばいいんじゃないの? そんなの a = a + 1; a += 1; a++; 程度の問題だべ。それよりちょっと聞いてくれよ。 俺は何かと何かが混ざったようなC#なんて特に触りたくもないんだが、 言語仕様を見たらtrueとfalseが演算子だって? こんな構文になるのか?フーン public class Hoge { public static bool operator true(Hoge t){ } ,..(もちろんfalseも定義) }; Hoge hoge = new Hoge(); ... if(true hoge) { ... }
ならんよ。true/false演算子はあたかもBoolean型への暗黙的変換のように振舞う。
横レスだけど,implicit operator boolとどう違うの? 試してみても,動作は同じに見えるんだけど
true/false演算子に同じ値を返すことで、4つまでの状態を表せる。 trueかつfalseってのは意味的に使い道がなさそうだが、 trueでなくfalseでもない値を導入すればtriboolのようなものになる。
>>90 済まないが、ちょっと分からない。
bool型への暗黙的型変換?
暗黙的型変換の例としては
double d = 10.5;
int i;
i = d;
(iは10になる)
明示的なら
a = (bool)false;
だが、これは禁止されている。
仕様書には
A unary true or false operator must take a single parameter of type T and must return type bool.
だから、クラスHogeに演算するときは
true Hoge 又は false Hoge
となって、戻り値はbool型になる(後置演算かもしれないが分からない)。これではちょっと混乱してしまう。
例示してほしいのだが、いかがか?
× a = (bool)false; ○ bool b = (bool)i;
>>93 true/false演算子が使えるのは条件が必要な場所、つまり、if(), do-while(), while(), for(;ここ;) や ?:演算子の第一オペランド。
operator trueが呼び出されて、bool型に暗黙的に変換されたかのように振舞う。
たとえば、型Tにtrue/false演算子が定義されていれば、
| T t;
| if(t) { }
| int a = t ? 0 : 1;
のようなことが出来るようになる。
尤もC#ではop_Falseを使えないから、これだけでtribool的なものは作れないんだけどね。
96 :
93 :2007/04/17(火) 18:23:42
>>95 ありがとうッス。これで疑問が晴れた。
例えば、C++だと!演算子をオーバーライドするんだが、
それじゃ気持ち悪かったのかな?>M$
!に否定以上の意味を持たせると混乱の元だし、true演算子の代用にはならんだろ。
C#ってそんな機能あるんだw 一見便利に見えて、実はタイピング量を減らすという僅かなメリットと引き換えに 混乱をもたらすだけの機能に思えるけどなあ。 VB6の「デフォルトのプロパティ」と同列の堕落じゃん。
>>97 いや、STLにのInputFileStreamクラス(だったかな?)があって、
InputFileStream ifs(...
...
if(!ifs) { // ←ファイルがオープンされてるかどうか
// エラー処理
}
というのは半ば常識なんで、STLerで知らない人はあまり居ないと思う。
確かに初心者には変な構文なので、独学だと混乱するかもね。
>>98 boolにように働く型を作るための機能だから問題ないと思うが。
というか、そもそもこれはCLIの機能であってC#は申し訳程度にサポートしてるだけのような気がする。
>CLIの機能 ほんまかよっ
102 :
デフォルトの名無しさん :2007/04/17(火) 20:53:37
あいうえお[改行] かきくけこ[EOF] 上記の文字列をバイナリファイルとして出力して、再度読み込み、 バイナリをテキストに置換して各行を配列に保持したいのですが、 どのようにすればよいでしょうか? 具体的なソースを教えてくださると嬉しいです。
>>102 >バイナリファイルとして出力して
どういうフォーマットのバイナリファイルなのか明確にしてくだされ。
というか、テキストファイルもバイナリファイルの一種ですぜ。
>あいうえお[改行] >かきくけこ[EOF] > >上記の文字列をバイナリファイルとして出力して、 この発想はなかったぜ…
105 :
102 :2007/04/17(火) 21:34:33
>>103 BinaryWriterクラスを使って文字列をファイルに書き出して、
そのファイルをそのまま読み込みます。
文字列の内容は日本語(2バイト)と英語(1バイト)が含まれており、
間に改行も含みます。
>>104 絶句させるような事を書いてしまいましたか…?
テキストファイルはバイナリファイル
stringが手に入ってるなら改行文字でスプリットしたら? 普通はStreamReaderでReadLineするんじゃね
108 :
102 :2007/04/17(火) 22:05:02
>>106 これ以上どう言っていいか分かりません。
>>107 下記のような感じで読み込むのでしょうか?
using namespace System.IO;
void readBinaryFile(string filename)
{
FileStream reader = new FileStream(filename, FileMode.Open, FileAccess.Read) ;
string tmp;
while(ストリームの終わりまで){
tmp = reader.ReadLine();
tmpを文字列に変換;
配列に格納;
}
reader.Close() ;
}
File.WriteAllLines() File.ReadAllLines() でいいよ。
> BinaryWriterクラスを使って文字列をファイルに書き出して、 この理由が分からん
質問ですがbitmapを下のように書いて拡大するように表示しようと思ったのだが 全体に0.5pixelズレたよに表示されてしまう、なんでなんだろ? e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; e.Graphics.DrawImage(bitmap,new Rectangle(0,0,128,128), new Rectangle(0,0,64,64),System.Drawing.GraphicsUnit.Pixel);
>>100 確かにこれは3値論理型を作るためだけの機能ですね。
false演算子のオーバーロードは今のC#からは使用されてないと思う。
C#3.0でunlessが追加になるらしいのでこれで使うことになるのだろうか。
他にVBのDo Untilで使ってそうな気がするが今度試してみる。
>>111 最近傍補間がそういう補間アルゴリズムだから。
まあ、双一次補間でも双三次補間でも同じようになるんだが。
>>113 さんくす、補間アルゴリズムが原因だったんですか。
他の補間モードを使ってもずれるし、
自前で拡大したビットマップを作って描画するとかしかないのかなぁ
>>109 全ての文字列を読み込む関数があったんですね。
ありがとうございます。
>>110 理由は宿題で決まっていたからとしか…。
>>114 補間がどうこうもあるけどたぶん大元の理由は、ラスタイメージが基本的に
1pixelの離散座標系なので、実数座標系ではその幅の半値分ずれること。
実数だと(0,0)は大きさを持たない点であるのに対しラスタは幅1の四角
だからね。1pxの線を描こうとか言うときによく問題になるんだけども。
細かく追っていくとサンプリングの座標とかターゲットの座標を追わないと
いけないんでやらんけど、たぶんその辺が原因じゃねーかな。
修正したいなら文字通りどこか0.5ずらしてやればいいだけだとオモ。
感覚的には…うーん、ターゲット座標?
質問です。 FormのBoundsプロパティで大きさを変更しようとしたんですが 幅が125ピクセルより小さく設定できないようです。 これより小さくするにはどうすればいいんでしょうか?
>>117 FormBorderStyleをSizable以外にする
119 :
117 :2007/04/18(水) 10:11:29
>>118 実際はFormBorderStyleがNoneであるようなウインドウをつくりたいんですが、
それでも同じでした。
>>119 FixedToolWindowかSizableToolWindowじゃないと
SystemInformation.MinimumWindowSizeより小さくできないらしい。
121 :
117 :2007/04/18(水) 11:28:13
>>120 あら、そうなんですか。
ツールチップ的な小さいウインドウをつくろうとしたんですが
無理ってことですか・・・
どうもありがとうございました。
122 :
デフォルトの名無しさん :2007/04/18(水) 12:37:13
D&Dに関してです。 Dropした先のコントロールなり外部アプリケーションから ソース側にDropしたことを知らせるために QueryContinueDrag イベント が発生して、引数 QueryContinueDragEventArgs に対して Action プロパティ に Drop が帰ってくるのですが、このときに、 アイテムの 「移動」 をした場合はこれを知ってソース側でそのアイテムを 削除(Remove)できると Help に書かれていました。 ------- ● DragAction の値が Drop の場合、ドロップ効果の値がソースに返されます。 ソース アプリケーションでは、ソース データに対して適切な操作を実行できます。 たとえば、移動操作だった場合は、データの切り取りなどを実行できます。 ------- これを実装したのですが、その際、この QueryContinueDrag イベント のハンドラー内で、「移動」 だったのか 「コピー」 だったのかを知るには どうすればいいでしょう?このイベントでは、DragDropEffects 列挙体型の 値を受け取れるでしょうか?よろしくお願いします。
123 :
デフォルトの名無しさん :2007/04/18(水) 12:38:41
>>122 訂正 >これを実装したのですが -> これを実装したいのですが
(失礼しました)
>>121 SetWindowPosでやればいくらでも
125 :
117 :2007/04/18(水) 13:07:51
126 :
デフォルトの名無しさん :2007/04/18(水) 13:48:51
あるメソッドの中で間違ってnullのオブジェクト変数を使ってそのオブジェクトのメンバに値を入れてたんだけど、 デバッグしてる時に全然例外をスローしないで、そのまま動いてるんだよ。 しかも、メソッド内の処理はその間違った処理のところで終了し、メソッドを出てしまう。 まぁ例外処理だから、処理を中断し、そこから出てしまうんだろうね。そこは分かる。 でもtry{}catch{}はどこにも書いてないのに、なんでそのまま正常に動いてるんだろう。。。 おかげでバグを発見するのに時間がかかった。。
コード見せてみ
classA instance; instance = null; instance.method; こんな感じなの?
129 :
デフォルトの名無しさん :2007/04/18(水) 14:38:55
if(this.smpObj != null) this.smpObj = new SmpObject(20, 550) ; else{ this.price = 20 ; //@ this.quantity = 550 ; } こんな感じですね。つまりif条件文の「==」とすべきところを「!=」と間違えていたわけですが。 @を実行後、メソッドから突然抜けてしまったので、例外がスローされたんだと思いますが、 キャッチしてないはずなのに、デバッグはそのまま動き続けてました。
130 :
129 :2007/04/18(水) 14:40:35
if(this.smpObj != null) this.smpObj = new SmpObject(20, 550) ; else{ this.smpObj.price = 20 ; //@ this.smpObj.quantity = 550 ; } 間違えました。こうです
例外だそうとして考え込んじゃったんじゃないの? しばらく待ってたら止まったかも
二つほど質問があります。 1.GraphicsインスタンスをuseingやClose()で手動で破棄している サンプルコードが多いのですが、ガベージコレクションに任せないのは なぜでしょうか? 2.Graphics以外にも手動でインスタンスの破棄を行ったほうが良いクラ スはあるのでしょうか? 以上です。よろしくお願いします。
ファイルIO
>>132 Dispose(と同等のClose)やusingで破棄するのはインスタンスではなく
インスタンスが保持しているアンマネージリソース。
インスタンス自体の破棄はGC任せ。
基本的にDisposeが実装されているオブジェクトは不要になったらDisposeした方がいい。
>>122 VBスレで回答戴いていました、どうもありがとうございました。
>>112 次のケースでfalse演算子が使われるのを確認。
& 2項演算子 + true演算子 + false演算子を定義すると && 演算子が使用できるようになる。
式 A1 && B1 で
最初にA1がfalse演算子で検査されfalseであればB1は評価されない。
なおVBのDo Untilもtrue演算子を使っていました。
>>131 それが、そのまま他の処理を続けてたんですよね、ずっと。
138 :
デフォルトの名無しさん :2007/04/18(水) 20:40:40
C# には #include "ファイル名" とか出来ないんでしょうか? 色んなプロジェクトから 初期化共通項目として 1つのファイルから読み出したいんですが struct とか const なんかを
つ クラスライブラリ 共通の要素をアセンブリにまとめて、各プロジェクトで参照しる。
140 :
デフォルトの名無しさん :2007/04/18(水) 21:04:58
>>139 ありがとうございます
クラスライブラリーでdll作って、参照の追加すればいいんですね
141 :
デフォルトの名無しさん :2007/04/18(水) 22:10:02
おれっちVisual C#の本を四冊持っているがどれにも dllの記述がない。うち2冊は糞本であることが 購入2日くらいでわかった。もう少し落ち着いて 買うことにする。
>>137 メソッドをその場で抜けてるって言ってんのにそのまま処理を続けてるって…
「どこから」処理を続けてるんだよ
そのプログラムは、どこに書いてる?
ASP.NET?Windowsアプリ?
その中のどういうところに書いてるコード?
ちなみにメニューのデバッグの例外でスローされるとき中断にしとけば、
スロー時に即デバッガで停止されるのでまず確認できると思うぞ。
>>138 >>140 その用途でconstを使うのはダメだろ
static readonly stringか読み取り専用プロパティにしとけ
質問失礼します。 OpenFileDialogを使い、ファイルを選択させているのですが、ドライブのアイコン(マイコンピュータの中のアイコン)が表示されずに困っています。 どうやったら表示できるのでしょうか?
146 :
デフォルトの名無しさん :2007/04/19(木) 21:23:06
ListViewでListBox.SelectedIndexみたいな インデックス番号を指定してある項目を選択するなんてことできるんでしょうか?
ListView.SelectedIndices
ListViewItem.Items で目的の ListViewItem 取得して Selected プロパティ
……ListView.Items の間違い……
>>146 ねえなんでMSDNライブラリ読まないの?
読んでわからないならPGなんかやらない方がいいと思うよ。
>>147 おいおいアホだろw
ん?どうアホなのか説明してもらおうか
Property public SelectedIndexCollection SelectedIndices { get; }
>>152 まさか、お前、本気でSelectedIndicesの使い方しらんのか?
MSDN読んどけよ。
>>152 色々勘違いしているようだ
つか ListView.SelectedIndices ってスナップショットじゃないのな
ちょっと驚き
155 :
デフォルトの名無しさん :2007/04/19(木) 22:02:43
ありがとうございます。ところでここは初心者スレじゃないんですか? listView1.Focus(); listView1.Items[n].Selected = true; で,出ますね items[]なんてあるとわからないで items.で捜してしまって初心者にはわからないのですよ ヒントもらえるとホント助かります
listView1.SelectedIndices.Add(n);
.netのexeってなんか個人情報埋め込まれないか 心配なんですが、そこらへんの情報ありませんか?
アセンブリのGUIDからMACアドレスが逆算できるってのはあるかもしれん
>>157 VS2005からコンパイルするとRelaseモードでも/debug:pdb-onlyになってるから
*.pdbファイルへのフルパスが埋め込まれている。
そのパスにユーザー名が入ってたらそれはわかる。
それはexeとはいわない
何を言ってんだ?
失礼したw
163 :
デフォルトの名無しさん :2007/04/20(金) 00:12:16
.NET1.1のRichTextBoxで、一般的なWindowsアプリにあるようなダブルクリックに よる単語選択ができません。 トリプルクリックによる行選択は出来るのですが、ダブルクリックでは1文字だけが 選択されてしまいます。 また、ドラッグによるテキスト選択を行おうとすると、カーソルの彼方の方まで選択 してしまったりと、謎の挙動で困っております。 このような挙動を、一般的なアプリ風にするには、どのようにしたらいいのでしょうか?
んー、大体普通に動くようだが。 ダブルクリックで単語選択できるし。 新しいフォームに RichTextBox 貼り付けただけのプロジェクトで試してみた?
>>164 新規プロジェクトを作ってRichTextBoxを1つだけ貼り付けて、何も設定していない状態で
試してみましたが、英語とひらがな・カタカナは正常に選択されますが、漢字がダメです。
「これは機能テストです。」という文字列を入力して試してみたのですが、
「これは」「テスト」「です」は正常、「機能」の部分だけ選択されないという状況でした。
通常、ダブルクリックで選択するような場合は、漢字の変換ミスの時が多いと思うので、
なんとかしたいのですが、解決方法がまったく思いつきません。。。
もしかしたら、.NET2.0では直っているのでしょうか。。。
それRichEditの仕様 ワードパットで試してみ。 自分でクリック位置の前後の単語区切りを探して選択するようなコードを書けばいい。
>>165 あーそりゃ RichEdit の仕様だ。ワードパッドでもそうなる。
漢字は一文字で 1 ワード。ひらがなやカタカナは同じ文字種の範囲で 1 ワード。
どうにかするには……思いつかんな。
一般的なエディタは RichEdit なぞ使わんからなぁ。
168 :
デフォルトの名無しさん :2007/04/20(金) 01:25:37
>>166-167 あぁ、確認しました。。。
> 自分でクリック位置の前後の単語区切りを探して選択するようなコードを書けばいい。
(´A`)
C♯, C#相談室 Part38
http://pc11.2ch.net/test/read.cgi/tech/1173763436/592 592 名前:デフォルトの名無しさん[] 投稿日:2007/04/18(水) 01:31:56
.NET1.1とC#で勉強を兼ねてワードパットのようなモノを作っているのですが、
RichTextBoxで一般的なWindowsアプリにあるようなダブルクリックによる
単語選択ができません。
トリプルクリックによる行選択は出来るのですが、ダブルクリックでは1文字だけが
選択されてしまいます。
また、ドラッグによるテキスト選択を行おうとすると、カーソルの彼方の方まで選択
してしまったりと、謎の挙動で困っております。
このような場合は、どのようにしたらいいのでしょうか?
コピペ君も馬鹿だが、しかしどうしてわざわざ文章考えて質問分を タイピングする前に当たり前の確認作業をしようと思わないのかね。 少なくとも俺には精神分析の対象程度には人格が壊れてるとしか思えない。
マルチ指摘厨 精神分析厨
172 :
デフォルトの名無しさん :2007/04/20(金) 12:24:45
アセンブリリソースに画像ファイルがはいってるとします。 Resources1.designer.csが作られて Resource1.imgHogeとプロパティでアクセスできるんですが、 この場合返ってきたBitmapオブジェクトは、使い終わったら Disposeするべきなんですか? Disposeした場合、 もう一度Resource1.imgHogeってアクセスしても普通に使えるんですが これは安全ですか? ResourceManager.GetObjectをMSDNで読むと 「……複数回呼び出した場合、戻り値が同じオブジェクトの参照になるとは限りません。……」 とあるので、同じ参照になる場合もあるってことですかね?
自分で作ったオブジェクト以外はGCに任せるのが得策だとは思わんかね
>>173 Paintイベントで使ってて
>>172 のような疑問を持ったらオレは夜も眠れない
っていうかもう眠れないじゃねーか!w
>>174 PaintEventArgs.GraphicsはDisposeしてはならん。
176 :
165 :2007/04/20(金) 21:43:15
>>165 の続きなのですが、Windowsの仕様との事なので自前で実装してみようと試みているのですが、
public class RichTextBoxCustom : System.Windows.Forms.RichTextBox {
protected override void OnDoubleClick(EventArgs e) {
MessageBox.Show("test");
}
}
という風にしたものをフォームに貼り付けてダブルクリックしてみたのですが、反応がありません。
で、VisualStudioでブレイクポイントを設定してみたのですが、入ってきている形跡がないようなのですが、
なんででしょうか?
protected override void OnMouseDoubleClick( MouseEventArgs e ) { MessageBox.Show( "test" ); base.OnMouseDoubleClick( e ); } だけどテキストが選択されてからMessageBoxがでるようだから もっとメッセージ的に前のイベントをとるか WndProcでマウスメッセージ捕まえるかしたほうがいい。 まずはReflectorでRichTextBoxの挙動を調べろ 話はそれからだ
>まずはReflectorでRichTextBoxの挙動を調べろ >話はそれからだ 北方謙三にでもなったつもりかねw 頭オカシイんじゃねえの
>>178 Reflector使うのがかっこいい年頃なんだろw
便利なのは確か
便器なのも確か
北方謙三って…… おっさん年いくつだよ
質問に対してソープ行ってこいで返すそれが俺のジャスティス
Reflector?漢は黙ってildasmだろ
Reflectorわろた いいねぇ趣味でやってる学生プログラムマーは。コストなんて無関係でw
いちがいにそういいきれるおまえもおめでたいわ。 手っ取り早く挙動を確認するのに、早い場合「も」あるわな。
Reflectorとコストって同関係あるの?
188 :
デフォルトの名無しさん :2007/04/21(土) 12:01:35
C#ってすげー便利なんだけど、いまいち遅いんだよな・・・・
C++++の略ってほんとう?
CはCナチュラルの・・・あれ?SJISには♯と♭があるのにナチュラルがない?
>>190 一応コードポイント 81F8 ということになってはいる。
補足: JIS X 0213 には入ってるし、だから当然 Unicode にも入ってるし、メイリオ や Tahoma にはグリフもあるんだけど、 Windows の持ってるコード変換テーブルにはなぜか含まれない。
194 :
デフォルトの名無しさん :2007/04/21(土) 17:58:23
アクティブウインドウを取得するにはどうすればよろしいでしょうか。 アクティブウインドウのX・Y座標とWidthとHeightを知りたいのですが、 WIN32APIのGetActiveWindow使いますか?
ちょっとくらいヘルプみろ。 System.Windows.Forms.Form.ActiveForm()
>>194 取得するフォームが自分のアプリケーションだけならば
>>195 を
そうで無いならば GetActiveWindow を
今日からC#始めました。VisualStudio2005使用です。 とりあえず色々コントロールを使ってみようと思ってフォームにステータスバーを置いたら 見た目が普通のものと違う、、、 コレって普通の見た目のステータスバーにはできないでしょうか?
いまいちいみがわかりません
>>198 とは別人ですが、本当に意味が分かりません。
toolStripStatusLabelを置いた時に凹んでないってことじゃね
今日から始めていきなりこれか。 先が思いやられるな
間違えて TrackBar 置いてたりしてな
StatusStripを置いたら、StatusBarと見た目が違って戸惑っているんだろう。
204 :
202 :2007/04/22(日) 01:36:47
って、ステータスバーか。スクロールバーと読み間違えた。ごめぬ。
>>197 Main()の最初にこの一行追加して実行したまへ
ToolStripManager.VisualStylesEnabled = false;
206 :
デフォルトの名無しさん :2007/04/22(日) 10:54:11
メッセージを親ウインドウに送るにはどうすればいいですか?
子ウィンドウを作るときに親を引数にして子側で保存しておけばいいんじゃね
208 :
デフォルトの名無しさん :2007/04/22(日) 11:08:31
それだと直で呼び出すから、まだ子ウインドウが実行中でよろしくないかなぁと 思って、メッセージのキューの方法で実現できる方法を探していました。 でも今挫折してデリゲートを関数ポインタとして使って親に通知しようとしてます。。。 だめ?
日本語として成立してないと思う、その文章
子ウインドウが実行中って? メッセージキューの方法って? ポストするってこと? 関数ポインタで親に通知って? よのなか謎でいっぱい
普通にeventでじゃだめなのか???
自前でメッセージキューでもなんでも実装すりゃよろしいがな
C井
ビルドされたファイルはどこにあったの?
ビルドしただけで実行してないとか
217 :
214 :2007/04/22(日) 15:39:57
実行は ・VC#で[F5]または[Ctrl+F5]で実行 ・ビルドしたファイルはデフォルトの設定のままで設定してるので 「マイドキュメント」→[Visual Studio 2005]→[Projects]→[Windows Aplication1]→[bin]→[Release] にあった実行ファイルを直接開く の2種類をトライしました。 他作業をしているときに気付いたのですが、どうやら一応実行だけはされているようです。 ただし開いた瞬間にアプリケーションが終了しているようでした。 ウィンドウサイズやタイトルのパラメータを弄ってビルドすると反映されることから、 一応ビルドはうまくいっているようです
クソ言語C#
Visual C# 2005 Express Editionで Eclipseにあるようなtry〜catch()で囲むの機能 (選択範囲のスローされる例外のcatchを自動で生成してくれる)機能ってないでしょうか?
ない。 C#にはJavaのthrowsに相当するものがないから
catchする気もないのにcatchする輩が糞コードを量産していく
>>221 空のcatchブロックが意味内のはわかりますが
catchする気がなくてもどんな例外が出るか一気に調べられて便利だと思うんですが
いちいち煽りに付き合うなよ MSDNのいい加減さをみりゃわかるだろうが、 発生する可能性のある例外を調べる方法はない。
197です。 203さんの言うとおりStatusStripとStatusBarで見た目が違うので戸惑いました。 205さん解答ありがとうございました。これからちょっと試してみます。
General.walker.Add(null); General.walker[0].printtest(); public class StartWalker { public void printtest() { General.PRTMSG_LIST += "----------------------------------------\r\n"; } } public struct General { public static List<StartWalker> walker = new List<StartWalker>(); } こんばんは、上記のような使い方をしたいのですが設定の方法がわかりません おしえていただけないでしょうか?
俺はエスパーじゃない
2行目でいきなりぬるりのようだが GeneralにPRTMSG_LISTなどというメンバはないようだが
Positionの存在の意味がわからないです。
日本語でおk
Positionって何の為におるんかな。
独り言なら公園のトイレで落書きでも眺めながらやってくれ
まじで疑問なんですよ。行数をindexにしたらすむ話なんですけど。
馬鹿に告ぐ Positionはいろいろある。 何のPositionか書け。
DataSet.Datatable.index+1 DataSet.Datatable.Position
General.walker.Add(null); General.walker[0].printtest(); General.walker.Add(null); General.walker[1].printtest(); int c = General.walker[1].intB(); General.walker[1].intB() = 5; public class StartWalker { string a = ""; string msgstack = ""; int b =0; public void printtest() { //メインになる動作を入れます msgstack += "test you"+"\r\n"; } public int intB { get { return b;} set { b = value} } } public struct General { public static List<StartWalker> walker = new List<StartWalker>(); } 説明不足で申し訳ありません マルチスレッドでStartWalkerの部分をGeneral.walker.Add(null);で任意の数ついかしたいのですが うまく説明できません・・・
何がしたいのか他人にもわかるように説明してくれ
人に見せるソースなら最低限MSDNに書いてある命名規則に則って欲しいな
コード書く前に何をしたいのか日本語で書け。
いい加減になんのpositonか書け。 helpトピック25件も出るぞ。
さっきからPositionPositionうるせえよ。黙っとれ
かまへんで。 かまねんねやけどな。 なんでnullをAddするんかいな。 おっちゃんそこんとこわからへんねん。 うごかへんのとちゃうんかいな。
//メインのプログラムループ ボタンを押す 設定した数のサブプログラムスレッドを起動 ボタン2を押す n番目のスレッドの変数cを参照して表示する //サブプログラム 乱数ベースでさまざまな演算を行い変数を格納 int a =1; int b =2; int c =3; 上記のようなプログラムが組みたいのですが
>>243 いままでなんでそれを書かなかったの?
ゆとり世代?
すみません。。 何をAddすれば動くのかわからなくって とりあえずnull入れちゃってます・・・
>>246 全くかすってない。
センスないよ。
いきなりスレッドなんかやらずに基礎から地道にやれよ。
そもそも自分が何をやろうとしているのか分かってるのか
>>236 を見る限りだと勉強不足が否めないな
スレッドなんか触るべきじゃない
>n番目のスレッドの変数cを参照して表示する このあたりも全くスレッドを理解してない証拠。
いままでは int view = a[threadnumber]; int view2 = a2[threadnumber]; のような参照の仕方だったのですが。 int view = Thread[0].getint(); int view2 = Thread[1].getint2(); クラスを作成してそれをマルチスレッドで動かし 後にそれぞれのクラスから計算結果を取り出そうと思ったのですが public static List<StartWalker> walker = new List<StartWalker>(); でクラスのもとを作成して walker.Add(); で要素(class)の数を追加 ThreadPool.QueueUserWorkItem(new WaitCallback(walker[0].main), 0); でスレッドを起動みたいなイメージでした。 独学なのでいまいちわからなくてこまっています。。
とりあえず、最初に言っておく。 『独学でそこまでやったことは素直に評価できると思う。セオリーとは乖離しているが』 walker に追加する理由は何だい? 後で参照するん?
スレッド使う必要あるのか? 初心者とか関係なくこの言葉は常に頭に入れておいたほうがいいよ Keep it Simple, Stupid.
253 :
デフォルトの名無しさん :2007/04/23(月) 00:33:33
VS2005でソースがUNICODEになってまうのだけど プロジェクト作る時にシフトJISにする方法ないですか?
sjisにしたらIDEの恩恵を受けられなくなると思うが。
255 :
デフォルトの名無しさん :2007/04/23(月) 00:47:30
おとなしくUNICODEでやった方が良いんですね ありがとうございました
ん? 特に指定しない限りSJISで保存されるのがデフォと思うけど。。
嘘はよくないと思うが
>>251 int view = Thread[0].getint();
int view2 = Thread[1].getint2();
public static List<StartWalker> Thread = new List<StartWalker>();
Thread.Add();
ThreadPool.QueueUserWorkItem(new WaitCallback(Thread[0].main), 0);
でした。
後で、または実行中に参照しようと思ってました
今回C#初挑戦で作ってる最中にいろいろ思いついてしまって。。
今回は
nt view = a[threadnumber];
int view2 = a2[threadnumber];
のまま使ってまた巧くなったら挑戦してみたいと思います。
ありがとうございました
>>252 スレッドは必須だったので。。
259 :
デフォルトの名無しさん :2007/04/23(月) 01:05:41
なんかエクスプレスの時はSJISで保存されるんだけど 売ってるやつはUNICODEで保存されるみたいでつ
うんにゃ、hoge.Designer.csとか日本語のコメントがあるやつは BOMつきUTF8だよ
>>259 そうだったか?
何を見てSJISと言ってるのか気になるところだな
確かに日本語のコメントが入ってるコードは明らかにUTF-8になってるな。 今まで何か勘違いしてたよ。。 おかしいな、確か2003までは日本語入っててもデフォでSJISで保存だったような 気がするんだけど。 だから(c)とか(R)みたいなSJISにない文字が入ってると保存時に警告された記憶がある。
その辺確かに動作は変わってたと思う。
264 :
デフォルトの名無しさん :2007/04/23(月) 06:24:12
>>261 違うエディターでソースを開いてたからわかった
VS2005 Beta 2 のころは Shift_JIS で保存されていた。 製品版VS2005で新規作成すると UTF-8 になるけれども もともと Shift_JIS のファイルを開いて保存しても Shift_JIS のままだった。 なので Shift_JIS から UTF-8 に全部変換したことがある。
VS2003とVSS6.0dを使うと、ファイルをVSSに追加するときに UTF-8のファイルだけどいいの?って聞いてきますよ。
>>266 6系はUTFに対応していないからなぁ・・・
2005と同時期に出たVSS7だとちゃんとUTF-8のソースを管理できる
VSS2005
>>266-267 そして、末尾日本語の改行コードがVSS6.0に壊される・・・
(かといってバイナリー指定にすると、diffがとれない)
>>268 今期の設備投資で注文してたのに・・まだ、うちの部署に届かない・・・
調達・・なにやってるんだよ〜
270 :
デフォルトの名無しさん :2007/04/24(火) 15:56:50
抽象クラスについて質問があります。 クラス1 属性:A,B,C 操作:D クラス2 属性:A,C 操作:D クラス3 属性:A,B 操作:D クラス1がデータを取得するとき、属性:Bの有無で クラス2 or クラス3を用いる方式を考えています。 こういう場合、属性Aと操作Dを抽象クラスにしたほうが よいのでしょうか?
イマイチ状況が分からんのでコードを書いて
>>270 抽象クラス {属性:A, 操作:D}
インターフェイスB {属性:B}
インターフェイスC {属性:C}
クラス1 : 抽象クラス, インターフェイスB, インターフェイスC
クラス2 : 抽象クラス, インターフェイスC
クラス3 : 抽象クラス, インターフェイスB
is IB じゃあかんの?
マイクロソフトの掟ではインターフェイスをマーキングに使ってはならん
インターフェイスをマーキングに使うってどういうこと? アホだからわからん。
属性って何だよ。Attributeのことなのか
操作に対しての属性のことだろ つまりプロパティ
ウチの犬は電柱にマーキングする
属性っていえば普通Attributeだろ?
Javaなんかで「属性」っていうとC#のプロパティに相当するものを指すぞ
>>270 がJava使いだとは思えないが
IRequiresSessionState IReadOnlySessionState 思い切りマーキングインターフェイス使ってるやん。 しかもこれのせいでハンドラがすごいうぜー構造になって実害でてるやん。
>>281 自らの失敗から駄目だって言ってるんじゃね?w
クラスライブラリの規則を守ってるのはmscorlibだけだからな。
284 :
デフォルトの名無しさん :2007/04/25(水) 11:46:07
285 :
デフォルトの名無しさん :2007/04/25(水) 13:42:09
細菌C#本が.殖えた奇がする。
質問です。 マイクの音量を調整するプログラムを作ろうと思ったのですが、 どのクラスを使えばいいのでしょうか? MSDNのクラスライブラリでそれっぽいところは見てみたのですが、 音量調整できそうな物はなかったのですが…
すんません、教えて欲しいんですが listboxの表示と実際の値を変えることが出来るみたいな記事を どこかで読んだんですが、見つけられません・・・・・orz やりたい事はlistboxにファイルをドロップした時 値=フルパス 表示=ファイル名のみ ってやりたいんですけど・・ お願いします
Format
DataSource と DisplayMember と ValueMember string 二つ持たせたクラス作って ToString() をオーバーライド さてどっちが楽かね。
>>289 >>290 うっ・・・ん〜ん。初心者なのでピンときません・・・
キーワードありがとうございました!!
がんばってみますね!!!
listBox.Format += delegate(object sender, ListControlConvertEventArgs e) { if(e.ListItem is string) e.Value = System.IO.Path.GetFileName(e.ListItem as string); }
>>292 うをぅ!!
ありがとうございます!
delegateって使った事がないので見ただけではなんとなくしか分かりませんが
凄く勉強になりそうな感じですね(笑)
本当に感謝します!
>>292 なにこれ2.0からコントロールにもこんなの追加されたの?
他にも今までの苦労全てプギャーってなりそうな予感…
今度の休みは一日中クラスライブラリのヘルプ眺めてみるか。
匿名メソッドだっけ? これどうしても便利だと俺は思えないんだけど。 いや、(コードを書くときには)便利ではあるかもしれないが、 後でコードを読むときのことを考えると有用性が甚だ疑問なんだよな。
可読性に難が出る程の長いコードならメソッドだてするだろう。 プロパティ設定するための Invoke とか、ちょっとした MatchEvaluator 使う Match とかお薦め。
297 :
294 :2007/04/26(木) 01:27:17
>>295 いや
>>292 は匿名メソッドがどうのとかじゃなくて
Formatイベントというものが追加されてるのに感動したと…
もちろんイベントにメソッドを割り当てるのは可能だけど、
>>292 のように匿名メソッドでサラっと書けるのって利点だとおもわないか?
298 :
デフォルトの名無しさん :2007/04/26(木) 01:39:29
toolStripContainerのtop,left,right,bottomの全てに含まれるバー(toolstrip, statusstrip, menustip) のオブジェクトを取得したいのですがどうすればよいですか?
ToolStripContainer.Controls
↑は駄目なのかな。 ToolStripContainer.LeftToolStripPanel.Controls ToolStripContainer.RightToolStripPanel.Controls 以下同文
301 :
298 :2007/04/26(木) 02:01:19
どうもありがとうございます。 top, left 〜 4回繰り返さないとだめなんですね。 そこで、もうひとつ質問なんですが foreach (Object obj in toolStripContainer1.TopToolStripPanel.Controls) こんな感じでforeachでまわして、 TopToolStripPanelに属するツールバーorメニューバーのGripStyleを一括して設定したいのですが、 どうすれば良いでしょう?menuStripとToolStripがTopToolStripPanelに混在している時点で 一括して処理するのは不可能なんでしょうか? (menuStrip、ToolStripがクラスではない、というのもよくわかってないのですが、、)
>menuStrip、ToolStripがクラスではない ?? どちらもControlですよ。 MenuStrip もStatusStrip もToolStripを継承してるから foreach( ToolStrip ts in toolStripContainer1.TopToolStripPanel.Controls ) { ToolStripGripStyle tsgs = ts.GripStyle; ..... } でおk
すみません。作成したテスト用dllをNUnit2.4でデバッグ実行したい (ブレークポイントとかで止めたい)んですが、可能ですか?
PDBありゃいけるだろ
ども。VS上からdll指定で、NUnit呼んだら普通にいけました。
ListViewで複数選択した値をforeachでstring型で取り出したいんですが selecteditemでもforcuseditemでもキャストなしではダメですよね? 誰か教えてー
キャストでうまくいくならそうすりゃいいじゃん。
キャストありでもダメだろ
あぁ、すみません。キャストしても変な文字になりますよね ListViewItem:{hoge} みたいな
匿名メソッドで思い出したけど、 匿名メソッドだとクロージャのせいで メソッドを割り当てるのに比べてパフォーマンスが低下したりしないですか?
言うほど変わらん
>>312 あーすみません。
あるディレクトリ内のファイルをloadイベントでlistviewにリストアップします
んでlistviewで複数選択してボタンを押したときに他のあるディレクトリに
選択されたファイルをコピーしたいのです
んでfilecopyをforeachでやりたいんですけどパスがstring型で取れないんですよ・・
意味がわからんのだが、Textプロパティをとるのとは違うのか?
ええっとですね foreach(string hoge in ListView.forcuseditem.text) なんて出来ます? 今家なんでVSないんですよ・・
focusでした
前途多難だなw
素直に ListViewItem 列挙してそれから値取れ。
320 :
デフォルトの名無しさん :2007/04/26(木) 22:47:03
テキストボックス内のカーソルの位置から 現在の位置している行数を取得したいのですが、 1行が1024文字を超えた位置にカーソルが位置していると、 下記のrowの値が1だけ繰り上がってしまいます。 どうやら1024区切り(1024,2048,3072,…)で1ずつ繰り上がるようです。 TEXT->WordWrap = false; int row = GetLineFromCharIndex(TEXT->SelectionStart); TEXT->WordWrap = true; これを回避して、1024文字を超えても正しい行数を返すように 修正できないでしょうか?
$getstr = new Win32::API("strmng", "mng", "PNNPN", "N"); 学習用ソフトをperlから移植しているのですが 上記のような場合どのようにDllの記述をすればよろしいのでしょうか?
>>315 もしそれが出来たとしても
foreach (ListViewItem item in ListView.ForcusedItem)
{
string hoge = item.Text;
}
と何が違うのかわからん。
324 :
320 :2007/04/26(木) 23:23:33
>>315 SelectedItemsな。
itemsになってるだろ?
複数のものを返してくるときはたいていsがついてる。
複数形だな。
まずmsdnみろ。
>ListView.SelectedItems プロパティ
>コントロール内の選択された項目を取得します。
>構文
>C#
>public SelectedListViewItemCollection SelectedItems { get; }
プロパティはSelectedListViewItemCollectionを返すことになってる。
〜Collectionは複数のものを返すように大体なってる。
これを使って foreachしてListViewItemを1個ずつ取り出す。
そしてTextを…
>>326 ありがとうございます。そちらで質問してみます。
なぁ匿名メソッドの利点がコラムとか読んでも理解できない 馬鹿な俺に誰かわかりやすく教えてくれないか?
メソッド名を考えなくていいんだから、この上ない利点じゃん。
なるほどそれが利点なんだ。
じゃあ小さなメソッドの名前はみんな"A0001"とかでいいよねw
>>329 なんか構造化の思想に反する、という欠点しか思い浮かばないよね。
スコープというか、名前空間の汚染ね。
最初から名前をつけないで済むのと、わけのわからん名前をつけて悩みながら使うのでは雲泥の差だ
335 :
329 :2007/04/27(金) 14:02:53
>>332 いや、流石に自演しないわ
なるほど・・・
確かにそういわれれば悩むなぁ
オラなんか使いたくなってきたぞ
337 :
336 :2007/04/27(金) 14:13:36
MethodInvokerって便利だけど、 どうせなら引数ありのもつくっといてほしかった objectでいいからさ
質問です。 Clone()で該当変数のポインタしか帰ってこない参照型の変数をどうにかして完全コピー したいのですが、どのようにしたらできますか?
リフレクション
リフレクションを使ってprivateメンバを見るのって具体的にどうやるの?
GetField
345 :
340 :2007/04/27(金) 21:19:35
帰ってきたらこんな時間…飯作るの面倒だ orz
>>341 もう少しヒントをいただけませんか?
完全コピーって、内部メンバの参照先も完全にクローンするつもりなの?
347 :
340 :2007/04/27(金) 21:38:40
>>346 できれば。memcpyみたいなことができればいいなーとか思ってるんですが、
甘過ぎですかね orz
static void Copy<T>(T src, T dst){ Type type = src.GetType(); FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); foreach (FieldInfo field in fields){field.SetValue(dst, field.GetValue(src));} } あくまでネタとしてw
Type type = src.GetType(); は Type type = typeof(T); にしないとsrcがdstの子孫じゃなかったときに死んじゃう。
それじゃ一段階しかコピーできんな もっと深く! やらんで良い
>>347 シリアライズ可能な奴は一旦デシリアライズしてシリアライズしてコピーという手がよく使われる。
しかし一般の参照型について汎用に使える方法は無い。そういうの作ろうとしているなら諦めれ。
リフレクションで公開フィールドのみコピーするとかプロパティのみコピーするとかそういうコードなら作れるが。
相手が決まっているならそのクラス専用のコードでもいいんじゃね?
memcpyのようなコピーじゃGC出来ないんじゃないかな?
自己参照構造体配列みたいな構造になってるクラスだったらmemcpyじゃ意味ないし
>>350 参照構造にループがあるときに下手に再帰すると無限ループになるんで注意ね。
355 :
340 :2007/04/28(土) 08:36:15
寝てしまった orz
>>348 なんかいけそうですが、1段階のみですね…
>>351 最初はそうしようと思ったんですが、Controlを継承しているためか、
シリアライズできないんです…
あきらめるか orz
コードいじれるんならClone()でも実装すれば、って話じゃないの?
いやそもそも「完全コピー」(コピーかクローンかどっちだ、という問題には突っ込まないとして) が仮に可能として、意味ないだろう、って話でしょう。 例えばウィンドウハンドルとかコピーしてなんか意味あるのかよってさ。
>>302 恐れ素すぎですが、ありがとうございました!
359 :
775 :2007/04/28(土) 21:47:05
C#でnsfファイルの再生をするにはどうすればいいんだろう。
独り言なら日記帳でな
361 :
デフォルトの名無しさん :2007/04/28(土) 23:22:05
プログラム初心者です C#は3ヶ月で習得できますか?
他の言語での経験があれば言語は3ヶ月もあれば余裕だが
C#の言語自体なら3日〜一ヶ月で習得できるだろ
C#の文法の習得には3か月もかからないだろう。 しかしながら、プログラミングに不可欠な.NET Framworkの習得は3か月じゃ厳しいだろう。
必要な部分だけなら .NET もそんなに大した量ではないだろう
C#で何をしたいんだろう?
int あsdf= 1; あsdf++; こんなん通った。ちょっと驚き。 2バイトコードの変数なんて必要だろうか。。。
2バイトコード
なにか?
はいはい。 UTF-8やってたからな。 すまんこな。
VS2005 じゃメニュー系とかで使われてるぜ しかし所謂 ASCII 文字だって2バイトコードだぜ、.NET では
っていうかいちいち反応するほどの事ではないわな。
>>368 の性格が悪いだけだからきにするな。
>>367 その話は長くなるんだよ。
俺は使う→使うやつはウンコ→自分基準で批判するやつはウンコ
→オマエモナー→ぬるぽ→ガッ→俺は使わない→俺の仕事では
使わないとやってられない→ソース晒せ→できない→ウンコ→2番目に戻る
みたいな流れで。
やるなら別スレでおながいします。
>>276-280 エクスプローラとかは、英語版のPropertyを翻訳するのをあきらめて
「プロパティ」にしてるもんな。
>>367 実行時型情報で 変数名を使って何かするとき便利だろ
PropertyGrid使うときとか……
DisplayNameAttribute 使えよ
日本語の変数を使う"必要"は無いが、日本人同士が同じソースを記述する場合、使った方が若干理解しやすいと言えるかもね。 でも古株が嫌がるの必須だな。(なんとなくだけど) パラダイムシフトを起こした新人と上司の対決が出てくるだろうね。 問題は多言語に対応した事による、国境を越えたソースの共有化かな。 サンスクリット語で書かれた変数なんて、日本人には理解しづらい事この上無いと思う。 そういう意味では愚策としか思えんな。 と。 既出であろう事を堂々と書いてみる。
うーん、でも命名センスの方がより重要だよね。 日本語使うか英語使うかより。 英語でセンスある命名ができない奴は、たぶん日本語つかっても同じことだと思う。 つまり可読性はあまり向上しない可能性が高いんじゃないかな
なによりもIMEの切り替えがめんどくさすぐる
Excelのオートコンプリートみたいに未確定や読みの段階からインテリセンス働いてくれればいいんだけどな。
Shoshinsha初心者 みたいに書く決まりにすればいいんじゃね
383 :
デフォルトの名無しさん :2007/04/29(日) 13:33:06
コンパイル時に警告出すようにするのがいいです
おまえらもコメントがハングルで書かれたソースをメンテする羽目になってみろと。
それは朝鮮語の勉強にもなって一石二鳥だな
386 :
デフォルトの名無しさん :2007/04/29(日) 13:39:44
Regex regex = new Regex(@"wii", RegexOptions.IgnoreCase); ↑ これだと半角の「wii」や「Wii」にはマッチするんですが、 これを全角の「wii」や「Wii」にもマッチさせるにはどうしたらいいんでしょうか?
1) @"[ww][ii][ii]" とする 2) 互換正規化する
@"(wii)|([Ww][I@]{2})" あとはVBライブラリのStrConv…とかいうとVB厨扱いされるかな
389 :
デフォルトの名無しさん :2007/04/29(日) 13:50:11
>>387 実際には@"wii"の部分が変数になりますので1の方法は無理なんですが
2の方法はどういったものなんですか?
"wii".Normalize(NormalizationForm.FormKC) == "wii"
2.0でそんなの出来てたのかー 勉強になった
392 :
デフォルトの名無しさん :2007/04/29(日) 13:59:45
>>390 その方法を利用してみます。
どうもありがとうございました。
海蘊と藻屑って似てるよな?
394 :
デフォルトの名無しさん :2007/04/29(日) 15:03:05
Windows.Forms なんですが、ダイアログボッックスをFormエディタで作成して 普通に、form.ShowDialog()で表示すると、びろ〜んと一個一個のコントロールが スローモーションで表示されていきます。 これ、一気にパッと表示できないんですか? これでは恥ずかしくて納品できません。 一応、SuspendLayout, ResumeLayout, PerformLayout辺りを弄っているんですが、 改善しません。よろしく。
それが気になるって事はフォームにコントロールを大量に貼り付けすぎって事だ
396 :
デフォルトの名無しさん :2007/04/29(日) 15:12:12
>>395 どもです。コントロールが多いフォームでも、コントロールは10個ないです。
あとスローモーションといっても、表示完了まで0.05〜0.1秒くらいなんですが、すごく気になります。
どうしても、『びろ〜ん』はいやなんです。このままだとMFC/C++に逆戻りです(;_;)
戻れば良いんじゃない?
398 :
デフォルトの名無しさん :2007/04/29(日) 15:17:43
>>396 LockWindowUpdateを使ってみたらどうだ?
[DllImport("user32.dll")]
static internal extern int LockWindowUpdate(IntPtr hWnd);
Cursor preCursor = Cursor.Current;
Cursor.Current = Cursors.WaitCursor;
LockWindowUpdate(Handle);
try
{
//フォームを表示
}
finally
{
LockWindowUpdate(IntPtr.Zero);
Cursor.Current = preCursor;
}
デバッグモードというオチ。
401 :
デフォルトの名無しさん :2007/04/29(日) 15:59:03
DX4マシンという落ち
0.05〜0.1秒って遅いうちに入るのか?
403 :
デフォルトの名無しさん :2007/04/29(日) 16:28:12
いらちなのでおそいのむりやねん
404 :
デフォルトの名無しさん :2007/04/29(日) 16:30:36
↑翻訳お願いします
405 :
デフォルトの名無しさん :2007/04/29(日) 16:44:26
>>394 コントロール10個もないフォームで0.05〜0.1秒の間に
「一つずつ」びろーんと表示されるのか?
ありえないし、びろーんと感じるわけもない。
Form_Loadとかに重い処理はいってないの?
>>404 エキサイトで英語にしてみた
Because it is, it is of.
>>394 メモリが足りてないとフォームの表示や再表示でそんな感じなることはあるね。
表示自体が遅いというより表示の裏でページングやコードのロードが平行して起きてるからそうなる。
最初はJITのせいかと思ったがページングの影響の方が大きかった。
フォームが表示された後に描画してんじゃない?
SuspendLayout〜ResumeLayoutしてるっていうし、そこいらは一応大丈夫じゃないかな。
まぁWinFormが遅いのは仕方ない。
413 :
デフォルトの名無しさん :2007/04/29(日) 20:18:08
毎度思うが、 ・環境を書く ・可能な限りソースを晒す の二つをやってくれれば、 こっちとしてももうちょっとアドバイスしようがあるんだけどな
いや、普通に作ったらそんなもんじゃね? 0.05秒はトータルの時間でだろ。 なんていうか、そのレベルでピッチリした動きを求めるなら WPFいくか.NETあきらめるかどっちかだな。
C#って、インラインアセンブラか、もしくは部分的にCで書くとかってことできないの?
unsafe DllImport C++/CLI 好きなの使え
WPFて描画速いの?
VindowsVistaでメモリが潤沢な場合は、WinFormは快適。 Vistaでメモリが潤沢というのはものすっごい環境ではあるのだが(笑
>>417 ハードウェアアクセラレーションの恩恵を受けられる場合は速くなる可能性がある
いや、部分的に何を効率化するかが問題。
あのねぇ、アクセラレーションとかそういうレベルの話じゃなくて、 そもそも仕組み、構造が違う。 だから、ここで出てるような問題は起こりにくいの、仕組み上ね。
「処理」をカプセル化出来ること。
コードブロックをオブジェクトとして扱うのに、 記述を局所化出来ること。 ローカル変数を取り込めること。
所謂誤曝
匿名デリゲート?
427 :
デフォルトの名無しさん :2007/04/30(月) 11:34:49
質問です C#から標準webブラウザを開きたいのですが、 Process.Start以外に方法はあるでしょうか?
その前になんでProcess.Startではだめなのか
429 :
デフォルトの名無しさん :2007/04/30(月) 11:42:20
tergetを指定して開く方法が無いものかと思案しておりまして・・・ <a target="hogehoge" ← Process.Startだと指定できないので・・
ブラウザを開く時には target は関係ないんじゃないか? 開いているブラウザならともかく
と思ったけど要は既に開いているブラウザに表示したいって事ね 取りあえず Shell32.dll を参照して Shell オブジェクトの Windows プロパティで IE と Explorer を列挙することはできる
ファイル名だけ指定してProcess#Start()は?
433 :
432 :2007/04/30(月) 12:02:13
開きたい対象ファイルのファイル名のことね
みなさんありがとうございます。その線で調べながらやってみます。
回答する奴もわからないなら黙ってればいいのに。 まあ俺もなんだけどさ。 「標準ブラウザで開きたい」って言ってるじゃん。 標準ブラウザって言葉の意味がわからないのかな?
436 :
デフォルトの名無しさん :2007/04/30(月) 12:39:18
標準 英語で言うとスタンダード IE,Firefox,Operaあたりだったらいいんじゃないか?
「標準」ってそういう意味じゃないよ。 standard じゃなくてdefaultの方の意味合いだね。
438 :
427 :2007/04/30(月) 12:42:18
>>435 もしかして
>>431 の方法ではネスケとかが無理ですか?
>>432 の方法もやっぱり新規windowが開いちゃいますね・・・
さてどうしよう
"target" なんてブラウザ依存なんだから汎用的にやろうとするほうが無理だろ。 同じウィンドウに表示したいならDDEでも使え。
>>439 標準webブラウザといっても、全てのブラウザ対応でなく
当面はIE6〜とネスケ7.1〜に対応できればいいのですが・・・
あとできればDDEとは何か、何の略かだけでも教えてくだされば幸いです
D 黄金週間中に D まともなレスを E 期待するな
動的データ交換 (Dynamic Data Exchange, DDE)の事かな・・
>>441 藁にも縋りたいほどなのれす。でなきゃ連休中にこんな事orz
443 :
427 :2007/04/30(月) 13:30:42
C#はDDEをサポートしていない という記述を見かけた。さてはて
そんなわけがないだろ
DDEは標準のクラスライブラリではしてない。 P/Invokeならできるというのをサポートしているというならしてる。
>>437 デフォルトを標準と呼ぶのか?
「既定の〜」とか
「よく使う〜」とかならんか?
「標準」は「スタンダード」だろう。
質問者はおそらく標準を既定の意味で使ってるんだろうからそれで問題ない。
>>447 俺今、お前が同じプロジェクトチームの奴じゃないことを祈ってる。
顧客の用語にいちいち指摘を入れるのか?いや、そんなことはしないだろう。 標準だろうが既定だろうが字面以上の意味を読み取らねばならん。
そりゃ入れなけりゃいかんだろう 勝手に解釈して間違ってたらどうするってんだ
452 :
427 :2007/04/30(月) 17:03:46
それ以上はマ板でやれ
終わった話題に何を言ってんだか
プログラミングの最初の一歩としてCを勉強しようと思うんですが 将来的にはC♯も学びたいと思っています。 そこで最初からC♯を勉強したほうがよいのでしょうか? それとも参考書などが充実していて理解しやすいらしいCから 入ったほうがいいのでしょうか? CとC♯の互換性も気になります。
互換性なんてまったく無いぞ
わざわざ昔の言語からやる必要はあるまい 今なら、JavaかC#でいいんじゃない? 業務で必要になってからCやっても遅くないし
最初にCやると古臭い変な癖がつくよ
レスありがとうございます。 ではC♯からはじめようと思うんですが C♯は参考書が図書館で借りれないんですよね・・・・ 実費か・・・ できればメジャーで、今でも普通に使われている言語があれば 教えていただきたいです。
それならJavaだろ 本も図書館にあるはず JavaやったあとでC#へ移行するのも楽勝
>>460 ありがとうございます。
やさしいjavaが図書館にあるようなので、借りてきて勉強してみます。
本を買うより「C# 初心者」「Java 初心者」でぐぐってみると、とりあえず幸せになれる。 図書館は明日行くとして、まずぐぐるという習慣が大事かなと思うんだがどうか? あと、C#スレでもJavaスレでもテンプレにあるリンクは一通り行ってみること。
ありがとうございます。 いろいろ参考になるサイトが出てきたので本と合わせて 勉強したいと思います。
C#はC/C++とは違い関数のプロトタイプ宣言なしで、前方参照により関数を利用できるようですが、 プロトタイプ宣言のようなもの(クラスの宣言含む)はC#には存在するんでしょうか。くだらない質問ですみません。
>>464 というか出来たとしてお前はなにがしたいんだ?
前方参照という概念自体C#には存在せんぞ?
プロトタイプ宣言のようなもの(形式だけ定義)は必要な
領域ではある。P/InvokeとかCOM Interopとか。
厳密に言えば関数も存在しないし。
ファイル操作をただいま勉強中のものです。 StreamWriter等を使えば”書き加える”ことができるようなのですが、”書き換える”にはどうしたらよいのでしょうか たとえばファイルの中身をHello worldからHell worldにしたいということです。 独学なので何か変なことを言っていたらすいません
バイト数が変わらないなら手はあるが、そうでないのなら大凡上書き保存
安全性を考えると、直接書き換えるよりは、 新しくファイルを作って、 それに成功したら名前を変更して、 それに成功したら前のファイルを削除、 という手順にするのが最良。 デカいファイルだと無理な事もあるけど。
>>464 あまり詳しくないんで真に受けないで欲しいんだけど、
「プロトタイプ宣言のようなもの」っていうのは.NETではおそらくアセンブリ自身
っていうことになるんじゃないのかな。
たぶん「リフレクション」ってキーワードでいろいろ調べるといいと思うんだけど、
つまり.NETのアセンブリはバイナリの中に自分自身の情報(どんなプロパティがあるかとか、
どんなメソッドを持っているかとか)を自己記述的に持っているというわけだ。
470 :
デフォルトの名無しさん :2007/05/01(火) 12:39:11
>>470 絶対来ると思ったけど、「プロトタイプ宣言のようなもの」の部分は
当然「意訳」して解釈してるよ。
コンパイル時の話であって、リフレクションなんて関係無いのでは?
アセンブリが自身の情報を持ってることの副産物として リフレクションが可能になってるってことが言いたいんだろ
リフレクションが可能だからこそコンパイルできるんでしょ
なんでそんな飛躍して解釈するのかと… ソースに宣言が必要か不必要かで考えるだけだろ。 ここでリフレクションなんて言葉は混乱の元。
476 :
デフォルトの名無しさん :2007/05/01(火) 14:34:10
これはサーバの協力もいるかと思いますがお知恵いただけたら幸いです。 C#で差分ダウンロードを実装しようと考えています。 初心者なりに次のプロセスを考えました 既得ファイルの容量(か更新日付)把握 ↓ サーバにファイルの容量(か更新日付)問い合わせ ↓ 更新を確認できた ↓ 既得ファイルの容量から、 サーバのファイル容量−既得ファイルの容量 分のリクエストをする プロセス4の方法がわかりません。 知っているかた、もしくは差分はこういう手順だというものがあればご教授ください
まあ、キーワードとしてはメタデータで十分だしそっちのがいいだろな。 バイナリ自体にメタデータとして必要十分な情報が入ってるから 直接バイナリを参照すればすむわけだ。
HTTPです。 ごめんなさい、自己解決しそうです。 HttpWebRequestクラスのAddRange というのがあるんですね、今実装できる環境じゃないのですがやってみようと思います
480 :
>>394 :2007/05/01(火) 16:32:53
formがびろーんとなる件ですが、LockWindowUpdateも試してみたし、 Suspend/ResumeLayoutもコメントアウトしてみたり、フラグを変えたりして 試してみたんですが、全く効果がありませんでした。効果がないということは、 逆にSuspend/ResumeLayoutがまともに機能していないってことかもしれません。 いくら.NETとはいえ、たかがコントロールを数個描くのに1/30秒くらいかか るってあり得ないと思うんですが。 ちなみにテストマシンはC2D E6600 + 3GBDDR2 + GeForce7600GT です。
そうだね、プロテインだね
>>480 体感の部分は伝わりにくいから、
アップローダにプロジェクトごとアップしてみたら?
483 :
デフォルトの名無しさん :2007/05/01(火) 16:59:08
485 :
>>394 :2007/05/01(火) 17:01:22
>>482 それはできないです。
しかし、よーくみたらなんかおかしいんです。どうもコントロールのプロパティの値が、ShowDialog()
がコールされた後に変更されているように見えます。これが「びろーん」となる原因のようです。
InitializeComponent() でコントロールをインスタンス化してプロパティ等を書き換えても、
この段階ではフォームは表示されていないはずなんですが、表示されてしまっているんですかね?
MyFormClass myForm = new MyFormClass(); ←この段階でコンストラクタからInitializeCompornent()が呼ばれているはず。
myForm.ShowDialog(); ←ここでは、InitializeCompornent()内で設定されたプロパティ値でコントロールを表示するはず。
まるで非同期でInitializeComportnent()が呼ばれているような感じです。
486 :
>>394 :2007/05/01(火) 17:02:34
>>484 てか、ふつーにフォームデザイナで適当にコントロール配置して、
コンパイル&実行すれば、びろーんを再現できますよ。
>>486 よく分からんがその「適当」が誤解の元だったりしても知らんぞ
489 :
デフォルトの名無しさん :2007/05/01(火) 17:08:34
490 :
>>394 :2007/05/01(火) 17:13:05
あ、ごめん違うわ。 コントロールの文字列部分だけが一瞬抜けて(クリップアウト)フォーム全体が 表示されて、約0.05秒後に抜けた部分が描画されているようです。 また明日にします。ではお疲れ様。
491 :
デフォルトの名無しさん :2007/05/01(火) 17:14:58
お疲れ 明日もまた来いよ
492 :
>>394 :2007/05/01(火) 17:27:44
あともうひとつ。Formの"Double Buffer" propertyをオンにすると、
>>490 に書いた「抜け」は
なくなるんですが、今のところ、リストボックスコントロールのBGパートだけ
先に描画されるという間抜けな現象が起きてます。これ絶対、.NETのパフォーマンスの問題じゃないと思う。
これ、おれが原因でなかったら、.NETの担当プログラマぬっころす。
こんなの放置しておくなんてありえないし。
どうぞMSFTまで乗り込んできてください
494 :
>>394 :2007/05/01(火) 17:41:02
もうひとつ。 Double Bufferedにすると、少なくとも、フォームのボーダーも先に描かれます。 Double Buffered フラグを無視して、フロントバッファに直接描くやつと、ちゃんとフラグをみて バックバッファに描くやつがいるってことかなぁ。だとしたらかなりお粗末だぞ。
で、うpは?
>>494 もはやここでやる話ではないと思うんだが。
>>492 >>494 リストボックスは「コントロール」ってなってるけど実際には子ウィンドウだよ。
Double Bufferをオンにしたからって子ウィンドウの内容が親ウィンドウに取り込まれるわけじゃない。
原則子ウィンドウのクライアント領域は子ウィンドウのハンドラで行われる。
フロントバッファとか、ゲーム系の変な知識で色々勘違いしてないかね?
498 :
>>394 :2007/05/01(火) 17:48:58
アップはしませんて。NDAあるし。
>>496 うーん、もしこれが俺の初心者並の間抜けなミスあれば、ここでやる話だろうし、
MSの.NETチームの間抜けなバグであれば、ここじゃないっすね。
ということで、おつかれ。解決したら解決法を書き込みます。
チラシの裏マジオススメ
よくわからんけど。 JITコンパイルで時間がかかってるとか? ngenで事前コンパイルしてみるとか。
>>498 デザイナで適当にコントロール貼っただけのフォームでもなるんじゃなかったのか?
502 :
デフォルトの名無しさん :2007/05/01(火) 17:58:42
>>394 のような人間を部下に持つ奴はかわいそうだな
>>394 のような人間と同じ掲示板にいる俺可哀想
>>498 Double Bufferをオンにしたら、ゲームみたいにウィンドウと同じサイズのバッファができて、
リストボックスやボタンもそこに描画されるものと思ってない?
だとしたらそこからして違うよ。
トップレベルウィンドウの単位でバッファを持ちたければ、
レイヤードウィンドウを使うのがお手軽。Windows 2000以降限定になるけど。
とりあえずOpacityを99%にして改善するかどうか見てみたら?
なんというか・・・・意図を汲むことをしらなそうな奴だと思った俺が通りますよ
NDAて 状況を再現できる最低限のコードも書けないのか?
507 :
>>394 :2007/05/01(火) 18:10:03
>>497 なるほど。リストボックスはそれで仮に納得したとして、
でも当該フォームのボーダーも先に描かれちゃう件は?
>>497 >>504 Double Bufferedというからには、Front/Back Buffer構成だと思ったけど違うんだ。
普通だったら、子フォームや子コントロールなどの子objectは親が取得したDCを
何らかの方法で参照しそうなものですよね。
そうすれば、子オブジェクトは描画先がバックだろうがフロントだろうが
テクスチャーメモリーだろうが知る必要がないし。と思うんですが。
ま、.NETのやり方は違うということで、その辺もうちょと勉強してみますわ。
どもでした。
真性のアホなんだろ
>>507 >Double Bufferedというからには、Front/Back Buffer構成だと思ったけど違うんだ。
.NET WinFormsのコントロールははMFCと同じでコモンコントロールの薄いラッパだよ。
WM_PAINTの中で得られるDCに対して描画しているだけなのはどっちも同じ。
というか
>>397 で「MFC/C++に逆戻りです」とか言っておきながら本当にMFC使ってたの?
510 :
デフォルトの名無しさん :2007/05/01(火) 18:15:01
しかも、都合の悪い事スルーしてるしな なんというか・・・某有名掲示板(ここではない)に来てる連中のようだな アホス
だからそれを改善したけりゃWPF
自分の話は聞かせたいが、人の話は絶対聞かないタイプだな。 リアルで相手されないと掲示板にやってくる。それも初心者用のとこ。
513 :
509 :2007/05/01(火) 18:31:02
すまん
>>394 だった。
ついでに追記。
>当該フォームのボーダーも先に描かれちゃう件は
それを見るためにも再現コードのうpを待ってるんだけどな
というかボーダーって何のこと言ってる?
ウィンドウマネージャが描く枠線のこと?
とにかく
>>394 が「Double Buffered」に変な期待をしすぎているというのは確定ぽいね。
WinFormsのダブルバッファってのは、
自分のクライアント領域をメモリビットマップにキャッシュしておくというものであって、
子ウィンドウの中身までキャッシュするような代物ではない。
あほらしい動作に見えても、それがレガシーという奴だ。
コントロールの中身をビットマップに取り込みたければ、
自分でControl.DrawToBitmapメソッドを呼ぶ必要がある。
構うと一生独り言続けちゃいますよ
>>486 で言ってるようにVSが自動生成したコードで現象でるんだろ?
で、他の誰も同意してないんだから
>>394 だけの問題じゃねーの?
たとえば、配置してるコントロールは標準のものじゃなくてサードパーティー製とか
アセンブリキャッシュ関係をイジってるとか。
そもそもデバッグ環境じゃなくて、リリースビルドしたもので試してるんだよな?
と言うか他の人は気にならない一瞬を問題にしてるだけじゃないかな ま、恐らくこれ以上お互い得るものはないね
いまどき(というかWin98の時代だってそうだが)リリースとデバッグで そんなところに違いが出るような貧弱な環境ありえねえよ
そうでもないよ
最近C#始めてみたのですが、いきなりつまずいたので質問させて頂きます。 VS2005のsp1でWindowsフォームアプリケーションを作成しようとして、 とりあえずメニューをフォームデザイナで作ったのですが、色が青色になっています。 なんか気持ち悪いのでVS2005のメニューのような色に変更したいのですが 変更方法が分かりませんでした。どなたかご存知でしたら教えて頂けないでしょうか
>>519 RenderMode を System にする
MenuStripを使わないでMainMenuを使う
>>520-521 残念ながらRenderModeでは希望のメニューを作成することはできませんでした。
ツールボックスにMainMenuというのが無かったので調べてやってみたのですが
MainMenuを使った場合も同様でした。
VS2005のメニューそのままを作りたいのですが、無理なのでしょうか。
MainMenuを試したソース
static void Main()
{
Form form1 = new Form();
MainMenu mm = new MainMenu();
MenuItem mi = mm.MenuItems.Add("ファイル(&F)");
mi.MenuItems.Add(new MenuItem("開く(&O)..."));
form1.Menu = mm;
Application.EnableVisualStyles();
Application.Run(form1);
}
MenuStripを使うならToolStripManager.VisualStylesEnabledを偽値に
526 :
デフォルトの名無しさん :2007/05/04(金) 23:30:31
全くのプログラム初心者なのですが visual stadio.NETを使ってC#のプログラムを作成するのは難しいですか? また習得するのにどれくらいの期間がかるものなのでしょうか。
何を作るかによって全く異なるので答えられない
ゲームなんかだと,ちゃんとした数学の知識があるかどうかで全然違う
賢いか馬鹿かによって全く異なるので答えられない
ゲームにそんな高度な数学の知識って必要なの? 行列と、多少の微分不定式程度じゃないかと…
>>526 以前は、非常に難しかったことが
初心者あるいは中級者でもそれなりに出来てしまうのがC#
ただ、プログラミングは奥が深いので10年やっても、
勉強すべきことはいくらでもある
どんなことがしたいかを書いてみたら?
>>530 ってか、ゲーム以外で数学なんて使う分野あるか?
数学はすべての基礎
シミュレーション パターン認識 機械学習 制御 画像処理 etc いっくらでもあるんじゃなかろか 最近では現代数学が必要になってきてるかと
pussy good! once more ぷっしぃ once more ぷ・っ・し・ぃ GOOOOD!
536 :
デフォルトの名無しさん :2007/05/05(土) 05:30:01
数学じゃなくて算数だよその程度の事は。
set theory, topology, category theory ・・・ この時点で算数はないですよ
プログラミングに必要なのは国語 なにをどうしたいかということが明確に表現できることが重要
>>538 言いたい事は分かるが、明確に表現出来ても実装出来なきゃ意味が無い。
机上の空論
絵に描いた餅
現代のプログラミング言語は、 「なにをどうしたいかということが明確に表現でき」ていれば それをそのまま、書けばいい というか、ソレが高級言語だろう。
やりたい事がライブラリでカバー出来てない場合をどうするかだね
なにか変なの沸いてるな。 >526 ぶっちゃけ、プログラムを作るのに数学は必要ではない。大概は算数レベルで事足りる。 上で微分不等式なんて書いてる奴は多分自分で知ってる言葉を並べただけなので安心しろ。 「C# 初心者」でぐぐって、適当なサイトを選んでサンプルとして書かれているプログラムを動かしているうちに なんとかなるもんだ。 アルゴリズムとかデータ構造とかオブジェクト指向とかいう言葉は、慣れてから気にしていい。 ただ、本格的に作り始めるとなるとゲームでもなんでも数学とか他の知識が必要になる。 物理シミュレーションでは当然に、ほとんど数学に縁の無いRPGでもダメージ計算式の設計など確率が絡んでくる。 (確率を考えなくても作れるけど、ゲームバランスは試行錯誤になる)
MDI子フォームを最大化させたときに表示されるメニューバーのアイコンや最小化ボタンを消したいです。 (以下、Form1はMDI子フォームです) 子フォーム側のイベントハンドラで以下のように設定すれば最大化したときに消えますが、 private void Form1_SizeChanged(object sender, EventArgs e) { this.MaximizeBox = !(this.WindowState == FormWindowState.Maximized); this.MinimizeBox = !(this.WindowState == FormWindowState.Maximized); this.ControlBox = !(this.WindowState == FormWindowState.Maximized); } あらかじめ最大化させた状態だと表示されてしまいます。 private void Form1_Load(object sender, EventArgs e) { // 最大化された状態で表示させる this.WindowState = FormWindowState.Maximized; } デザイン時やForm1_LoadでControlBoxをfalseにしても表示されてしまいます。 タイミング間違ってるんでしょうか? WindowsXPsp2、VC#2005expressつかってます。
>532 金融のプログラムでニュートン法使ったなぁ。 電気科卒業してきた新人に式を微分させてみたら微分を理解してなかったよorz
金だな・・・なんでC#なんだか・・・
>>543 試してみたけど、Form1のプロパティのWindowStateが初めからMaximizedになってるんじゃない?
ただ、SizeChangedに置くべきなのかどうか???
StyleChangedに置くと異常動作するしなぁ・・・無限ループをイベント中フラグで弾いても。
547 :
543 :2007/05/05(土) 15:23:04
>>546 むむむ・・・
どのイベントハンドラで処理するのが適切なんでしょうね。
WindowStateChangedがあるかと期待したのにorz
ちなみに Form1_SizeChanged の中をコメントアウトしたら、子フォーム追加時に最大化させておいてもアイコン等表示されませんでした。
(MDI親ウィンドウ側で)
Form f = new Form1();
f.WindowState = FormWindowState.Maximized;
f.ControlBox = false;
f.MinimizeBox = false;
f.MaximizeBox = false;
f.Text = @"";
f.MdiParent = this;
f.Show(); // MDI子ウィンドウを最初から最大化させてもアイコンや最小化ボタンは表示されない(・∀・)
548 :
543 :2007/05/05(土) 15:33:56
よく考えたらあんまり人に優しくないUIだなあ ヤメヤメ
>>543 ひょっとしてやりたいこと勘違いしてるかも知れないけど、こうやったら出来たよ。
理由はよくわからない。
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
this.MinimizeBox = false;
this.ControlBox = false;
}
protected override void OnLoad(EventArgs e)
{
Form pf = this.MdiParent;
pf.ClientSize = pf.ClientSize;
}
>pf.ClientSize = pf.ClientSize; ???
551 :
デフォルトの名無しさん :2007/05/05(土) 16:32:28
>>550 メタファ処理だよ。Cやってる人なら知ってるだろう。
メタファ処理ってなんじゃらほい
変数使われてないとかいう警告を避ける為に 無意味な代入するやつのことか?
"メタファ処理" の検索結果 1 件中 日本語 のページ 1 - 1 件目 "メタファー処理" の検索結果 5 件中 日本語 のページ 1 - 5 件目
>>547 フォームの表示が完了するまでのWindowStateの値が変だ。
なぜかイベントの中ではNormalを返してる。とりあえずフラグで制御してみた。
bool shown_ = false;
public formMdiC1() {
InitializeComponent();
this.WindowState = FormWindowState.Maximized;
this.MaximizeBox = this.MinimizeBox = this.ControlBox = false;
}
private void formMdiC1_SizeChanged(object sender, EventArgs e) {
if (shown_)
this.MaximizeBox = this.MinimizeBox = this.ControlBox
= !(this.WindowState == FormWindowState.Maximized);
}
private void formMdiC1_Shown(object sender, EventArgs e) {
shown_ = true;
}
>>551 詳しく解説頼む
Google先生教えてくれなかった
558 :
デフォルトの名無しさん :2007/05/05(土) 20:58:32
メタファ処理について知りたいのでage
549だけど、 メタファ処理については知らないけど、なんで pf.ClientSize = pf.ClientSize; こんな無駄なことをしてるかはコメントアウトして同じコードを実行してみればみればわかるよ。
プロパティだから無駄なことに見えてちゃんと処理が走っているということかと。
メタファだろうがなんだろうが、ソース(文法上)から意味が読み取れないコードなんて糞だけどな。
PerformLayout()じゃダメなの?
で、どんな意味あるの?
「〜知ってるだろ?」「〜知ってると思うけど」 「〜わかるよな?」「〜わかるよ」 説明できない人はよくこれを使う
コメントアウトして実行してみましたが違いが分かりませんでした どんな意味があるのか教えてください
>>565 まあひょっとするとそういう傾向はあるのかもしれんが、
しかしもし
>>559 について言っているのなら、
それは単に君の「幸せ回路」が発動してるだけだと思うよ。
で、どんな意味あるの?
コンパイル時に最適化されちゃわないの?
get_MdiParentは中で結構いろんなことしてるぞ ClientSizeはほとんど意味無さそうに見えるが
だから何を(ry
プロパティを使用するメリットが分かりません。簡単に教えていただけますか? Test2クラスではプロパティを使ってますが、Test1クラスでも同じ結果が得られますが、 この場合にTest2クラスを使うメリットがよく分かりません。 private void button1_Click() { Test1 c = new Test1(); c.a = 4; c.b = 3; this.textBox1.Text = c.Sum().ToString(); } private void button2_Click() { Test2 c = new Test2(); c.A = 4; c.B = 3; this.textBox2.Text = c.Sum.ToString(); } class Test1 { public int a; public int b; public int Sum() { return (a + b); } } class Test2 { private int a; private int b; public int A { set { this.a = value; } get { return this.a; } } public int B { set { this.b = value; } get { return this.b; } } public int Sum { get { return (a + b); } } }
class Test2 { private int sum; private int b; public int A { set { sum = b + value; } get { return sum - b; } } public int B { set { b = value; } get { return b; } } public int Sum { get { return sum; } } } 例えばこんなふうにTest2の実装を変更しても呼び出し側のコードに影響が及ばない。
574 :
572 :2007/05/07(月) 23:23:10
>>573 呼び出し側に影響の有無だけであって、変更の必要がなければTest1でもOKなのでしょうか?
572が何を知りたいと思っているのかがよくわからない。 プロパティなんてイラネ、と思っていてそれを誰かに追認して欲しいのか。 それとも、フィールドをpublicで公開した場合と等価の動作でいい場合も あえてプロパティを使う必要があるのかどうか聞きたいのか。 あるいは、プロパティの有難みが感じられるようなケースを挙げてくれというのか。
Processクラスを使って或るCUIプログラムのGUIラッパープログラムを作ってます。 そのCUIプログラムでは処理を中断させたいときはEscを押すのですが、 GUIラッパーからはWin32APIも使ってこのようなコードで行うことができました。 SetForegroundWindow(process.MainWindowHandle); SendKeys.Send("{Esc}"); でも標準入出力はリダイレクトしていて何も表示されないウィンドウがあると邪魔なので CUIプログラムのプロセスを起動する前にこう↓してウィンドウを作らないようにしたいのですが process.StartInfo.CreateNoWindow = true; 当然これだとMainWindowHandleが取得できなくなって先の方法が使えません。 何か別のいい方法はありませんか?
ウィンドウ作って見えないようにでもしといたら
で、どんな意味あるの?
582 :
デフォルトの名無しさん :2007/05/08(火) 08:15:06
保守
わざわざ保守とカキコする意味があんのか?
とりあえずcが関係あると思いここに来てしまったです Microsoftで再配布されてるc++のsp1ランタイムをインストールしようと思ったのですが、 コマンドの文法選択が間違ってる的なerrorが表示されます。 これを看破するにはどうしたらいいんでしょうかorz スレ違いでしたらほんとすいません
スレ違い
587 :
577 :2007/05/08(火) 10:08:44
とりあえずWin32APIを使ってメインウィンドウを隠すようにしました。 ShowWindow(process.MainWindowHandle, SW_HIDE); CUIプログラムの起動直後には一瞬表示されますけど。
見える前に消せる
どうやって?
>>2 の無料ダウンロード のISOファイルのサイズが何度DLしてみても
書かれてるサイズと合わないんだけど良いの?
しつこいと嫌われますよ。 レイアウトが実行されるみたいですね。 それだったらPerformLayoutしろって話ですが
593 :
デフォルトの名無しさん :2007/05/08(火) 20:18:14
保守
>>577 試してないので知らんがESC(U+001Bだっけ?)を標準入力に流せば
ええんでないの?
595 :
577 :2007/05/08(火) 20:55:29
596 :
577 :2007/05/08(火) 21:06:17
>SetForegroundWindow(process.MainWindowHandle); >SendKeys.Send("{Esc}"); ちなみに↑の部分は↓でも動作しました。 SendMessage(process.MainWindowHandle, WM_CHAR, VK_ESCAPE, 0);
598 :
577 :2007/05/08(火) 21:18:33
処理を中断すると言ってもCUIプログラムを終了させるわけじゃないので。 後でさらにコマンドを入力して処理を再開させたり別の処理をさせたりします。
599 :
デフォルトの名無しさん :2007/05/08(火) 21:46:25
FOX★公認!!!
俺たちのクリックで日本を一位にしようぜ!!
“30年は日本に手は出せないな”という勝ち方をしたい
http://wwwww.2ch.net/test/read.cgi/news4vip/1178602852/ 1. ポーランド 139,797,680
2. チリ 137,040,439
3. ★日本 86,475,213★
4. イスラエル 80,930,530
5. スロベニア 57,137,042
6. フィンランド 40,857,499
石を投げる戦争から人は進化・進歩を遂げ、剣や槍などの武器をもって戦うようになった
人間はさらに発展し兵器を使う戦争を始めた
そして今、指先一つを武器とした電脳戦争が勃発したのであった・・・
皇国を勝利へと導くには貴様らの参戦が不可欠である
・戦場
http://www.clickclickclick.com/default.asp ・まとめサイト
http://www33.atwiki.jp/clickvip/
コピペ君って馬鹿だな、まで読んだ。
601 :
デフォルトの名無しさん :2007/05/08(火) 22:26:02
C#ってすげーー便利な反面、遅いんだよなぁ すげー良いんだけと、ちょっとかゆい所に手が届かないっていうか C++とC#の中間でネイティブな実行ファイルもはき出せる言語が欲しい
Dをどうぞ
D が完成しさえすれば飛んでいくんだけどなあ。
D は既に 1.0 リリースされてるよ
バカでもプーでもわかるような参考書教えてくれ いままでまったくプログラム経験が無い人向けで 3千円以内くらいのヤツで 初心者はとりあえず手元に置いておけみたいな感じのん頼む
そんなやつはやらない方がいい 他に出来そうなことでもやっとけ
>>602 C++とC#の中間は難しいが CとC#の中間ならDelphiなんてどうだ?
>>605 もう既に最新版1.014は1.0と互換性ないけどなw
普及する可能性が見当たらない言語覚えても業務では使えないぞ。 趣味で行うなら問題ないけどね。
>>609 mjd?
メジャーバージョンアプでもナイのに互換性なさすぎワロタ
>>610 プログラミング言語なんて覚えるものじゃない。 道具であって使うもの。
業務にどうとか言ってると自分が道具として使い捨てられるだけ。
作ってなんぼ
ここ初心者用じゃなかったのか? 将来の可能性とか語る話題は玄人スレでやればいいじゃん おいだされたの?
.NETやC#の将来ネタは向こうでもやめろ
C#のサイトを回ってコンソールでC#の文法は分かるようになったのですが Windowsアプリケーションはどうやって作ればいいのか分かりません どこか解説サイトなどないでしょうか?
本買ったら大抵書いてあるよ
やっぱり本買うべきですか 何かお勧めの本があったら教えて頂けませんか?
>>617 俺的には
Wroxシリーズがいいかな?
外国の書籍の翻訳なんだけど基礎からシッカリ書かれてるから
殆どが腐った内容の国内本とはわけが違う
ただそのぶん高いんだけどな・・・・
本なんて買わない人もいる。 VC#EE落としてデザイナで遊んでれば分かるようにならないか?
俺もデザイナで遊んでてわかるようになった てかC#はGUIから始めたから後でCUIプログラム作るために独習C#買ったくらいだ
ListView(Detai)をFormに置いて、データ表示させることができたんですけど、 カラムの幅をマウスで動かすと、ウィンドウ全体を描写しているみたいで、 ちらちらします。 例えば、エクスプローラの表示形式を詳細にして、 同じようにカラム幅を変えても、そんなにちらちらとしないんですけど、 どこか設定やプログラムをしないといけないのでしょうか?
ダブルバッファリングしてる?
623 :
617 :2007/05/09(水) 22:23:58
>>618-620 ありがとうございます
とりあえず色々いじってみてわからなかったらWroxというのを見てみたいと思います
624 :
デフォルトの名無しさん :2007/05/09(水) 23:32:10
Javaを使ったオブジェクト指向設計開発歴7年の自分がC#を勉強しようと思います。 オススメの書籍を教えてください。
独習C#
開発暦7年もあるなら人に聞かなくてもお勧めの書籍位、自分で探せるだろ
Javaしかやったことないの?
>>623 インテリセンス
ツールチップ
デザイナ
自信持ってエキスパートと言えるのはJavaのみ。 WEBを中心にやってたから関連するHTML,JavaScriptも人並み以上はいける C,PHP,Perl,VB6は少しやっただけ。機会があまりなかった。 しかし勉強してすぐに身につける自信はある
そうですか。
それだけやってたら、書店でいくつか本をめくれば、 どれがいいとかすぐ分かるんじゃないの?
VC#いじっとけばすぐできるようになるでしょ。 ネットで入門サイト見たりソースコード拾ってきたりしてさ。 クラスライブラリの把握は時間がかかるだろうけど、基礎の習得には1週間もかからないと思うよ。 自分はC#からJavaに進んだけど、違いがあんまり無いから一方ができれば本は買わなくてもいいと思ってる。
633 :
デフォルトの名無しさん :2007/05/10(木) 01:11:05
はじめまして。ど素人です。 インターフェースって何のためにあるのでしょうか? メソッドの宣言をするだけなのでしょうか? いろんなフォームに同じような機能を持たせたいときに、 インターフェースに宣言しておいて、各フォーム毎にそれを実現するための 似たようなコードを書かなくてはならないのでしょうか? いろんな機能をまとめたフォームをいくつか作ってそれを継承させようと思ったのですが、 いろいろ調べても多重継承を避けるためにインターフェースを使えと書いてあります。 しかしながらいま一つ宣言だけをするクラスを作る利点がピンときません。 どなたか「こういうふうに便利だよ」って説明してください。 よろしくお願いします。
634 :
デフォルトの名無しさん :2007/05/10(木) 01:17:59
文字コード変換で詰まってしまいました string s = "ABCDE"; s.Replace("CDE","345"); textBox1.Text = s; int i = s2.IndexOf("CDE"); MessageBox.Show(i.ToString()); これを実行すると本当は"AB345"と表示して欲しいのに"ABCDE"と置換されないまま表示されてしまいます メッセージボックスには"2"と表示されます なぜなんでしょうか?
s = s.Replace("CDE","345");
どこが文字コード変換なのかと
>>635 様様様様
うがぁぁぁあ
うまくいきました
>>636 さん
ネット上のurlファイル?を読み込んで、改行コードを変換することろで悩んでたんです
文字コードは変換できてたんですが、改行がぐちゃぐちゃになってたので。
解決できました。ありがとうございましたm(_ _)mフカブカ
>>633 例えば、何らかの文字列を扱う処理が必要になったとする。
そこで必要になるのは、簡単のため、先頭から順に 1 バイトずつ取得していく処理のみとする。
その文字列は、普通の string の場合もあれば、ファイルだったり、Web 上のファイルだったりするとする。
そういう場合、文字列がどこからどういう風に来るかは一旦考えず、
public interface IStream { public char getc(); } というインタフェースを作っておいて、
この IStream を使って目的の動作を記述しておく。
例えば、送られてくる文字をそのまま出力する処理を書いたとする。
void display(IStream stream) {
char ch;
while((ch = getc()) != 0) {
Console.Write(ch);
}
}
すると、あとは IStream を実装したクラス StringStream, FileStream, HTTPStream などを作って、
それぞれで文字列、ファイル、Web から 1 バイトずつ取得するような getc を実装してやれば、
文字列がどこから来るかに関わらず、文字列を表示する処理 display を利用する事ができる。
display(new StringStream("hoge"));
display(new FileStream("test.txt"));
display(new HTTPStream("
http://www.google.com/ "));
IStream を通して処理を書けば、文字列のやってくる場所ごとに文字列を表示する処理を書く必要がなくなり、
汎用的に処理を記述する事が出来る。
多重継承を避けるために、クラスにしたいけどやむなくインタフェースを使うって事はあるけど、
それは仕方なしに使ってる部分が大きい。
そりゃ面白い質問の仕方だなw
>>633 基本的には、継承の置き換えだから
利点もほぼ同じと思っていいんじゃない?
・ポリモーフィズムとしての役割があり、その利点も同様
・インスタンスではなく、インターフェースの授受により、余分なものを見えなくすることが出来る
(カプセル化)
・インターフェースで実装される内容が美味く統一されていれば、読み手は一律
同様な機能として理解が早い(可読性)
C#でDirectXゲーム作成してみようと思っているんですけど、 参考になるようなプログラムありませんか?
何のライブラリを使うんだ?
>>638 さっそくありがとうございます。私がものすごくたくさん勘違いをしているようで整理がつかないのですが・・・
インターフェースには処理はかけないと理解しているのですが、
>例えば、送られてくる文字をそのまま出力する処理を書いたとする。
この文章以下のコードはインターフェースの中に書くのでしょうか?
そしてそれをクラス StringStream, FileStream, HTTPStreamで呼び出せるということでしょうか?
それぞれのクラスがdisplay()というメソッドを持つというのは理解できるのですが、
やはりその処理はそれぞれのクラスに記述しているのでしょうか?
> 汎用的に処理を記述する事が出来る。
とはインターフェースの中にも処理が記述できてそれを引き継いだクラスには
書かなくてもよいということなのでしょうか?
>>639 そもそも用途が間違ってるのでしょうか・・・
>>640 継承は基底クラスのメソッドをサブクラスに記述しなくても呼び出すことができ、
さらにサブクラス独自のメソッドを追加できることだとおもっちます。
よく使う処理を基底クラスにまとめておいて、特別なメソッドだけをサブクラスに書けばよいのかと・・・
> ポリモーフィズム
638さんの説明されていることと同じでしょうか?
>みえなくすることができる
そもそもインターフェースとは宣言だけでなにもないものだと理解しています。
何をみえなくすることができるのでしょうか?
>可読性
同じインターフェースを持つクラスはかならず同じメソッドをもっているということですね?
これは理解できます・・・ありがとうございます。
644 :
641 :2007/05/10(木) 02:20:20
3Dゲームの作成を考えていますけど、XNAだとマウス操作を受け付けないので MDXを使用するつもりです。
>>643 IStream に処理は書いてないでしょ。
>public interface IStream { public char getc(); }
ほら。
getc は StringStream, FileStream, HTTPStream の方で実装する。
>それぞれのクラスがdisplay()というメソッドを持つというのは理解できるのですが、
いや、display というメソッドは持たない。
display というメソッドは全く別のクラスが持つことになる。
>>643 おお!私が何を勘違いしているのかがわかってきました。
StringStreamクラスはStringStream専用のgetcのコードが書いてあるのですね?
さらに質問で申し訳ないのですが、この例で
void display(IStream stream) {
char ch;
while((ch = getc()) != 0) {
Console.Write(ch);
}
}
は
void display(IStream stream) {
char ch;
while((ch = stream.getc()) != 0) {
^^^^^^
Console.Write(ch);
}
}
ということでしょうか?streamには StringStream, FileStream, HTTPStreamの
どれでも指定できるということですね?
重ね重ね申し訳ないですが、よろしくお願いします。
>>643 まあ、最初から全て理解は不可能ですので、頭の片隅にでもおいておくのがいいかも
今後、いろいろなサンプルを見ていれば自然と分かることだと思います。
>638さんの説明されていることと同じでしょうか?
一部同じといった方がいいかも
自分もどこまでポリモーフィズムについて理解してるのか自信ないので、
『ポリモーフィズム 利点』とかでぐぐって見てください。
結構奥が深い物です 多分 ^^;)
>何をみえなくすることができるのでしょうか?
派生クラスは基底クラスにキャスト出来るのは知ってますよね
基底クラスで受け取った場合は派生クラスの全てが見える訳ではなく基底クラスの部分のみが見える。
同様にインターフェースで受け取ることも出来(例えばメソッドの引数)、その場合インターフェースで
定義された物以外は使えなくなる。
>可読性
638さんの書かれている内容もそうなんだけど。
違う物(異なるクラス)を同じような扱い(機能)が可能となる(つまりポリモーフィズム)
違う例でいえば、図形で□とか○とかあって、そのクラスは個々違うんだけど
拡大とか縮小とかいうインターフェースを使った場合。
インターフェースを見れば、違うクラスでも同じような役割を果たしているはずだから
中身を知らなくても大枠その役割は理解出来ますよねー
名前から分かるといわれるとそれまでですが…
まあ、インターフェースの場合メソッド群ですので、その部分をちょっと強調してみたと理解してもらえば
>>643 ごめん一部答えてなかった。
>継承は基底クラスのメソッドをサブクラスに記述しなくても呼び出すことができ…
うん、これは継承の重要な役割だけど、その一部です。
たぶんだけど、デザインパターンの本で継承とかの具体的サンプルに当たって見るのがいいかもね
既にオブジェクト指向の本を読んでいるのであればだけど
人によってデザパタは役に立たないという人もいるけど、
自分的にはオブジェクト指向を理解する早道だと思うし、役に立つと思う
650 :
646 :2007/05/10(木) 06:40:48
>>647 ,648
細かなご説明ありがとうございます。
そこらの本よりも詳しくわかりやすく教えていただいて感謝です。
継承=コードの省略というように短絡的に考えず、
もっといろいろ調べてみます。
>>649 済まないどころか、わかりやすいサンプルで説明してもらった上に、
よい問題にもなりました!
まだまだ私は勉強が足りないようですが、
皆様を目標として頑張りたいです。
ありがとうございました。
インターフェースの利点: 上に書かれてることに含まれるちゃあ含まれるんだけど 粗結合や部品化の観点も強調した方がいいかな まあ、使い方によって様々な利点があるってことね 粗結合:インターフェースの実装側のソースが変わっても、利用側は変える必要がない ソースがぐちゃぐちゃにならないのでわかりやすくなる 変更に強くなる 部品化:内部の詳細(インターフェースの実装)に立ち入らなくてもいいため わかりやすく、使いやすい。 ただ、こういった利点を享受しようとするには、インターフェースの切り方が非常に重要
ハナからインターフェイスつかうか 継承使ってShadowsするか 結構悩む時がある俺
ライブラリーの作者の視点が抜けてるな。 インターフェイスのコンセプトは一言で言えば契約じゃないの? これのおかげで、ライブラリを作った時点では存在してもいないクラスを 操作するライブラリが作れるわけだ。 っていうか、インターフェイスについて最初に質問した人に言いたいけど、 机上でゴチャゴチャ考えるよりライブラリのインターフェイスを実際に使ってみて その有難みを体感するのが一番てっとり早いと思うよ。
IEnumerable なんかは、知らず知らずのうちに多大な恩恵にあずかってるな。
IDisposable なんかもなwww
656 :
601 :2007/05/10(木) 13:28:45
すいません。おまえらのつまらない話どうでもいいので、 私の質問お願いします。
我々には難しくて回答不能なので、よそで聞いてください
658 :
デフォルトの名無しさん :2007/05/10(木) 14:36:34
>>656 貴方様にはかないませんのでさっさと出て行ってください
こぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉんのカスがぁ!!!!!!!!!!!!!!!
>>644 なにを勘違いしたか知らんがXNAはマウスもキーボードも普通に使えるぞ
試してみてXNAが動くならXNAにしとけ
660 :
659 :2007/05/10(木) 15:38:13
XNAスレを見てみたら
97 名前:名前は開発中のものです。[sage] 投稿日:2007/05/10(木) 14:08:03 ID:8Ube6/hf
XNAはマウス入力を受け付けないという記述を見つけたんですけど本当ですか?
100 名前:名前は開発中のものです。[sage] 投稿日:2007/05/10(木) 14:13:05 ID:CC1a0ZQh
>>97 Xbox360 では使えない。 Windows だったら Microsoft.Xna.Framework.Input.Mouse.GetState() でステートを取得可能。
これを勘違いしたのか
>>572 いないだろうけど、その内容だとほとんど利点はない。
大事なのはプロパティにアクセスしたときの処理が書けることだ。
人には勧めないけどプロパティ内でデータ接続のチェックをして未接続なら接続してから
データの更新といった処理もかける。
俺はc#がjavaより優れていると実感しているのはこの点。
アレ?もう導入されたんだっけ?
初心者ってゲーム作りたがるよな しかしその殆どはプログラミングテクニックより、自分のゲームのアイディアに才能ない事に気づく 枯れた業種だから所詮、プロ集団のアイディアには敵わない 大風呂敷広げるより、まず初めはちょこっとした便利なもの作ればいいのに・・・
作りたくないもの作るよりは 作りたいもの作った方がいいと思うぜ。
処理速度がどうのとか言うやつに限って、妄想ゲームプログラマー。 実際できもしないのに。
ゲームいいと思うよ。 テーブルゲームみたいなのでもいいし、アクションゲームでも。 革新的な奴は商業プログラマがやっとけばいい。
グラフ描画モジュール作りたいんだけど、 現実世界のグラフでは基点が左下なんだが、 C#だと基点が左上からなんで、難しいんですが ポイント算出を楽にする何か方法ありませんか?
>>666 何を悩んでるのか解らん。
グラフ描画モジュールを作ろうなんて奴が、単に座標の変換が難しいなんて言うわきゃないしな。
scale変えたらいいんじゃなかったっけ?
>C#だと基点が左上 N88-BASICから出直して来い
Graphics.Transform だった。
Graphicsの座標を直接いじるより 座標変換クラスでも作って間に挟んだ方がいいと思う
曲線座標系とか対数座標とかじゃね?知らんが
>>666 藻前は数学でなく、算数をやり直してこい
Mac だと基本的に左下が基点なんだよなあ。
コントロールのXYの始点高さ幅がわかりゃ 好きに変換できるだろ・・・つうか釣りじゃねーの?
>>674 673じゃないけど、組み込みの座標変換使うと変換前の座標系も
強制的にfloatの精度になるのが気になるね。
実用には耐えないと思った方がいいな。
10000.000と10000.001が同じ位置にプロットされることを回避できないわけだ。
クラスを間に挟まなくても、引数に数値を設定したら座標ポイントを 戻すメソッドを定義すればいいだろう。 何を難しく考えている?
そういう時、普通は差し替えられるようにクラスにするだろ。
>>680 素人考えだと画面の解像度考えると十分なような気がするんだけど
もっと精度が必要な場面てどんなとき?
グラフだから拡大すればそういうことも
別に座標軸の始点が0である必要はないんじゃね?
>>683 グラフの原点は必ずしも画面中にあるとは限らない。
例えばx軸の左隅が10,000で右隅が10,000.01のようば場合を想定したら
起こりうる問題を想定しやすいんじゃないかな。
折れ線だけなら関数でよさそうだけど
サブフォルダを取得しようとすると 'System.UnauthorizedAccessException' の初回例外が mscorlib.dll で発生しました。 のエラーをcatchしてしまうんですが、アクセス不可のフォルダとかスルーできないんでしょうか?? string[] subFolders2; Try { subFolders2 = System.IO.Directory.GetDirectories("C:\WINDOWS", "*", System.IO.SearchOption.TopDirectoryOnly); }
ワロタおれもだよw
>>689 第一引数のディレクトリにアクセスできる権限さえあればその直下のディレクトリ名の取得は問題ないはず。
AllDirectories は諦めて自前で再帰するしかないだろうけど。
string[] a={0,1,2} string[] b={3,4,5} string[] c でcの中を{0,1,2,3,4,5}と複数の配列を結合させた配列にするにはどうしたらいいの? 一つ一つループで回して代入するしか無い? 配列の配列数を取得するにはどうやるの? a.lengthでは取得出来ない
c = new string[a.Length + b.Length]; a.CopyTo(c, 0); b.CopyTo(c, a.Length); ちょっとはMSDN嫁
教えてくんよ。javascript程度ならjavascriptやってろ。
>>696 javascriptで出来ないことがあるだろが
>>680 こいつは単なる馬鹿
言語以前グラフの目的を分かってない
質問です。 以下のようなコードを書いたのですが、 //test.exeが実行中で、それが終了したらファイルを消す Process[] p = Process.GetProcessesByName("test"); if (p.Length > 0) { for (int i = 0; i < p.Length; i++) { if (p[i].StartInfo.FileName.Equals(Application.StartupPath + "\\test.exe")) { p[i].WaitForExit(); break; } } } File.Delete(Application.StartupPath + "\\test.exe"); このように終了するまで待ってからファイルを消しても数秒後にtest.exeが復活してしまいます。 これを回避するにはどうしたらいいでしょうか?
Vista か。それとも XP か。
システムファイルを消そうとしても復元されるよ。
あと、test.exeを多重起動してたら、一個終わっだけでbreakするのはどうかな? ともかく、exeを操作(コンパイル・消去・内容変更)するのは怖いからヤメレ ド素人が罠プログラム作ろうとしているようにしか見えん・・・
アセンブリ全体で使える変数を宣言する場所はどこですか?
クラスの中
オブジェクト指向はカプセル化が前提だから、グローバル変数は必要ない。
[マイコンピュータ]-[プロパティ]-[詳細設定]-[環境変数]かな?
709 :
705 :2007/05/12(土) 12:57:40
クラスの中でinternalとかすればいいんですか?
>>704 グラフはあくまで人が見て分かりやすくするツールじゃないの?
実用もなにも、それ以前にそんな精度でプロットできる機器なんかあるの?
>>710 だから、例えばx軸の原点が必ずしもグラフの左隅にあるとは限らないといってるでしょ。
グラフがわかりにくいなら地図で考えたら?
Google Earthを考えてみ?
ズームインしていったら実際には1Km離れている二つの建物が同じ位置に
プロットされていたらおかしいと思うでしょ普通。
floatの精度ではそういうことが起こりうるわけ。
712 :
700 :2007/05/12(土) 13:59:35
>>702 ,703
システムファイルではなく、ソフトのファイルアップデート用exeなのですが、
DOSにkillコマンドがないため、exeを生成して、それを使用するようにしています。
そしてこのexeを使用後に消そうと思って
>>700 のコードを書いたのですが…
ということなので、悪戯ソフトでもないです。
>>711 プロット用に座標変換したデータを再利用するなよw
GoogleEarthみたいに簡略化や抽象化するときは特に困るだろ?
元となるマスタデータは常に保持しとけw
714 :
700 :2007/05/12(土) 14:01:14
>>712 killするのはアップデートするソフトです
>>711 藻前は老人の様な頭だな・・・
1つしか考えられないのか
つうか、
>>713 の言うとおり
元のデータの精度がちゃんとしてれば
変換がfloatでも大丈夫だろ・・・・
>>710 俺は711じゃないけど
graphicsの機能の座標変換だけじゃ誰かか書いたとおりで、
>実用には耐えないと思った方がいいな。
>10000.000と10000.001が同じ位置にプロットされることを回避できないわけだ。
たとえば10000.000から10000.010までがx軸いっぱいに拡大して表示されると困ったことになるよ。
>>711 藻前の言ってる事は思いつきだろ
地図なんて個人ではどうにもできんから地図ソフトのSDKを買ってきて組み込む事になる
座標入れればちゃんと出てくる、それより2点以上の地点のアイコンを張った場合詳細図はOKだが
広域表示に場合アイコンが重なってしまうので、それを見やすい様に離す座標変換が問題になってくる
>>717 だから、それは座標変換後の再利用じゃん
元データから、10000.000から10000.010までがx軸で表示される表示座標系に一発変換しろよ。
元データから、計算誤差、桁落ちする座標系に一度変換する理由はなに?
>>713 ,
>>716 ,
>>718 全然話が読めてないね。
>>717 が書いてくれてるけど、元々の話はグラフをプロットする際の
座標変換にGraphics.Transformを使った場合に起こりうる問題について、なんだよ。
その辺理解してるのかな?
計算精度ができるだけ正確に行うプログラムを書くことは常識だな。 丸め誤差、桁落ちは最大限抑えるべき。 基本情報技術者で勉強しただろう?
723 :
717 :2007/05/12(土) 14:37:53
頭悪いかどうかじゃなく、文脈が読めてないだけだと思うが。 少数民族同士仲良くしようぜw 語尾にじゃんってつける奴って間違ってること多いな。 同一人物か?
>>717 同一人物だよ。
元データから、計算誤差、桁落ちする座標系に一度変換する理由はなに?
教えて。
おまえには関係ないじゃん
>>724 そう、桁落ちする座標に一度変換するなんてばかげてるでしょ?
だからGraphicsに組み込まれた座標変換機能は使えない、ってことよ。
君は噛み付く相手を間違えてないか?
一番の拡大図で誤差が出るなんて言ってる香具師は頭の中だけで考えてる香具師 問題になるのは広域表示時の誤差、逆なんだよ実際にプログラム組む時に分かるよ まぁこの話はここでする事自体間違ってる気がするが
>>726 ごめん。誰が誰だか分かんない。
元データから、10000.000から10000.010までがx軸で表示される表示座標系に一発変換するときに、
Graphicsに組み込まれた座標変換機能を使ったら何も問題ないよ。
というか、そのためのものでしょ。
>>728 問題あるってw
10000.000から10000.010の間に仮に1000pixelあるとして、
floatの精度で10000.000 + (0.01 / 1000)の値を表現できるかい?
つうか座標変換した後のプロット位置のデータを使って何かしようとする香具師は馬鹿だろ 融通がきかんぞ
>>732 プロット位置のデータを使って云々なんて誰も言ってない。
そのプロット位置のほうが問題になっているんだよ
日本語読めないやつ多すぎてワロタw
>>733 なら全然問題ないだろ、何を問題にしてるのか全然はわからん
座標変換前に拡大縮小計算して、プロット用座標変換すりゃ良い話だろ
>>731 >元データから、計算誤差、桁落ちする座標系に一度変換する理由はなに?
この理由としての回答なら分かった。
そういう理由で2度座標変換する場合、きちんと見積もって、データ要件、システム要件を厳しくしないと、
たとえ、精度をdoubleにしたって、いつかは破綻するよ。なのでそのへんはトレードオフで。
なので、精度がいる場合は、多少複雑でも元データからの一発変換しかない。
座標変換が単精度って言うことはプロットする側が単精度以上の精度はないって前提の元に作られているはずなんだが なに問題にしてるか全然わからない、元データ倍精度で持って、変換前倍精度で計算すりゃいいだろ
うん。 多分みんな分かってるんだろうけど日本語が下手なだけだと思うよ。
>>738 日本語力なさ杉だろ。
Graphics.Transformがfloatの精度でしか計算しないから、
Graphics.Transformをつかうと桁落ちする場合がある、という話をしているんだ。
デザイナ変数って何ですか?
ID欲しくなるね
2度の座標変換をGraphics.Transform一回で変換するスキルのない奴が Graphics.Transformが使えないとわめいていただけ。 スキルのある人にはそれが理解できなかったのさ。
1度でも精度落ちるがな
ここで私がC1Chartを猛プッシュですよ
はっきりいって、藻前ら元がdouble精度必要とするグラフなんて描かないだろw 必要があれば、それだけの事するんだから自分で座標変換作るだろ はいはい、この話題はおしまい
その一度は最終出力でしょ。ディスプレイなりプリンタなり、小さな液晶だったり。floatで十分。
昔CAD作ったときにその辺は勉強した。 正直言うと元座標もプロットも初めintでやってた。 当然回転とかさせると図形がどんどん壊れていった。
この流れグレープシティ社員の自演じゃね?
昔シュミレーションゲーム作ったときその辺は勉強した。 正直言うと元座標もプロットも初めAレジスタでやってた。 当然サインコサインはおろか乗算命令すらないので、回転すらできなかった。 自分が壊れていった。
座標なんて ・マイナス値のオフセット計算 ・位置変換 ・画面サイズに合わせる比率計算 だけだろ、そんなもん算数レベル自分で計算汁
最近は分数ができない大学生がいるとか。
>>753 去年ソフトウェア開発者の試験会場の大学行ったら、
壁にテストの模範解答が貼ってあった。
そのテスト内容は初歩の分数の問題だった。
間違いが多いところにコメントが書いてあったが、約分や割り算ができてないみたいだった。
ちなみに経済学部…
大丈夫か日本?
テストの模範解答って校内テストのだよ。ソフ開の模範解答じゃないよ。
経済学なんて数学できなかったら卒業きつくないか?
その大学の経済学部の人間は日本を担わないから大丈夫だろう。
問題ないって言ってるやつ頭悪すぎ。 突っ込みどころが最初からずれとるわ。 変換する機能がfloatしか受け付けないのが問題なわけ float以上の制度のデータを「渡せない」の だから渡す情報がfloat以上の精度が必要な場合は使えないわけ 変換を自分でやるなら問題ないの。 だから変換機能をそのまま利用したくても、 場合によってはそれだけではできないっていってんでしょ。 だれだ、自分でやったらいいだろとかいってるやつは。 自分でやらざるをえないって話をしてるのに。 ってなんで通じないんだよ。 一回冷静に頭リセットしてみろよ。
Aを使えばいいじゃん。 ↓ これこれこういうときにはAは使えない。 ↓ 使えるだろ何言ってんだ(勘違い、ほんとは使えない)。 ↓ いやだから使えないって(以下ループ) Aを使えばいいじゃん。 ↓ これこれこういうときにはAは使えない。 ↓ 自分でやったら問題ないのにA使おうとするのが馬鹿だろw ↓ …
>>712 ということは、自分で起動したプロセスなのかな?
File.Copy("Test6.exe", "Test6Sub.exe");
Process proc = Process.Start("Test6Sub.exe");
proc.WaitForExit();
File.Delete("Test6Sub.exe");
じゃダメなのか?
764 :
デフォルトの名無しさん :2007/05/12(土) 21:21:01
>>760 頭の悪いのはおまえ。
第一Graphicsクラスのメソッドで、なんでdoubleの精度が必要なんだ?
仮にdoubleにしたところで、何度も座標変換や拡大縮小したら、簡単に破綻するじゃねーか。
というか、そんな実装したのみたことねーよ。
今まで書いたコードの100倍コード書けば自分の間違いが分かるよ。
自分でastronomyクラスでも書いて使え。
もう放っといていいよ。
悔し紛れとかでネタでいってるのかとも思ったが、
どうやら
>>765 みたいなのって本気で問題が理解できないのな。
いやいや俺が絶対正しいよ
769 :
デフォルトの名無しさん :2007/05/12(土) 21:51:32
唯一ただしいのは俺とジョンだな
>>765 なに言ってんだこいつは…
わざとか?それとも本物か?
>>765 だから最初からAPIだけじゃだめって話だろうに。
だれもそれ自体否定してないだろうに。
流れ読めよ。
もう相手するなよ・・・
つまり、コメに般若心経をプリントしたい時はfloatではダメだって事なんですね
みんな明日までに、代数幾何を復習しとくように。
いやいや日本語の勉強だよ。 まあ一部本当に分かってないやつもいるようだが。
まだ座標変換の事でもめているのか・・・ 殆どの香具師はdouble精度なんか求めないから標準なんてfloatで十分過ぎる 逆にdouble精度を求める大規模プログラムを書く香具師は高速化、誤差が重畳しないように 自分で座標変換を自分で作る、もめても意味ないんだよ
>>778 そんなことで揉めてるわけじゃないんだけどな
だから俺以外の全てが誤りなんだって
来年のセンター試験の国語の問題でこのスレ出るから。 どれとどれが同一人物の書き込みでしょう? ヒント)このスレには二人しか書き込みしてません。
二人なら自分で書いたのとそれ以外なんだから、簡単だろw
俺がお前でお前が俺で
問題解くのはゆとり学生どもだ。
>>781 つうか何もめてるんだか意味わからない
初心者がdouble精度の座標変換が必要なプログラム組むか?
788 :
デフォルトの名無しさん :2007/05/12(土) 22:28:43
俺だよおれ! 振込よろしく
ゆとり世代がfloatでなくdoubleを要求してたら笑う。 円周率が3なのにw
>>787 わからんのはお前が日本語力不足なだけだろ。
double精度が必要だなんていう話はしてない。
>>789 不動小数点でなく別にintのピクセル値での変換で十分な気がする
ここが初心者スレということを忘れすぎ。 初心者は計算に使うデータと表示するデータは同じだと思ってるもんだ。 >680 コンピュータに留まらず、計算精度と表示精度は違う。 計算に使うデータは例えば多倍長整数とか使ってでも必要な桁数を確保しているものだ。 それを、表示する時には、表示して意味のある精度(この場合はGraphicsだからfloat)に「丸めて」使う。 どうしても違いを表示させたい場合は縮尺と原点を調節して表示しなければならない。 >10000.000と10000.001が同じ位置にプロットされることを回避できないわけだ。 この場合、その差を表したかったら、例えば縮尺1000倍で原点を10000に取って表示させる。 GoogleEarthとかでズームインしていくように。 この辺を分かっている人間が「座標変換でいいんじゃね?」と言っているグループ。
>>787 初心者に難しいこと言っても無駄。
ここはひとつ、ぎゃーてーぎゃーてーはーらーぎゃーてーと唱えよう。
そもそも、地球規模から隣の山田さん家の犬小屋までズームインする プログラムなんて初心者はつくらん
日本語でもめてるんだよ。 座標変換自体でもめてんのは、一人本当に分かってないやつがいただけだよ。
797 :
デフォルトの名無しさん :2007/05/12(土) 22:35:53
1 このスレッドは 「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
むしろ、それを作ろうと考えるのが初心者くおりてぃ。
>>792 今は、
>>787 のように何度でも論点のずれた話題を持ち出してくるやつがいることを問題にしてる。
800 :
デフォルトの名無しさん :2007/05/12(土) 22:37:39
誰かが【優しく】レスをしてくれるスレッド」です。 や・さ・し・く!
エロ動画でHDD満タンなのに、地球規模の情報を犬小屋レベルの詳細さで持てるわけがない!!
藻前ら寂しいんだろ・・・・
>>793 おいおいまだわからないのか痛い奴だなあ。。
だからGraphicsの座標変換機能じゃそんなことは原理的にできない、
といっているのに。。。
804 :
デフォルトの名無しさん :2007/05/12(土) 22:43:23
俺だよおれ、おれおれー
グラフってそんなに精度を必要とされるようなもんなのかね。
>>803 Graphicsのそのメソッドは元データの計算精度を表示精度に変換するメソッドだよ〜。
大学出てる〜? 原理的ってなんの原理〜? 学術用語で説明してよ〜。
学術用語で説明してくれたら論理ミスすぐわかるから〜。
>>806 馬鹿なくせに学術用語とか言わない方がいいよ。背伸びでもね。
>>760 が必要十分な説明をしてくれてる。
これ読んでわからないならもう何もいうことはないよ。
最初から理解するだけの頭がないのだ。それなら。
今から、ここは中卒オンリーな。 ↓中卒一人目。
↓中卒二人目。
↓一応中卒?三人目
-------------------------- 統計終了しました。 結果 中卒 2人 修士or博士 残りの人
オレオレ4人目
おれ大学中退……
おれ中学中退…
815 :
700 :2007/05/12(土) 23:49:36
なんか流れをぶったぎって申し訳ないきもしますが…
>>762 >ということは、自分で起動したプロセスなのかな?
そうなのですが、先程
>>762 のコードのようなことをするのではなく、
リソースからexeをコピー
↓
実行
↓
起動元をリソースからのexeがkill
↓
ファイルのアップデート
↓
元を起動
↓
リソースコピーexeが終了するまで待つ
↓
リソースコピーexeを消す
と言う流れなのですが、一番下で躓いています。
ぶったぎっておk というかこの流れにはうんざりしてるからむしろ歓迎
>>815 日本語で主語が省略できるときは、前の文脈と主語が同じとき。
主語が代わっているのに省略するから、わかりにくい。
でも、見る限り問題なさそうだけど。releaseのexeでもやってみた?
>>700 関係ないが、文字列の比較は==でいいだろ。Javaじゃないんだ。
グラフは計算精度は重要だぞ? プロットされるのはピクセル単位だからint型で十分だが、 その前の演算処理では、演算途中で計算誤差(丸め誤差や桁落ち等) が起ると演算結果が大幅に変わる場合がありうるから できるだけ計算誤差が発生しない計算順序や型が要求される。
820 :
デフォルトの名無しさん :2007/05/13(日) 00:20:11
初心者ですが少数はなんの型をつかえばいいんですか?
いい加減グラフと計算精度ってスレでも立てろ
822 :
デフォルトの名無しさん :2007/05/13(日) 00:22:58
Form1の上でマウスのホイールを回したときのイベントを使用したいのですが、 Formイベントにはそれらしいのが見当たりません どうすればいいのでしょうか? また、参考になりそうなサンプルとかのあるサイトを知ってる方がいたら教えてもらえるとありがたいです よろしくお願いします
824 :
700 :2007/05/13(日) 00:52:42
>>817 exeファイルはreleaseでビルドしたものです。
>>818 java上がりではないのですが、手持ちのC#のコーディング規則の本にはEquals使えと
書いてあったのでそれに従ってみたのですが、やっぱり見づらいですかね?
どの本?
>コンパイラの型チェックの恩恵を受けることができない。 むしろ==の方が…
String.Equals()のオーバーロードのことも思いだしてあげてください
>>824 あなた単体テストしてませんよね。
p[i].StartInfo.FileNameに値入ってないですよ。。
デバッガ使って、自分で単体テストぐらいしてくださいね。
p[i].MainModule.FileName
>>823 様
ありがとうございます
早速ちょこっとやってみました
動きませんでした orz
this.MouseWheel ってイベントは見つけたけど Form1 のイベントに MouseWheel が無いのが原因なんでしょうかねぇ・・
単純に
public partial class Form1 : Form{}の中に↓を貼り付けてみたんですがピクリともしませんでした
private void Form1_MouseWheel(object sender, MouseEventArgs e)
{
MessageBox.Show("マウスホイール");
}
private void Form1_MouseEnter(object sender, EventArgs e) { this.Focus(); }
ヘルプを調べても
AxHost.MouseWheel イベント
このイベントは、.NET Framework インフラストラクチャをサポートします。・・・(略
MouseWheel イベントは、AxHost クラスではサポートされません。
public event MouseEventHandler MouseWheel
この程度のことしか載っておらず自分でも色々調べてやってますが、どこが悪いのか理解不能です
出来れば助けてください。
>>830 WndProcをオーバーライドするんだよ。書いてあるだろ。
>>830 Form1()コンストラクタの中に追加しろ。
this.MouseWheel += new MouseEventHandler(this.Form1_MouseWheel);
ていうか、baseのイベントに登録して受信する必要はないでしょ。 Form継承してるんだから。 protected override void OnMouseWheel(MouseEventArgs e) { base.OnMouseWheel(e); if (e.Delta < 0) { Console.WriteLine("Wheel roll down"); } else { Console.WriteLine("Wheel roll up"); } }
>>832 様
入れて試してみましたがダメでした
>>831 様
簡単にサクッといかないかと思ってまだ試してません
明日あたり調べてやってみようかと思います
自分でメッセージを見て、イベントを発行しないとだめなんだって・・・
おれは2分でサクッといったんだけど。 なんかおれの知らないことがいっぱいあるみたいだな。
>自分でメッセージを見て、イベントを発行しないとだめなんだって・・・
もしかして、そゆことですか・・・・・
氷解した気がします
あと
>>833 も今のところ動きませんでした
教えてくださった方々ありがとうございます。
また明日がんばってみます
>>837 動かないって?
ひょっとしてフォームがインアクティブの時にもホイールの動きを
検出したい、ということかな。
それなら確かにFormの、というか.NETネイティブの機能では不可能かも。
このスレ質問そっちのけでグラフの話してて面白いね
イテレータを使う場面を教えてください
座標変換の話は、意地の張り合いになってて技術論になってないから、 初心者用スレだし、ここはひとつ、自分のほうがスキルが高いと思う側が折れてくれないか。
そうやって終わりかけた話を蒸し返す
>>832 の方法で動いたんだけど、
>>833 の
>ていうか、baseのイベントに登録して受信する必要はないでしょ。
>Form継承してるんだから。
これの意味がよく分からないんですが。
普通は OnMouseWheel を ovrerideして実装するものなのでしょうか?
>>844 普通はどっちなんだろうね。
俺はイベントハンドラのoverrideは滅多に使わないけど・・・。
オーバーライドすると元のメソッドが呼ばれなくなるから、
元のメソッドが必要ならオーバーライドしたメソッド内でbase.OnMouseWheel()を呼ぶ必要がある。
まだ座標変換やってたの? 関係ないけどコード書いて実験したぞ。 よくある x 0.0〜1.0 y 0.0〜1.0の直線のグラフだけど。 結論から言うとこれだけでも全画面表示だと、 trans〜は問題ある。 さらに拡大率が1000くらい越えると別の問題がでてくる。
m9(^Д^)プギャーーーッ
>>846 みたいな奴はメンタルがガキだから何言ってもたぶん無駄。
せいぜいできることは、きっとコイツ寂しい奴何だろうなと思って哀れむことぐらいだ。
まあしかし、敢えて書かなかったけど、確かにGraphics.Transformを使うと別の問題もある。
例えばペンやブラシが扁平することだね。
もっとも、あんまり詳しく調べたわけじゃないのでひょっとするとこれには解決法があるのかもしれないが。
いずれにしろかなり面倒なことになるのは確かだろう。
楽をするためにGraphics.Transformを使おうと思ったはずなのに。
ただ試して報告しただけなのにさびしい奴だといわれたorz Graphics.Transformつかうと逆にめんどいことになるな。
だから、そういう目的で使うなと何度も上レスで指摘が・・・
いやそんな精度必要ない、問題ないという馬鹿がいるから試したんだけどな。
Form1()コンストラクタに this.MouseWheel += まで入力すると「挿入するにはTABキーを押してください」って出て、 TABを2回押したら += の後に new MouseEventHandler(Form1_MouseWheel); に続いて void Form1_MouseWheel(object sender, MouseEventArgs e){} が自動的に作成されるんですね。 これでうまく行きました 自分でvoid Form1_MouseWheelを貼り付けたらダメみたいです ホイールマウスで悩んでる初心者が自分以外にもいるかも知れないので、次のレスで今回の手順をもう一度まとめます
【ホイールマウスイベントの取得】 @Form1コントロールにlabel1コントロールを配置 AForm1()コンストラクタにマウスホイールイベントハンドル追加 ※this.MouseWheel += まで入力後TABを2回押すことで、Form1_MouseWheelイベントが自動的にコードに追加される Bthrow new Exception("The method or operation is not implemented.");←をコメントアウト C以下のコードをForm1_MouseWheel内に追加 if (e.Delta < 0){ label1.Text = "ホイール下";} else{ label1.Text = "ホイール上";} D実行 public partial class Form1 : Form{}内のコード全文です↓ public Form1() { InitializeComponent(); this.MouseWheel += new MouseEventHandler(Form1_MouseWheel); } void Form1_MouseWheel(object sender, MouseEventArgs e) { //throw new Exception("The method or operation is not implemented."); if (e.Delta < 0) { label1.Text = "ホイール下"; } else { label1.Text = "ホイール上"; } } 教えてくださった方々有難うございました。
>>851 おまえはスルーって事が出来ないのか?
代理でスレ立ててやろうか?
>>853 VS2005ですか?それともVS2003?
VS C#2005 +Windows2000です
>>857 ありがとう。私はVS2005でコピペでいけたので、どっかでイージーミスがあったのかもしれませんね。
コピペミスっていうより、人の言うとおりちゃんとやってないだけでしょ。
('・ω・`)つ バファリン
ずつーにバファリン♪
バファリンの半分は優しさ以外の「何か」
>>815 >829 の言うとおりStartInfo.FileNameは「既定値は空の文字列 ("") です。」だね。試してみたら確かに空だ。
起動中チェックはMutexで実施するのがいいと思うよ。定番だし多重起動の防止にもなるし。
ステップ実行すれば、すぐ解決するのに、そんなこともせず質問してる人いるんだ。
865 :
デフォルトの名無しさん :2007/05/13(日) 17:35:19
Navigateメソッドで証券会社のHPのログイン画面に進んでIDとPASSを入力してログインするというのを SHDocVw.InternetExplorerを使っていて行き詰まりました。 axWebBrowserだと上手く動くのですが、 SHDocVw.InternetExplorerだと下記のソースでLoginForm.itemがNULLだと言われどうにも困っています。 SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer(); ie.Navigate(URL); //axWebBrowser1.Navigate(URL);←これだと成功する /// 一部省略 /// //IHTMLDocument2 doc2 = (IHTMLDocument2)axWebBrowser1.Document;←これだと成功する IHTMLDocument2 doc2 = (IHTMLDocument2)ie.Document; Login_Monex(doc2); private void Login_Monex(IHTMLDocument2 doc) { IHTMLFormElement LoginForm = (IHTMLFormElement)doc.forms.item("F1", 0); ((IHTMLElement)LoginForm.item("loginid", 0)).setAttribute("value", userID, 0);←ここで怒られる。 ((IHTMLElement)LoginForm.item("passwd", 0)).setAttribute("value", userPass, 0); ((IHTMLElement)LoginForm.item("menuMode", 0)).setAttribute("value", "1", 0); LoginForm.submit(); }
FormのMouseWheelは動くけど、PictureBoxでMouseWheel イベントが動かない。 orz 理由が分からん。
CanFocusがfalseだからでしょ。
>>866 「コントロールにフォーカスがあるときにマウスホイールが動くと発生します」
PictureBoxのMouseEnterにでも
pictureBox1.Focus();って書けばおk
あれだったらその前にformのActiveControlを覚えといて
MouseLeaveでそいつにフォーカス戻すとか
>>867 やっと意味がわかりました。そういう理由だったんですね。
ありがとうございます。
正規表現で躓いてしまいました。 文字列の先頭にドライブレター("C:\"等)があるか判別するために以下のように記述したのですが、 実行すると「パターンの末尾に無効な \ があります。」というエラーが出てしまいます。 原因は何でしょうか。コンパイルはcsc.exeで行ったものです。 因にVB2005EEで同じ事を試したら正常に動きました。 string test = "aaa.txt"; if (System.Text.RegularExpressions.Regex.IsMatch(test.Substring(0, 3), "[a-zA-Z]:\\") == false) { MessageBox.Show("フルパスを指定して下さい。"); }
\ は C# として正規表現として、で二重にエスケープする必要がある
@"[a-zA-Z]:\\"
>>872 "[a-zA-z]:\\\\"だったのですね。ありがとうございます。
C#の場合、例えばEnvionment.GetCommandLineArgs()等で得たファイルパスを正規表現にかける場合はReplace()等で"\"を"\\"に置換しないと駄目だという事も解りました。
本当にありがとうございました。
つか Substring するなよw test が 2 文字以下だったら例外だぜw
877 :
874 :2007/05/13(日) 21:25:15
>>873 C#には逐語的リテラル文字列と言う概念があったのですね…精進します。
>>876 こんなメソッドがあったとは…ありがとうございます。
C#に挑戦→挫折→(数年経過)→VB2005EEで漸く.NETプログラミングを理解する→C#に再挑戦と来たため、文法がVB.NETと混同していました。
何とか頭の中を整理しつつ焦らず勉強していきます。
本当にありがとうございました。
すいません、VS初心者です。 以下の文字列を宣言した場合、「@」にはどんな意味があるのでしょうか? String str = @"text";
\
折角 873 877 が会話してキーワード上げてるんだからそれ調べようよ
> 879 '' や "" の前に @ (アットマーク)を付けると \ とそれに続く文字が エスケープシーケンスとはみなされずに、普通に \ 記号として解釈される ということですね? @"C:\program files\Windows Media Player\wmplayer.exe" としても、コンパイルにエラーにならないということですよね。 ありがとうございます。
>>881 いやいや、
@"[a-zA-Z]:\\"
だけじゃわかんないっしょ。
883 :
882 :2007/05/13(日) 22:00:45
実にくだらない質問かもしれませんが、疑問がぬぐえないのでお聞きします。 だれか俺にArray.GetLowerBound()の存在意義を教えてください。
>>884 C# では意味はないが、配列の下限を設定できる言語もあるのさ。
Array.CreateInstance で作成もできるぜ。使えないけど。
>>882 ドキュメントエクスプローラのキーワードで @ だけでもかなり絞れる。
今回はもっとはっきり出てるけど。
>875 "^[a-zA-Z]:\\\\.*" とか。
>>871 正規表現にこだわらずにSystem.IO.Path.GetPathRootを使うとか。
890 :
666 :2007/05/14(月) 00:49:52
すみません何か私のネタで議論白熱させちゃったみたいで・・>< 結局のところ、Transformは使用せず自分でPointをflot型で返す関数を作れっていいのかな?
>>890 >すみません何か私のネタで議論白熱させちゃったみたいで・・><
そう思うなら何故蒸し返そうとする?
DataGridViewにObject DataSourceをバインディングして表示している。 BindingSourceのfilterを使いたいのだが BindingSource.Filterに条件を入れてもFilterされないし、 SupportsFilteringはfalseになっている様子。 filterを使う方法知らないですか
蒸し返しというか元々質問者そっちのけで盛り上がってたんじゃん もっとはやくでてこい
895 :
デフォルトの名無しさん :2007/05/14(月) 17:46:21
すみませんが教えてください… VWDExpress+C#ですが、 no = (int)Session[keyname]; no = Convert.ToInt32(Session[keyname]); no = Int32.Parse(Session[keyname]); どう違うのでしょうか? google様にお伺いを立てても「違う」「違う結果が出る可能性がある」とは出ているのですが、どんな場合にどんな違いが出るのかがさっぱりわかりません…
パースは対象を変換できるか試行して失敗の場合とかでもエラーが出なかったような気がする
Parseは失敗すれば例外投げるよ
今、DataGridViewの使い方を勉強していまして CheckBoxやButtonやTexteditorを配置して XMLからは読み込めるようには出来たんですが それぞれのcellのCheckBoxやButtonの状態・・・ 簡単に言えばButtonを押してColorDialogを出したいのですが その方法がわかりません。どなたか教えていただけないでしょうか。
>>898 どこからがわからないの?
そのそれぞれのcellのコントロールの取得の仕方がわからないの?
それとも,コントロールは取得できてもそれにButtonを押してColorDialogを出す操作を
割り当てる方法がわからないの?
>>898 イベントの説明みてみ?
セルのボタンを押すとかダイレクトな名前じゃないけどそれっぽいイベントがあるから
>>895 つーかSession[keyname]の型はなに?
たぶんobject だから3つ目はたぶん間違い
キャストしてんだからintだろ。 ってかその前にコンパイル…
C#って通信するソフト限定の言語なんですか?
いいえ。よくわかりませんが。
いいえ
いいえ
必ず通信しなきゃならない言語・・・・・・シュールだ。
オブジェクト間のメッセージのやり取りを通信と見るならアリじゃないか
独習C#買ったけど制御文以降はさっぱり分からない
>>905 多分ダウンロードしてるものがちがう
web用のほうダウンロードしたんだろ?
Visual Web Developer 2005 Express Edition ???
914 :
898 :2007/05/14(月) 23:44:23
>>901 さん
確かに(たぶん?)それっぽいイベントがありました。
で今自分がしたいことは、カラーダイアログを出してそのカラーダイアログを出した
ボタンの表面色をカラーダイアログから選んだ色で着色することです。
で、下のようにやってみたらまったく別なことをやってしまったようです。
どのようにすればよいかご教示願いたく存じます。
void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (colorDialog1.ShowDialog() == DialogResult.OK)
{
DataGridViewCell Dg = ((DataGridView)sender).CurrentCell;
dataGridView1.CurrentCell = Dg;
dataGridView1.CurrentCell.DataGridView.BackgroundColor = colorDialog1.Color;
}
}
セルごとの色を変えたいならオーナードローするしかないんでないか。
>>914 なかなか突っ込み所が多いコードだな。
> DataGridViewCell Dg = ((DataGridView)sender).CurrentCell;
e のプロパティから取った方が自然かも。
> dataGridView1.CurrentCell = Dg;
いや今 CurrentCell とったばっかじゃん。取ったのを何故そのまま代入?
> dataGridView1.CurrentCell.DataGridView.BackgroundColor = colorDialog1.Color;
DataGridView の BackgroundColor(存在しないプロパティだけど)を変えるの?
変えたいのはボタンのじゃ?
// DataGridViewCell.Style でボタンだけは変えられたっけ?
917 :
898 :2007/05/15(火) 01:00:13
>>916 さん
かなり無駄なことをしていたようで
Dg.Style.BackColor = colorDialog1.Color;でいけました
失礼しました。
c++で Class1 -> method1() -> method2()みたいにメンバ関数を連続して呼び出す構文を, C#で Class1.method1().method2() って書けるんでしょうか?
書けるが、どうして試してみないんだい?
書けるよ
new Hoge().method(); とすら書ける
ありがとうございました.書いてみます.
いやむしろ書くな。 それって本当に分かりやすいか? 単なる下らん自己満足だろ。オナニーだよ。 大昔のベーシックのマルチステートメント以上の悪習にしか思えんが。
てかそもそも new が悪習。
>>923 そういうのが高度だと思ってる勘違い野郎がいるからな。
なにかとすぐリフレクションって言葉だしたり。
>>923 保守性とかどうでもいいときは、タイプ数へって楽だしょ
やっぱり保守性考えたら中間変数使っておいた方がいいんですかね?
928 :
デフォルトの名無しさん :2007/05/15(火) 10:25:55
すいません、教えてください。 C#には、c++のcallocに相当する、動的に配列のメモリを確保して0を入れるという関数は存在しないのでしょうか?
int [] array = new int[1024] {0}; じゃだめなん?
必ず0初期化される。 mallocはなくてcallocのみという感じ。
ありがとうございました。 C#の配列宣言はc++のcallocみたいなもんだと思っていいということでしょうか?
うい
933 :
895 :2007/05/15(火) 11:58:23
>>902 わかんない。
テキストボックスに入る文字列なんだけど、その割には文字列として扱うにもConvert.ToString()しなきゃダメ…
>>904 この例は年齢を(テキストボックスに)入れさせている部分なんでintとして扱いたいんです。
今まで何でもかんでもConvert.To()使ってた。
でも「キャストすればいい」とか、他の本ではInt32.Parse使ってたり…で、どれ使ったらいいのか調べたら余計わからなくなって。
正直、Perlからの移行組(会社でPerl禁止令が出た)で、私的には敷居が高くて。
objectで回してるのか。 type safeを超越した先進的設計だね
BindingNavigatorの新規作成ボタンを押したのと同じ動作をコードで書くにはどうしたらいいんでしょうか?
>>933 そんなあなたには
VB.NETでOption Strict Off
むしろWEBようのPHPとかも型が無いから問題なんだよな 型があることの恩恵を喜べるように勉強したほうがいいと思うぞ
C#ってVB.NETと違って リフレクションを使わないと実装できないような言語機能は絶対付けないの?
方針の話ならMSに聞け
940 :
895 :2007/05/15(火) 17:50:59
レスありがとう。 や、型は(ほんの少しだけど)わかるんよ。 だけど最初の no = (int)Session[keyname]; no = Convert.ToInt32(Session[keyname]); no = Int32.Parse(Session[keyname]); 結果が同じなら(私が好きという理由で)Convert.To()を使えばいい話なんだけど、「結果が違う」とか言われると…しかもどんな場合に結果が違うのかがわからん…
その型によって1つ目が例外出したり、2,3個目がコンパイルとおらなかったりするだろうが。 Sessionの宣言はどうなってんの?
942 :
935 :2007/05/15(火) 18:24:17
参考になるページの情報でもいいのでお願いします。
>>942 BindingNavigater.BindingSource.AddNew();
Sessionの型なんて決まっとろうがw
System.Web.UI.Page.Session : HttpSessionState HttpSessionState.item[string] : object であってるの?
いきなりキャストしたりするのは明らかに危険だろ。
>>940 あなたの前にあるhelpを見ましょう。
長年、C言語とDelphi使っててC++もそこそこ使えるプログラマがC# 始めるとして この本読んどけっていう、お勧め本はありますか?
>>949 その辺り使えるなら MS のドキュメントだけで十分な気が。
>>949 MSDNのプログラミングガイド読んどけばいいと思うよ。
サボりたい時、意味もなくヘルプを開いて読みふけるのオススメ。
MS系言語は日経BP本がはずれが少ない
955 :
949 :2007/05/15(火) 22:27:22
おお、早速多数のレスありがとうございます 今の仕事、組込みC言語(Linuxでクロス開発)なんで会社で見るのは無理臭いです インターネットへの接続も厳しく制限されてるし 印刷されたもので、C言語で言うとK&Rみたいなのがあればなと思ってます 日経BP本ですか、そっち方面でちょと調べてみます
>>940 Session[keyname]の中身の型が重要。
Session[keyname]はobject型で何でも突っ込むことが出来る。
その反面コンパイラなどで型が決定で問題が出ることがある。(大抵出ない)
no = (int)Session[keyname];
no = Convert.ToInt32(Session[keyname]);
no = Int32.Parse(Session[keyname]);
上記の記述法だといずれもSession[keyname]の型が判りづらい。
1番目は(int)でキャストできるだろう何かとしかわからない。
2番目はConvert.ToInt32のオーバーロードがいくつもあるので問題がありそうだ。
3番目はParseの中身はstringだから強制的にToString()されるので問題ない
(Parseできるかどうかは別問題)
もし内容がテキストなら(string)でキャストするか、ToString()を使ってstringと判るようにしたほうがいい。
ここで問題が出なくてもキャストで型を明示する癖をつけたほうがいいと個人的は思う。
変だけど誰もいないから突っ込まれない。
>1番目は(int)でキャストできるだろう何かとしかわからない。 わろた。 int以外の何をキャストするんだよ。
longとかfloatとか。
1番目はintにキャストされているけどキャストできるものかどうかわからないので危ない?
short が入ってたってだけでも例外だな くわばらくわばら
例外でいいじゃねーか、バグが見つかってw >longとかfloatとか。 やってみろw
>>933 >テキストボックスに入る文字列なんだけど、
>その割には文字列として扱うにもConvert.ToString()しなきゃダメ…
型が objectのままだから。
(string)Session[keyname]
Session[keyname].ToString( )
複数のボタンコントロールを作ってイベントハンドラの共有を行い、 あるボタンを押すとそのボタンテキストがaaaに変わるようにするにはどのように書けば良いのでしょうか? 例えば、VB2005の場合だと sender.Text = "aaa" と書くところをC#の場合はどうすれば良いのでしょうか?
(ボタン)sender.Text = "aaa"
sender.Text = "aaa";
あああ〜へまったorz キャストよりドット演算子のほうが優先順位高かった
((Button)sender).Text = "aaa"; /////////// Button btn = sender as Button; if( btn != null ) btn.Text = "aaa"; ////////// if( sender is Control ) ((Control)sender).Text = "aaa";
971 :
965 :2007/05/16(水) 01:12:04
すみません、それぞれ試したのですがエラーが出ました。 (Button)sender.Text = "aaa"; (button1)sender.Text = "aaa"; // button1はボタンの名前 (string)sender.Text = "aaa"; Convert.ToString(sender.Text) = "aaa"; 上から2つ目以外は、それぞれ 'object' に 'Text' の定義がありません。 というエラーでした。 2つ目のエラーは 'Test.Form1.button1' は 'フィールド' ですが、'型' のように使用されています。 でした。 たぶん、私のやり方が間違っていると思うのですがどうすればよいでしょうか?
((Button)sender).Text = "aaa";
入れ違いですみません。 無事解決しました。 皆さん、ありがとうございました。
おめでとう。 何かあったらまたおいで。 がんばれ。
で意味は分かってるのかい?
>>975 わからないので、そういう風にやるものだとだけ今は覚えておきます。
TableAdapterでUpdateしたときに新規追加されるデータのAutoIncrementの値を取得したいんですが、どうすればいいんでしょう??
978 :
デフォルトの名無しさん :2007/05/16(水) 14:13:41
VC# でLabelコントロールを大量に配置したフォームの描画が 重いです。 Labelコントロールの量を減らせ!!などの方法以外で 改善策などはあるのでしょうか? 宜しくお願いします。
>>978 this.SuspendLayout();
:
:
this.ResumeLayout(false);
>>978 フォームのOpacityを99%にしたり(ただしこれだと若干半透明になる)
P/Invokeでレイヤードウィンドウにして再描画の回数を減らす。
981 :
デフォルトの名無しさん :2007/05/16(水) 16:54:29
開発環境についてのアドバイス願いです。 今まで趣味のプログラムはVisualStudio&C++でやってきましたが、勉強の意味も含めて新しい環境でやってみたくなりました。 言語はC#で決定なのですが、他の開発環境をどうするかについて、未知の領域への不安を感じています。 似たような道を通った先輩方、「それは止めた方が良い」とか「こっちの方が良くないか?」とかのアドバイスを頂けないでしょうか? 現在の方針は下記の通りです。 ・MONOを使いたい。 (マルチプラットフォームに憧れているから) ・ECLIPSEを使いたい。 (フリーで全ての機能を使えるところに憧れているから。) ・ECLIPSEの次点として、SharpDevelopを使いたい。 (Eclipseの方が活発に見えるし、他言語への応用が広そう。でも、SharpDevelopはVSソックリというのが魅力的。) ・EclipseではCVSの方が使いやすそうに見えるが、SubVersionを使ってみたい。 (SubVersionが後発だから。CVSの経験が無いから。)
なんでSubversionのVが大文字なん?
OSはWindows?
984 :
981 :2007/05/16(水) 17:10:39
>>982 私は適当だからです。
>>983 WindowsXP HOME のPCを開発マシンにしています。
XP Proのマシンもたまに開発に使います。
Vistaは当分買わないと思います。
初めはmono+Eclipseよりも.NetFramework+VisualC#でやるほうがいいんでないの。
どうも一部スレ違いな気がしてならないが、最初は.NET+VisualStudioでやってみればどうだろう。 それからMONOやSharpDevelopを使うと完成度の低さに愕然とすることになるが。 Eclipseは使ったことないから白根。
Monoってそんなに完成度高かったっけ?
Mono Projectは慢性的な人手不足だから、どうにもならんだろう #Dは機能面で本家に勝てる日は来ないだろうな。軽いのはいいんだが
マルチプラットフォームなんて絵に描いたずんだ餅
monoはだいたい半年毎に使ってみてるが まだ実用的に使うには不安が残るレベルだと感じてる
JavaのIDEはEclipseで足りないときは、有料IDEを追加で使用する必要があるが C#のIDEはVSで十分間に合う。 あまり、IDEを複数使うより、ひとつのIDEを使いこなせるように努力したほうが 結果的に品質が良いものができるよ。
992 :
981 :2007/05/16(水) 17:31:46
皆様、アドバイスありがとうございます。 質問を2点追加です。 VSExpressだと機能が足りなくて、結局後でProを買うハメになるのではと思っているのです。 実際に使ってみてどんな感じでしょうか? 異なるIDE間でワークスペースの移行が簡単に出来るのならば、 VSでもEclipseでもSharpでも良いと思っているのですが、IDEの移行は簡単でしょうか?
君が持ってるVisualStudioのバージョンは何?6.0とか? 君がいずれ何をしたくなるかはわからんが、 少なくともC#の勉強にはExpressでも十分すぎる程ある。
少なくともEclipseやSharpDevelopよりはExpressのほうが遥かにマシだろ
996 :
981 :2007/05/16(水) 17:49:08
>>994 VS2003です。
他のIDEはC#での完成度が芳しくなさそうなので、VSExpressでいこうと思います。
皆様、ありがとうございました。
VS2003にVC#はついてるでしょ。前バージョンだけど。 まぁそれだったらExpressダウンロードしてもいいね。
C#1.0とか糞だろ VB以下
ぬるぽ
1.1では。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。