[表示 : 全て 最新50 1-99 101- 2chのread.cgiへ]
Update time : 03/08 23:54 / Filesize : 48 KB / Number-of Response : 175
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 20:39:06 ]
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

142 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 12:29:49 ]
>>141
1か2かで言ったら1。new一回につきインスタンスがいくつもできたんじゃたまらん。
で、privateは基本クラスのみから、protectedは基本クラスと派生クラスの両方からアクセスできる。

143 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 12:31:02 ]
>>140
ないんじゃね?
そのプロパティで配列のコピーを返すようにすれば
書き換えはできるがもとには反映しなくなるけど



144 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 12:33:25 ]
>>140
配列帰す限りはムリだと思う。
getインデクサでも定義して要素だけ返せば?

145 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 12:33:57 ]
>>140
それか、そのプロパティを読み取り専用のインデクサにしてみることを検討

146 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 12:35:51 ]
>>140
クローンを渡せばいいじゃん。

147 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 12:44:31 ]
>>140
いっそプログラムやめちまえばいいんじゃね?

148 名前:デフォルトの名無しさん [2007/03/12(月) 13:08:15 ]
2.0ならクライアントポストバックを使う。

149 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 13:15:41 ]
>>142
すばやい返答ありがとうございます。
privateメンバは引き継がれて存在するのに派生クラスでは使えない。
基本クラスでprotectedだったメンバは、なぜか基本クラスから派生クラスのメンバへアクセスできる。
ってことですね


150 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 13:33:55 ]
うんにゃ、基底クラスから派生クラスのメンバにはアクセスできない。
なぜなら、基底クラスは派生クラスのことを何も知らないから。派生クラスは自分の基底クラスをはっきり知ってるけどね。



151 名前:デフォルトの名無しさん [2007/03/12(月) 13:46:31 ]
描画がちらつくので、既定のダブルバッファというのを試してみたんです。

SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);

このコードを追加するか、またはDoubuleBufferedプロパティをtrueにするとあったので、
両方試したのですが、ArgumentException(使用されたパラメータが有効ではありません)
という例外エラーが出て、実行できません。

プログラム中で、Graphics g=this.CreateGraphics();というふうにしてるのがまずいのでしょうか

152 名前:デフォルトの名無しさん [2007/03/12(月) 13:52:40 ]
>>140
IList<T>を返すようにしてReadonlyなリストを返せばいい

153 名前:151 mailto:sage [2007/03/12(月) 14:51:33 ]
原因は、ペイントハンドラで描画後にg.Dispose()を呼んでいたことでした

154 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 17:59:22 ]
>>150
そういわれれば当たり前ですね、だめだ頭回ってないなー自分
ありがとうございましたー

155 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 18:57:13 ]
>>140
てっとり早くIEnumerable<T>型として返すのもあり

156 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 21:47:53 ]
>>139
逆じゃないの?
aspxでSQL引っ張るんじゃないの?

157 名前:デフォルトの名無しさん [2007/03/12(月) 23:42:06 ]
いろんな数値型に対応したいとおもい、引数および戻り値をオブジェクト型にした計算関数を作成するとした場合

(引数a,bおよび戻り値の3つのデータ型は同じデータ型であるという前提です。)
object Calc(object a, object b)
{
if(a is byte) return (byte)a + (byte)b;
if(a is int) return (int)a + (int)b;
if(a is long) return (long)a + (long)b;
(以下数値型のデータ型分続く)
・・・
・・・
}

といった感じで今は数値型(+や−の演算子が使える型)の全データ型分を書いています。
このように全データ型分書かなくても同様のことが行えるいい方法があればご教授願えませんか?

158 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:46:10 ]
基本的には無理
それよりobject型はまずいだろ
型ごとに個別に処理書いてるんならなんでオーバーロードしない

159 名前:デフォルトの名無しさん [2007/03/12(月) 23:48:01 ]
>>157
汚い技を使わない限り無理。
素直にオーバーロードしとけ

160 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:48:37 ]
演算子が入ってくるとどうしようもない
あと、面倒なのは分かるが引数の型ごとにオーバーロードにした方が良いな
それから、byte 同士の加算の結果がどうなるか把握してる?



161 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:55:04 ]
メソッドに属性付けといてVisualStudioのマクロ機能を使って自動生成するとか

162 名前:157 [2007/03/13(火) 00:04:46 ]
了解です。
演算子が入ると無理なんですね。
皆さんレスありがとうございました。

この関数を呼び出す前のaとbに渡されるものがすでにDLL化された関数が出力するデータでそれがobject型となっているからです。
オーバーロードというのも考えたのですが、そうなると呼び出し側で型判定し、データ型分の関数を用意することになってしまうので
簡潔に書きたかったからこのようにしました。

>>160
byte同士の加算結果はオーバーフロー発生の場合は255を返す処理にしています。
(そのほかの型でもオーバーフローが発生したらMaxValueを返すようにしています。)

163 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 00:11:22 ]
>>162
try { return (byte)a + (byte)b; }
catch (OverflowException ex) { return byte.MaxValue; }
みたいなコードだったりしないよな?
いや、分かってるなら良いんだけど。

ちなみに、上記の演算は決して例外が発生しない。

164 名前:157 [2007/03/13(火) 00:23:33 ]
はい、例外が発生しませんので、
return ((byte)a + (byte)b > byte.MaxValue ? byte.MaxValue : (byte)a + (byte)b);
と書いています。

165 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 00:42:15 ]
コンパイラオプションで例外出せたような

166 名前:デフォルトの名無しさん [2007/03/13(火) 00:47:46 ]
ユーザに対して数値しか入力をさせたくない場合に
例えばユーザが下記ユーザID入力項目にアルファベットの
Aを入力した場合に、KeyCodeが1から9の範囲に無いので
入力を破棄するにはどうすれば良いでしょうか?

ユーザID □□□□□


※入力値チェックをするのではなくそもそも最初から数字以外を入力不可に
したいです。

ご存知の方がいらしましたら教えて下さい。

167 名前:デフォルトの名無しさん [2007/03/13(火) 00:54:12 ]
textBox.KeyPress += delegate(object sender, KeyPressEventArgs e)
{
 if ((e.KeyChar < '1' || e.KeyChar > '9') && e.KeyChar != (char)Keys.Back)
  e.Handled = true;
}

168 名前:166 [2007/03/13(火) 01:13:49 ]
>>167さん
ありがとうございます!!

169 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 01:38:01 ]
コピペされるとマズい気が。

170 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 09:46:34 ]
textbox numeric でググるくらいのことはしろよ。



171 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 10:44:47 ]
>>166
GetWindowLong/SetWindowLongとES_NUMBERで実現できます。
ちなみにXPで実行するとバルーンチップも出てきます。

>>88 亀ですが
VBではSubやFunctionやPropertyの正式な呼び名はプロシージャです。これは
Quick BASICの頃からそうです。
ただほとんどの人はサブルーチンとか関数とか呼んでる気がします。


172 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 11:14:30 ]
MaskedTextBox使わんの?
2002/2003?

173 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 12:02:43 ]
ワイルドカードを含んだパス(たとえば"C:\hoge\*.txt"とか)に該当するファイルを列挙する方法はあるんでしょうか。

174 名前:デフォルトの名無しさん [2007/03/13(火) 12:19:49 ]
System.IO.Directory.GetFiles






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<48KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef