ふらっとC#,C♯,C#(初心者用) Part27
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980 を踏んだ人は新スレを建てて下さい。
>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。
前スレ
ふらっとC#,C♯,C#(初心者用) Part26
http://pc11.2ch.net/test/read.cgi/tech/1206238049/
このスレの住人なら知っていますね、あの糞開発ツールのことを ・自分のプログラムのバグなのかコンパイラのバグなのかわからない ・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している ・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている ・糞開発ツールを批判すると「性格が悪いから糞ツールを批判するんだ」と言われる 糞だけど、政治的な理由で無理やり使わされているんですよね。 もう、あんな厨の作った糞ツールを我慢して使うのはやめましょう。 ・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。 上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。 ・糞開発ツールを使わせる上司の下では働けません、と上司の上司に直訴しましょう。 ・あの糞開発ツール提供会社には「おたくの糞開発ツールは話にならない」と突き放しましょう。 バグレポートなどしてはいけません。改善要求などもってのほかです。 あの会社はあなたたちのことをテスター/モルモットとしか思っていません。 ・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」 なんて話が出たら力強く机を叩き、会議室を出ましょう。 あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。 糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
コピペ君って馬鹿だな、まで読んだ。
>>前スレ994 Microsoft Math Add-inってどこにあるん?
>>8 Word 2007 Add-in: Microsoft Mathって書いてあるけど
Excelはないの?
>>9 あー、Word 限定なんだなぁ・・・
なんと中途半端な。
Word で書いた数式、クリップボード経由でエクセルに張り付けると、
単なるビットマップになる・・・
なぜかInvailid Product keyってなって落とせん・・・ だれかうpしてクレー
割れ厨氏ね
割れじゃないのにDLできん
週明けにでもMSに電話しろよ
コントロールにTagプロパティってあるじゃん。 デザイナ上で 3.14 とか書いてもstring型になっちゃうんだが double型を設定したい場合はプログラム上で書くしかないん? VC#2008 Express
>>15 Designer.csを開いてダブルクォーテーション消せばいいんでないの?
プロパティウインドウから触ったらstringに戻るから、
他の人もさわるならやめたほうがいいと思うけど。
17 :
15 :2008/04/20(日) 00:03:54
デザイナ上で全ての設定済ましたかったけど、できないんならしょうがないか。 thx
18 :
デフォルトの名無しさん :2008/04/20(日) 14:09:57
質問ですが C#でランダムな数字を作るにはどうすればよいですか? 教えてください
そのまんまRandomクラス
20 :
デフォルトの名無しさん :2008/04/20(日) 14:23:18
ありです。 C# randomでぐぐったら例文のってました。
過去ログがもう流れてるし・・・ 無駄なスレ多すぎなのか開発環境がそんだけ多いのか・・・
●買えよ
Randomの精度ってどうなの? MTとかなの? CのRandは使い物にならなかったけど。 あと高精度のタイマーって何? マルチメディアやゲームにも使えるタイマーありますか?
グラフィックスを描画するとき、半透明とかグラデーションとかいろいろ機能がありますが、 ピクセル毎に描画する色を最終決定しているのはどこなのでしょうか? CPUがいちいち計算して出しているのか、それともGPUに任せているのか どちらなのでしょうか?
そうなんか!
というか両方使われるのでもっと詳しく聞いてくれんと微妙にしか 答えられんがアルファはGDIとGDI+ならCPUが頑張ってることが多い。
フレームを利用したWEBページのhtmlソースを取得しようとして sw = new StreamWriter(filename, false, Encoding.GetEncoding("EUC-JP")); int len = (int)webBrowser1.DocumentStream.Length; byte[] doc = new byte[len]; webBrowser1.DocumentStream.Read(doc, 0, len); Encoding enc = Encoding.GetEncoding(webBrowser1.Document.Encoding); sw.Write(enc.GetString(doc)); sw.Close(); とDocumentCompletedイベントに記述したのですが、webbrowserでは表示できているにも拘わらず、 ファイル側にはフレームに未対応のブラウザは〜としか書き込まれません。 何が問題なのでしょうか?
何が問題かと問われても、何も問題ない(そういうもの)としか答えようがない
強いて挙げるなら、
>>32 のHTMLに対する理解が不足してることくらい
フレームの中に表示されているhtmlも保存されるようにしたい、ということなら
自分で保存する処理を書けばいい
レイヤ付きペイントツールを作ろうと思ってます とりあえずはペイントの部分の、ユーザが自由にラインを引ける部分あたりを作りたいのですが、何からはじめていいのやら 参考になるモノ、サイトなどありませんか?
Paint.NETのソース
>>33 確かに問題ないようですね。
foreach (HtmlWindow hw in webBrowser1.Document.Window.Frames)
{
HtmlDocument hd = hw.Document;
text_memo.Text = hd.GetElementsByTagName("html")[0].OuterHtml;
}
とすると取得できましたが、どこかのインターフェースを介しているためオリジナルのソースと違った物が得られます。
これはどうやって回避すればいいのでしょうか?
37 :
デフォルトの名無しさん :2008/04/21(月) 19:31:47
>>34 そんなことココで聞いている時点で止めといた方が良いと思うが、あえて
やるなら35の言うとおり、Paint.Netのソースを追ってみるのがいいんじゃないか?
ラインだけ引けたってレイヤ付きペイントツールの道はまだまだだからな。
39 :
デフォルトの名無しさん :2008/04/21(月) 23:58:44
40 :
デフォルトの名無しさん :2008/04/22(火) 00:24:20
C#, C♯, C#相談室 Part45が、そろそろ限界なんだが規制で新スレが立てられない。 誰かお願いします
スレチガイです
42 :
デフォルトの名無しさん :2008/04/22(火) 00:32:20
43 :
デフォルトの名無しさん :2008/04/22(火) 00:38:25
>>42 乙です、ところでテンプレは?
一緒になって書いてぐちゃぐちゃになったら困るので、もし書かないなら返答お願いします。
44 :
デフォルトの名無しさん :2008/04/22(火) 00:44:01
いなくなった? 無責任だな、とりあえずテンプレ自分書きます、他の人書かないでください。
スレ立ててもらったんだから、 テンプレぐらい自分ではれよw
>>39 youtubeにファイルをアップする際のバッファのどの部分にどのように記述すれば
public/privateの設定ができるのかを教えてくれたら考えてもいい。
あるよ
全然あるな
>>46 お世話になります
これから調べてくるッス
日付が変わるまでにはなんとか
dllの中身が void hoge(char *str){ printf("%s",str); } のとき [DllImport("hoge.dll")] static extern void hoge(string str); とすると hoge("hoge"); で呼び出せて [DllImport("hoge.dll")] static extern void hoge(char[] str); とすると hoge("hoge".ToCharArray()); で呼び出せるみたいなんだけど、これってコンパイラがstringをchar[]に勝手に変えてくれてるの? 仕組みとか注意点とかあれば教えていただきたい。
>>51 StringがChar[]に変換されるのではなく、StringもChar[]もchar*に変換されてDLLに渡される。
.NETの型ごとに、プラットフォーム呼び出しの時、どんな型に変換されるか決まっている。くわしくは「規定のマーシャリング」でググれ。
>>46 おそらくここだけだと思う。宜しくご検討お願いします。
<form method="post" enctype="multipart/form-data" action="
http://lax-v133.lax.youtube.com/my_videos_post " name="theForm" id="theForm" onSubmit="return formValidator();">
// private(非公開)
<input type="hidden" id="field_privacy" name="field_privacy" value="private">
// public(公開)
<input type="hidden" id="field_privacy" name="field_privacy" value="public">
</form>
ヘジは人をラムダに導くためにイベント、匿名メソッド、ラムダと段階を踏んできたんだな
前スレで質問をしたのですが、回答を見る前にdat落ちしてしまいました。 どなたかdatファイルをいただけないでしょうか。
vs2005のtabcontrolなんですが、タブ6つを | 5 | 6 | | 3 | 4 | | 1 | 2 | って風に3段に並べたいだけなんだけど、ビルドすると勝手に | 3 | 4 | | 5 | 6 | | 1 | 2 | のように並べ変えられる。これって自分だけ? 何か対処法を知ってたら教えてください。
C#ではUInt型は扱えないのでしょうか? DBにInt型で保存されてる値を取り出す時にUInt型として扱いたいのですが
初期値やデザイナへの表示の有無を変えたい=属性を変える必要がある と思って下のようにコードを書いたのですが、 もっと簡単に属性を変える方法はありますか? public class MyListView : ListView { public MyListView() { View = View.Details; } //[Browsable(false)] [DefaultValue(View.Details)] public new View View { get { return base.View; } set { base.View = value; } } }
62 :
デフォルトの名無しさん :2008/04/22(火) 18:54:11
if文から強制的に抜けるにはgoto文以外でだったらどうすればよいですか? breakを使うとwhile文の中のif文では、while文を抜けてしまいます。 どうすればいいかおしえてください。
>>60 ありがとうございます。助かりました。
回答をくださった方もありがとう。
>>62 強制的に抜けなくてもいいよう、もう一段ifをネストする
65 :
46 :2008/04/22(火) 20:55:06
>>53 手が空いてるときにやるから気長に待ってておくんなさい。
小学生のトキ、夏休みの宿題に昆虫採取をするコトにしました。 まぁ、毎日アミ持って野山を駆け回って遊んでただけなんだけど、ある日すごいのを捕まえました。 体長13.5cmのトノサマバッタ(足含まず) まぁ、もちろん標本にして学校に提出したんだけど、次の日には学校中の噂が広がって展示場の理科室は昼休みなんかメチャ混みになっちゃったんだよね。 でも、2日ほどで撤去されちゃった上、学校が全校生徒にこんな内容のプリントを配った。 理科室にあった標本のバッタは、トノサマバッタではなく、外国のバッタである事がわかりました。 日本の生物では無いので、気にしないように。 その後、両親と共に校長室に呼ばれ、先生ではない数人の大人と話をし、両親はハンコを押したり、生活指導方針がどーとか難しいコトを言われてました。 子供心に「怒られてるんだ」ってのはわかりました。 それから十数年が経ち、なにげなく当時の事を思い出して両親に尋ねると・・・ 名前 大きさ つかまえた場所 トノサマバッタ 13.5cm 浜○原子力発電所緑地公園 ↑ コレが、まずかったらしい。
コピペ君って馬鹿だな、まで読んだ。
C#暦2週間ほどなのですが、ちょっと教えてください。 public class hoge{ ・・・ } と定義してあって、 hoge Vhoge = new hoge(); でインスタンスを生成し、Vhogeにはバイナリのデータが入ってるとします。 System.Io.File.WriteAllBytes を使ってバイナリを出力したいのですが、 そのような場合、第二引数としては、何を渡したらよいのでしょうか?
出力したいバイナリを、byteの配列で渡す
もっと真摯に回答しろよ。
分からないなら答えないでください><
ローカルルール 一、UCがセゾン傘下である事実を受け入れること 一、UCは流通系となった事実を受け入れること 一、クレディセゾンを誹謗中傷しないこと 一、セゾンUCを大切にすること
73 :
68 :2008/04/22(火) 23:17:32
>>69 やっぱり、Vhogeをbyte[]に変換しないとダメですか・・・。
変換する方向で考えてみます。
>Vhogeにはバイナリのデータが入ってる からbyte[]のメンバを持ってるんじゃないの? 何か別のかたちで持ってる?
>>68 bytes
型 : System.Byte[]
ファイルに書き込むバイト。
76 :
68 :2008/04/22(火) 23:43:11
>>74 実際には、こんな定義になってます。
(とあるサンプルなので、中身は置いておいてもいいとは思いますが)
[StructLayout(LayoutKind.Explicit)]
public class hoge
{
[FieldOffset(0)]
public short type_a;
[FieldOffset(2)]
public short type_d;
[FieldOffset(4)]
public short datano_s;
[FieldOffset(6)]
public short datano_e;
[FieldOffset(8),
MarshalAs(UnmanagedType.ByValArray, SizeConst = 10000)]
public byte[] cdata;
}
これを、そのままのイメージでバイナリ出力したかったのですが・・・。
で、Vhogeのアドレスを渡したら、出力できるかと思ったのですが、
型の変換ができなかったので、いい方法はないかと思案中です。
Marshal
>>76 なんでそこまできっちり定義してるのに、
>>68 に略したのかわからん。
68の書き方じゃ求めていた答えが返ってくるわけがない。
P/Invokeで出来るんだから、何か方法があると思うのが普通。
初めて調べたけど正解は、Marshal.StructureToPtrかな?
ってbyte[]にする必要があるんだった。コンパイルもしてないけど、こんな感じ? 2回コピーするのが気に入らん。 int size = Marshal.SizeOf(Vhoge); byte[] data = new byte[size]; IntPtr pnt = Marshal.AllocHGlobal(size); try{ Marshal.StructureToPtr(Vhoge, pnt, false); Marshal.Copy(pnt, data, 0, size); } finally { Marshal.FreeHGlobal(pnt); }
AllocHGlobalなんて怖いことしなくてもfixedやGCHandle.Allocで十分ですよ
マネージメモリに unsafe でアクセス != marshal レイアウト
あ一回はコピー生成してるのかごめん
コンテキストメニューの項目数を設定で自由に変更できるプログラムを作成したいです。 とりあえず下記の様に通常コードを作成しましたが headlineの項目をこの様に決め打ちするのでなくforループなどで動的に追加したいと思っています どのようなに書けばいいでしょうか。ご助言願いたいです。 // コンテキストメニューの動的作成 public void ContextMenuCreate(int number) { // イベントハンドルを宣言 EventHandler eh = new EventHandler(MenuFactorOnClick); MenuItem[] ItemMenu = { new MenuItem("headline_" + 1, eh), new MenuItem("headline_" + 2, eh), new MenuItem("headline_" + 3, eh), }; ContextMenu = new ContextMenu(ami); }
二つほど記述ミスがありました、申し訳ありません。 引数のintはforループに用いようと思っていたのを消し忘れました。 ContextMenuの宣言で[ami]となっていますが[ItemMenu]の間違いです。
ContextMenu.MenuItems.Add()又は MenuItem.MenuItems.Add()
迅速なお返事ありがとうございます。 下記の用に書くことで目的の動作を果たせました。 // コンテキストメニューの動的作成 public void ContextMenuCreate(int number) { // イベントハンドルを宣言 EventHandler eh = new EventHandler(MenuFactorOnClick); // コンテキストメニューを作成 ContextMenu = new ContextMenu(); // メニュー数を設定 ItemMenu = new MenuItem[number]; // メニューの追加 for (int i = 0; i < number; i++) { ItemMenu[i] = new MenuItem("headline_" + i, eh); ContextMenu.MenuItems.Add(ItemMenu[i]); } }
サーバー側で接続待ちをしていない状態で、 クライアント側からTcpClient.Connect();で接続しようとすると 「接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。 または接続済みのホストが応答しなかったため、確立された接続は失敗しました。」 ってエラーが発生します。 エラーになるまで20秒くらいかかってしまうのですが、 もっと早く接続できないと判断することはできないのでしょうか?
89 :
62 :2008/04/23(水) 16:22:39
ifを入れ子してやってみたのですが、できません。 どうすればいいですか?
コードも出さずにどうすべきか聞くとはどういう事だ? 何故それで駄目かくらい書け。
>>90 いや、62はコード出す・出さない以前の問題じゃね?
if 文を break で抜けれるとか思ってる時点で何かおかしい。
>>91 レスありがとう。
だがMSDNのどこを調べればいいのかわからない。
できたら場所を、教えてください。
breakは括弧閉じまでジャンプするもんだと誤解してるのかも
そこで括弧閉じればいいのにね
目的: Control.ModifierKeysを使ってモディファイアキーを判定したい。 詰まっている箇所: 複数のモディファイアを判定する方法がわからない(Shift + Alt + Vなど) どなたかアドバイスいただけないでしょうか
>>96 Keys構造体はただのビット値。
(Control.ModifierKeys & Keys.Shift) != Keys.None) & ((Control.ModifierKeys & Keys.Control) != Keys.None)
こんな感じでいけるはず
(Control.ModifierKeys & (Keys.Shift | Keys.Control) != 0)
Delphiの列挙値は比較が楽だったんだけどなあ。 なんでC#は似たような比較方式を採用しなかったんだろう
ヘジたん的になにか気に入らないところがあったのでは
TcpListener で質問なんですが 0.0.0.0 とやれば全指定なんですが 範囲指定したい場合、例えば 192.168.1.0とかやると 192.168.1.0〜192.168.1.255 とかできるんでしょうか?
>>101 192.168.1.0であれば192.168.1.0のみになる。
0.0.0.0は特例でそういう使い方は普通ワイルドカードを利用する。
>>95 do { } while(false)
とか?
>>99 ((enumValue & flag) == flag)
を返す演算子があってもよさそうだよな
106 :
68 :2008/04/23(水) 22:17:31
いろいろヒントありがとうございました。C# Marshalでぐぐって、
MyStruct o = new MyStruct();
...
IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(o));
try {
Marshal.StructureToPtr(o, ptr, false);
byte[] bytes = new byte[Marshal.SizeOf(o)];
Marshal.Copy(ptr, bytes, 0, Marshal.SizeOf(o));
...
} finally {
Marshal.FreeHGlobal(ptr);
}
に当たったので、
>>79 さんのサンプルでいいみたいです。
助かりました。
>>105 フラグはわざと便利にしてない感じがするなあ
分からないなら使わなくていい,使うにしても控えめに,っていうような意図を感じる
>>107 間違いなくその通りだろうな、Win32APIのラッパーが避けられない以上、やむなく残した
としか思えないところがあるな。
javaからc#に転向することになって本読んでます。 パッと見javaと似てるけど、なんじゃこれは? というのもあります。 public xclass() : base(xclass.MethodA()) { Console.WriterLine("XClass constructor"); } xclass()メソッドの後ろにある、コロンとメソッド、 これは一体なんですか。 メソッドの直後にメソッドて・・・・??。 想像もつかんです。 しかもこの本には意味が書いてない。。 どういう動作になるんでしょう?
なんとなく理由が分かった、ビットフィードが無くなったのもこれが理由だな マルチスレッドだね、使用しないビットに対してもリードもライトもロックが必要になるが、どこまでロックが必要か訳わからんようになる。
基底クラスのコンストラクタに引数を与える構文。
>111 ありがとうございます。 他の本で読んだ記憶がうっすらよみがえってきました。。
少し不思議なことがあるのですが・・・xclass.MethodA() って何、コンパイルできないような気がしたので、自分の知識が不足しているのか、間違っているのか気になる。
>>113 デリゲートが引数になっているメソッドには、そのデリゲートに合うメソッドを引数として渡せる。
実際には、デリゲートのインスタンスが生成されているんだけど。
MethodA の後ろの () が、タイプミス? MethodA の正体は static 関数? ちょっと原文みてみたいですね、'WriterLine' だしw
kakenai
そのPNG画像を読み込んで貼り付ければいんじゃね?
>>117 ユーザコントロールを作る
OnPaintBackgroundをオーバーライドして背景を描画しないようにする
OnPaintをオーバーライドして各頂点およびエッジを描画する
その他にも細々と設定しないといけないプロパティとかあるかも。
パフォーマンス?さぁ…
enum.first.tostring()で"first"は得られるのですが enumに同期させてenum.firstならば"最初" enum.secondならば"二回目"とか任意の文字列を得るのに スマートな実装方法を教えて下さい
enum使わないでstructにする
TypeConverter 実装するとか
(int)enum.first 明示的にバラバラしてるんならできないけど
>>120 Dictionaryじゃダメな理由を聞こうか
>>88 だけど
どなたか知ってたらヒントください。
>>125 Recieveにはタイムアウト設定できたと思うが、Connectには無理だったと思う
>>127 はい、できません。
最近のWindowsなら、レジストリいじればシステムグローバルな
値は変更できると思うけど。
TCP周りのいろんな設定値はユーザーランドではいじれない実装の
OSがほとんどです。
129 :
88 :2008/04/24(木) 18:30:05
Equalsって何と発音するのでしょうか・・?
辞書引けよ
コンテキストメニューにショートカットを設定したいです。 メニューの数が可変であるためにVSに頼らず動的に作成しているのですが 生成番号に対応したショートカットを動的に与えるにはどのようにすればいいでしょうか 下記の様なイメージです。 Item1(&Alt + 1) Item2(&Alt + 2) Item3(&Alt + 3)
>>130 無理矢理日本語で言うなら「いーくぉーる」かな。
ちなみに日本語で言う「イコール」のことな
C#でWindowsUI付きのFTPクライアントを作っているのですが、 UI(WinForm)をロックさせないためにBackgroundWorkerを使用しています。 BackgroundWorkerからはFTPコマンドを扱うクラス(FTPClass)のメソッド(UploadMethod)を呼び出しています。 この時、UploadMethodの進捗をUI(WinForm)に表示させたいのですが、 この場合UploadMethodの中でWinFormのコントロールを操作する処理をさせるしか ないのでしょうか? (実際にはWinFormはSTAなのでBackgroundWorkerのメソッドを介してUI変更を行います) というのも、その場合UploadMethod内のUI変更の処理は上位クラス(WinForm)の 実装を意識しないといけなくなるわけで、クラス間の結合が密になってしまうのは 好ましくないかなと感じまして。
>>132 ショートカットを設定することは出来るが、Altは使えないんじゃないかな。
Altを押した時点でコンテキストメニューは消えると思う。
ショートカットの設定は、ToolStripMenuItemなら
.ShortcutKeys = (Keys)(Keys.D0 + i);
でできる。
>>135 レスありがとうございます。
>>84-87 のところでしょうか?
私が行いたいのは(&Alt + 1)の数字の部分を要素にあわせてインクリメントする(イメージ)なので
コンテキストメニュー自体を動的生成している
>>84-87 とは問題が違ってしまいます。
説明不足申し訳ありません。
>>134 UploadMethodが進捗を返すのなら(返すか知らんけど)BackgroundWorker内で
PeportProcessイベントを発生させればフォームに進捗を伝えられる
>>132 なんか発想が変な気がするよw
別にコンテキストメニューである必要もないし、メニュの数を動的に変える
必要も必ずしもないんじゃないの?
ディセーブルにすれば十分に思うし、その方がユーザーにとっても明示的で
わかりやすいよ。
もしコンテキストメニュー「も」必要なら、ポップアップするタイミングで
メインメニューのメニューを丸ごと奪い取ればいいんだし。
>>137 括弧でアンダーラインが入ってるパターンのなら
ToolStripMenuItem.Text = "背景色に設定(&1)";
みたいに前に&つけるだけだよ
ショートカットキーのこと言ってるのかただのアクセレーターキーのこと言ってるのか 判然としないねw いずれにせよちょっとピンボケした発想だと思う
>>136 レスありがとうございます。
ToolStripMenuItemでなくMenuItemで行ったのですが
.ShortcutKeys = (Keys)(Keys.D0 + i);でキャストエラー
.ShortcutKeys = (Shortcut)(Keys.D0 + i);でコンパイルは通りますが
実行時に「引数値'value'(50)は列挙型'Shortcut'に大して無効です。」とエラーになります。
>>139 ホットキーでコンテキストメニューを呼び出し全ての操作をメニュー上で行うという
かなり変則的なプログラムを作っております。
通常の操作であればディセーブルで十分なのはご指摘の通りだと思います。
レスありがとうございます。
>>140 レスありがとうございます。
えと、それはItem1(1)の1の下にアンダーバーが表示されるだけで
それだけでショートカットとして認識される訳ではありませんよね?
>>141 申し訳ありません。
ショートカットキーとアクセレーターキーの違いを知りませんでした。
アクセレーターキーを実装したいと考えています。
>>142 ねえ、だからそれメインメニューじゃいかんの?
なんでそんなウィンドウズの標準のお作法から外れたことをしたがるのか理解できんよ。
>>138 UploadMethod内では
1.アップロードファイルの確認
2.アップロードコマンドの発行
3.アップロードコマンドの終了
と3つのプロセスに分かれているのですが、それぞれのプロセスが終了するごとに
UIに通知したいと考えています。各プロセスをさらにメソッド単位に分解し、
それぞれの完了ごとにReportProgressを呼ぶことも考えましたが、何かスマートな方法
は無いかものかと。
例えばWinForm側にリスナのようなものを追加し、それぞれのプロセスが終了するごとに
イベントを発生させ、リスナからReportProgressを呼び出す。と言ったような事は
可能なものでしょうか?
>>142 デザイナで実際に設定してみればわかると思うけど、ショートカットにはCtrlかAltが必ず必要だったと思う。
それにデザイナで設定できることは、実際に設定してみてDesignet.csがどう生成されたか見るのが早い。
ToolStripMenuItem.ShortcutKeys = (Keys)(Keys.Alt | (Keys.D0+i));
試してないけどみたいな感じで出来るんじゃないかな。
>>143 必ずそういうこと言う人がいるけど質問者の条件を変えようとするレスは書かなくていいです。
>>146 君のような思考を「フェティシズム」って言うんだよ
フェチのこと? なんで?
150 :
845 :2008/04/25(金) 09:46:50
変な仕様を指摘すると「お前は言われたとおりに組んでればいいんだよ!」とかいう奴はいるなぁ たいては後で直さなきゃいけなくなるんだけど
お前誰だよ↑ 仕様にケチつけると話題がそっちに流れるだろ。 もうちょっと考えような。
奇妙な仕様を指摘して何が悪いんだか。
ファシズムって言いたかったとエスパーw
むしろ悩んでる原因は変な仕様だってことが多いからな
別にケチつけるわけじゃなく、スタンダードな方法を提示したレスをするならいいと思うけどね
まあ大体の初心者は変な思いつきと思い込みで阿呆な仕様にしてるよねw
>>155 それならいいよね。建設的だし。
でも批判するだけなら分かってない人でも出来ちゃうから厄介。
>>147 JavaとC#の二束の草鞋です。
C#の場合はリスナそのものに該当する仕組みは無く、
delegateを使用してリスナ相当を実装する必要があるのかなと考えているのですが
フォーム操作可能にしたいマルチスレッドならdelegate()が一番簡単と思うけど
>>158 @FtpClassにOwnerプロパティを実装
public Form Owner{ get; set;}
AUploadMethodを呼ぶ前にOwnerにthis(つまりWinForm)をセット
ftpClass.Owner = this;
BUploadMethod内のイベントを通知したいタイミングでOwner.Invoke()を呼ぶ
if(Owner!=null && UploadFileCheckEventHandler != null)
Owner.Invoke(UploadFileCheckEventHandler(FtpEventArgs))
これでどうだろうか
161 :
158 :2008/04/25(金) 13:28:19
ちと変だな 訂正 public event FtpUpLoadEventHandler UpFileChecked; public event FtpUpLoadEventHandler UpLoadStarted; public event FtpUpLoadEventHandler UpLoadFinished; こんなようなイベントを実装して、 if(Owner!=null && UpFileChecked != null) Owner.Invoke(UpFileChecked(FtpEventArgs)) とかで呼び出す
>>160 C#のイベント処理に疎いので、少し教えていただきたいのですが、
この場合Ownerで示されるFormクラスのインスタンスに、UpFileCheckedイベントが通達
されるという認識でよろしいでしょうか?
その場合、Owner.Invokeでイベントを発行している形なので、FTPClassがイベントを
通達できるのはFormクラスのインスタンスに限られてしまい、FTPClassはFormクラスと
依存関係になってしまうのではと考えているのですが。
163 :
デフォルトの名無しさん :2008/04/25(金) 14:49:02
C# (.NET) でコントロールを透明化したいんですけど、 obj.Parent 以外に対しても透明化というのは、無理なんでしょうか? もしくはレイヤードパネルみたいなものはないですか? やりたいのは // A,B 両方表示(A,B は完全に重なっているコントロール) A.Parent = parent; B.Parent = parent; // A だけ表示 A.Visible = true; B.Visible = false; // B だけ表示 A.Visible = false; B.Visible = true; みたいなことなんですが・・・
164 :
134 :2008/04/25(金) 14:58:41
すいません今更ですが
>>134 ×(実際にはWinFormはSTAなのでBackgroundWorkerのメソッドを介してUI変更を行います)
○(実際にはWinFormはSTAなのでWinFormのInvokeメソッドを介してUI変更を行います)
>>164 FTP クラスが ProgressChanged みたいなイベント公開すればいい。
アップロード中に適当に状況が変わるなりすればイベントを起動する。
Form は その ProgressChanged イベントのイベントハンドラで Invoke して GUI に反映させる。
Owner はいらんな。SynchronzingObject ならあってもいいけど。
>>163 見た目を気にするなら諦めてWPFに乗り換えましょう
167 :
デフォルトの名無しさん :2008/04/25(金) 22:03:36
170 :
167 :2008/04/25(金) 22:12:08
それは自分でも自覚してる。 あとどんなものつけたら面白くなりますか?
はじめはこんなもんだとは思うけどとりあえずgotoは封印しましょう 同じような処理はメソッドにまとめましょう どうでもいいけどhRandomっていう名前がキモい 参照型変数にhを付けることにしてるのか知らないけどそんなのあんまり意味無いし 付けるならslotにも付けないとおかしい
いいよ
174 :
167 :2008/04/25(金) 22:36:02
この場合gotoつかわないとすれば何つかえばいいですか?
Hyoujiメソッドを呼び出せばいいんじゃないか?
>>160 ,165,168
教えていただいたことを参考にFTPClassにイベントを追加し
呼出元でイベントをハンドリングすることで希望通りの動作ができました。
ありがとうございました
>>167 とりあえずコメントは書こうな
using System;
class slot{
static void Main(){
Console.Write("コインのもち数を入力してください");
int coin = int.Parse(Console.ReadLine());
int bell = 10,suika = 6,replay = 3;
int[] slot = new int[9];
Random rand = new System.Random();
while (coin >= 3){
coin -= 3;
int koyaku = rand.Next(1, 101);
//スロットの値設定
for(int i = 0;i < slot.Length;i++){slot[i] = rand.Next(1,4);}
//約100回に一回当たるよく分からないなにか
if(koyaku == 1){
coin += 5;
Console.Write("○ ○ ○\n○ 5 ○\n○ ○ ○\ncoin={0}\n\n",coin);
}
//通常処理
for(int i = 0;i < slot.Length;i+=3){
if(slot[i] == slot[i+1] && slot[i] == slot[i+2]){
coin += (slot[0] == 1) ? bell : (slot[0] == 2) ? suika :replay;
}
}
//表示
for(int i = 0;i < slot.Length;i+=3){Console.Write("{0} {1} {2}\n",slot[i]+i, slot[i+1]+i, slot[i+2]+i);}
Console.WriteLine("ncoin=" + coin);
Console.ReadLine();
}
}
}
178 :
167 :2008/04/25(金) 23:25:09
177さん手直しありがとうございます。 プログラム初心者なんでそんなfor文使うなんて考えてませんでした。 ありがとうございます。
XMLシリアライズした結果をファイルではなく、変数とかに保持したいのですが可能ですか?
普通にstringにすりゃXMLになってるだろ
できました。サンクスです
PDF作り方教えろ
まずadobeのサイトに行きます
>>184 背景グレー
スタティック(変更不可)
クリッカブル(選択可)
よく知らないけど。
KeyEventArgsイベントで押したキーではなく、 押されているキーを取得するにはどうすればいいのでしょうか?
>>186 それってキーボードを直読みだから .netじゃ無理な気がするけど。
>>187 ありがとうございます。
じゃあおとなしくフラグ使ってやります。
WPFのKeyboardとか GetKeyboardStateをdllimportしてくるとか
[STAThread] static void Main(string[] args) { Application.EnableVisualStyles(); MainForm hogefrm = new MainForm(); hogefrm.Show(); } と書いたところ、Formが一瞬表示されてすぐに終了してしまうのですが何故でしょうか?
>>190 >MainForm hogefrm = new MainForm();
>hogefrm.Show();
をApplication.Run(new MainForm());にすればいいと思うよ
>>191 回答どうもありがとうございます。
Main内で
hogefrm.なんとかかんとか
と行いたいのでApplication.Runは使用したくなかったのですが......
Main内に書かずMainForm.Loadに書くべきなのでしょうか?
いやいやいや MainForm form = new MainForm(); form.Hoge(); Application.Run(form); ってすればいいから
hogefrm.なんとかかんとかをしたあとに Application.Run(hogefrm);とすればいい
>>193 ,194
どうもありがとうございます。
おかげさまで解決しました。
ちなみにhogefrm側でcloseするとアプリが終わっちゃうからな
やっと3.0始めたけどラムダ式が省略されすぎて直感で理解しずらいお( ^ω^)
アクセサって変だと思う。 関数作って値かえせばええやん、みたいなとこでも 使われてません? 型とか修飾子あるから別になくてもいいじゃん。何か問題ある訳?
日本語で
>>198 そこはアクセサじゃなくてプロパティと言うべきところ。
Javaはプロパティがないせいで 命名規則とリフレクションでプロパティのようなことをやらざるをえなかったけどな
「IDEに優しい言語」と公言してるわけだから
しすてむどっとこんぽーねんともでる …イベントも忘れないであげて
>>197 ラムダ式に慣れたら匿名メソッドを見ると吐き気を催すようになる
// Graphics オブジェクトの取得 Graphics grfx_moji = MainForm.mainform.CreateGraphics(); // フォント、ペン、ブラシの定義 Font font = new Font("MS P ゴシック", 30F); Pen pen = new Pen(Color.Magenta); SolidBrush brush = new SolidBrush(Color.Orange); grfx_moji.Clear(Color.Gainsboro); grfx_moji.DrawString( s, // 描画文字列 font, // Font brush, // SolidBrush 10, // X位置(左上の) 30 // Y位置(左上の) ); font.Dispose(); brush.Dispose(); pen.Dispose(); grfx_moji.Dispose(); と言うコードを、30fpsでループさせてフォームに描画しているのですが、 文字がちらつきます。 60fpsにしてもちらつくのですが、何が原因なのでしょうか?
理由はいろいろあるだろうけど GDI+で30fpsとかそもそも間違いw DirectXかWPFでも使えば
>>206 お返事ありがとうございます。
5fpsにしてもちらつくのですが……。
WPFは嫌いなので使うとしたらManagedDirectXですかね〜。
というかGDIベースあたりのやつは根本的なティアリング対策は 無理。減らすにはダブルバッファリングして高精度なタイマー使う のがヨス。 スピードもGDI+でも丁寧に使えば大丈夫だろうけども、30とか 60fps要求で文字列を直接書こうっつーのはDirectXつかっても キビシス。WPFもちょっとトリックしているはずだし。
文字は変更するときだけビットマップに描画してそれを使いまわすとかね その辺は基本的にDirectXでも一緒だけど
すまんミスった
クラスのフィールドとか配列の中身をusingにするにはどうすればいいの?
フィールドは普通にできるよ 配列は諦めてfinallyでdisposeするかラッパー作る
いや配列でもリストでもなんでもOKみたい using (list[0] = new MyClass()) { }
>>185 ありがとうございます。
背景色を変更するには少し調べたところDataGridColumnsStyleを継承し、Paintをオーバライドしなければいけないようで面倒くさそうです。
「Age」の列の背景色がtextboxなどでReadOnlyをTrueにしたときと同じということから何かオプションがあるのだと思いますがよくわかりません。
何度もお手数をお掛けしますがよろしくお願いいたします。
>>212 usingはあきらめてtry〜finallyを使う。
this._image = null;
try
{
this._image = Image.FromFile(...);
// usingの中に書きたい処理
}
finally
{
if (this._image != null)
this._image.Dispose();
}
できましたー。
>>208 ありがとうございます。
ダブルバッファリングを採用したらちらつきが無くなりました。
タイピングゲームを作っているのですが、
Direct3DかDirectDrawを使うべきでしょうか……。
タイピングゲームくらいなら使わなくてもいけるんじゃないかなーと思っているのですが。
連投ごめんなさいorz
>>209 ありがとうございます。
ビットマップに描画の意味がよく分からないので、
ちょっとググってきます。
>>219 タイピングゲームなら30あれば十分じゃない?
でも、ちゃんとしたゲームにしたいなら文字も画像で書かなきゃいけなくなるだろうし
この際だからDirectX覚える方がいいかもね
>>209 じゃないけどビットマップに描画ってのはダブルバッファリングのことじゃないかな
いつもみたいに直接ウィンドウに描画するんじゃなくて
メモリ上のビットマップで描きたいものを整形して
ウィンドウには最後の最後一枚絵だけ描画させる
こうすることでちらつきがなくなって見える訳ね
>>221 ありがとうございます。
ManagedDirectXは一応使えるのですが、XNAなるものが出てしまったのでご無沙汰してます。
ぶっちゃけるとタイピングゲームくらいで面倒だなあ……
と言う理由でDirectInput以外使っていませんでした。
ですが、やはり使った方が後々良さそうですね。
もう一つ質問をさせていただきます。
Direct3Dを使えばダブルバッファリングは不要という認識なのですが、
それで問題ないでしょうか?
>>222 いや、どの程度本気かってことだよ
暇つぶしにちょっとやってみっかー位ならGDI+でやるのも乙だと思う。
初心者本とかだとGDI+で嬉しそうに円描いたりしてるが
ぶっちゃけ普段C#で組んでる上では殆ど使わないし、新しい経験になるだろう
ただ、公開しようとか考えてるなら初めからDirectX使った方が楽だと思うよ。
質問はちょっと意味がわからん。
ちらつきは人間の目の問題だからDirectXだろうがOpenGLだろうが必要だよ
GDIでやるより意識を軽く実装できるってだけの話し。
DxLibオヌヌメ
VisualC# 2008expressからVisual studio 2008proに乗り換えたんですが、何をするにしてもexpressより処理が遅い印象を受けます。 機能が多くなった分だけ仕方ない事でしょうか?
>>224 今もC++でお世話になってるわw
俺がC#でゲーム作らない理由の一つがそれだな
>>223 ありがとうございます。
確かに円描いたソフトなんて公開したことないですね……。
公開しようと思っているので、DirectX使います。
質問についてですが、ちょっとアホな子になってました。
すみません。
>>224 ありがとうございます。
C#用のDxLibってあるんですか?
C++やったこと無いんですよ。
ググってみます。
>>225 デフラグしてみたら、俺もそれやったけど変化は感じられなかったし。
>>205 GDIを使うときにちらつきを抑えるには、GDIではなく、描画先のコントロール(GDIではなくこちらに設定がある)をダブルバッファにして、背景再描画をオフ(仮想関数をオーバーライドする)にしないと駄目だよ。
ティアリングが問題になるようなら、フレームレートは上げるのでは落とすこと、その方が目立ちにくい。
ティアリング問題に関してはPCではお手上げだからあきらめる、XNAを使ってXBox360で開発する。
これについてはPCである以上、DirectXを使っても解決しない。
.NETのexeファイルって他のプロジェクトから参照させるとdllと変わらないんだな ばらまくプログラムはpublicにするかどうかちゃんと考える必要があるのか
>>230 実は.NETに限らずだが、その事実を知る者は少ないのかw
>>229 ありがとうございます。
それでやってちらつきは抑えれました。
ですが、DirectXを使ったプログラムを作ってしまいましたので、GDIは使いそうにありません。
申し訳ないです。
ティアリングについてですが、問題なさそうです。
C#用のDxLibあるんだな。 使ったことある人いる?
初歩的な質問なんですが、 子クラスを親クラスにキャストする事が出来るのはなんでですか? 親クラスを子クラスにキャストする事が出来ないのはなんでですか? 感覚的に、後者の方は大は小を兼ねる(親より子の方が大きい)のでキャスト出来そうですが…
親を子にキャストして、子にしかないメソッドを呼び出したら困るでしょ
両方できるだろ? 後者は暗黙には出来ないが。危険だからな。 . A 親 ↑ ┌┴┐ . B C 子 という継承関係があった場合、 A a; に入ってるインスタンスの本当の型は A, B, C の3つの可能性がある。 a を B にキャストした際、本当は A や C であるものが B にキャストされるなんてことも起こりうる。 その状態で B にしかないメソッドを呼んだりしたら・・・恐ろしいよね。 前者ではそういう問題が起こらない事については自分で考えれ。
>>234 ControlとTextBoxのメソッドの数をくらべてみ?
大と小が逆になってると思うよ。
>>234 オブジェクト志向(この単語出すのいやなのだが)の継承ってのは特殊化、
つまり、動物(親)→犬(子)みたいな関係。下に行くほど特殊なものになる。
犬クラスは必ず動物クラス(アップキャスト)だけど、動物クラスは必ずしも犬
クラス(ダウンキャスト)ではない。この例が抽象的過ぎると感じるなら、コント
ロール→テキストボックスとかでも思い浮かべてくれればいい。
継承は確かに拡張する感覚があるんだが、概念的には「狭める」方向に
進んでいくの。
239 :
234 :2008/04/27(日) 18:45:00
初めに思ったのは、 ・子から親へのキャストは、差分を知らない親だからキャスト出来なくない? ・親から子へのキャストは、キャストによって差分が拡張されるのだから当然出来るんじゃない? って直感的に思いました。 けど全く逆なんですね。 子クラスにあって親クラスにないメソッドが呼び出されたら…って考えたらその通りですね。 てことは親クラスにキャストされたら差分のメソッドは消えてなくなるって感じでいいんでしょうか? この「消えてなくなる」って感じがfloatからintへのキャストのように精度がなくなるかのようでもやもやしてました。
操作できる範囲が限られると考えるといいよ。
参照型はキャストしてもインスタンス自体の型が変わるわけじゃないから。
>>234 238の説明で正しいとは思うんだけどちょっとわかりにくい気もするのでおせっかいにも補足。
次のように考えたらどうだろう。
・「データ型」とは、そのオブジェクトが持つすべての機能の「お品書き」のこと。
・「オブジェクトaを型Bにキャストする」とは「aをBとみなして扱う」こと。
ラジオの設計図(親)に回路を追加(つまり継承)してCDプレイヤー付きラジオの回路(子)を
設計したとする。
このとき「CDプレイヤー付きラジオ」は、必要なら単に「ラジオ」として扱うこともできる。
なぜならラジオのすべての機能を継承しているから。
つまり「CDプレイヤー付きラジオ」は「ラジオ型」にキャストすることができる。
「ラジオ型」というお品書きに書いてある全部の機能を持っているから。
でも逆(「ラジオ」を「CDプレイヤー付きラジオ」としてあつかうこと)は無理。
仮に無理に「ラジオ」を「CDプレイヤー付きラジオ型」にキャストしたとする。
キャストした以上、それは「CDプレイヤー付きラジオ」として扱えなければならない。
つまり「CDプレイヤー付きラジオ型」のお品書きに書いてあるすべての機能が
こなせなければならない。
だが、ただのラジオに「CDを最初のトラックから再生開始せよ」とか、
「ランダム再生開始せよ」とか命令してもそれは無理難題だろう。
243 :
234 :2008/04/27(日) 20:01:15
>>236 と
>>241 のレスが気になったので調べてみました。
このコードがばっちり通ったので、「消えて」はなくならないみたいですね。
class Program
{
static void Main(string[] args)
{
SubClass obj = new SubClass();
SubClass obj2 = (SubClass)((MyClass)obj);
}
}
public class MyClass
{
}
public class SubClass : MyClass
{
}
なんとなく理解できましたけどこんな風に親から子へのキャストは元々子だったobjのようなインスタンス限定なのですかね?
それってコンパイラが覚えてくれてるものですか?
それともこういうキャストはやらない方がいいですか?(どれが親から子へキャストできるのかわからなくなりそうで…)
XNAって初めて見たけどすげーんだな!! おれってグラフ作成とか応用できるの?
class Parent{ public int A; public int B; } こういうクラスがあったら、Parentは int A用の領域4バイト int B用の領域4バイト こんな風になってる(だいぶ単純化した話だけど) これを継承してChildを作る class Child : Parent{ public int C; } こうすると、Parentにint Cが足される Parentの領域8バイト int C用の領域4バイト Parent parent = new Child(); ChildをParentにキャストするという処理は、 ChildのうちParentの領域8バイトだけを見る、ということで、 Childのデータ自体は何も変わらない。 Childの中のParentの領域だけを見れば、それはParentと全く同じなので、 Parentと同じように使える
継承の概念については、superclass/subclassという単語が的を射てるな 集合で考えれば、superset/subsetに対応するし
248 :
234 :2008/04/27(日) 20:28:29
>>246 よくわかりました!
具体的なものの方がイメージしやすいと思いました。(イメージできるって大切ですよね!)
>>245 ちょうど
>>246 と理解して書いたつもりですけどどこか間違ってますか?
(SubClass)((MyClass)obj);
はダウンキャストなので本来(?)ダメなはずなんですが
この例のように一度親クラスにキャストしたあとなら可能みたいなので疑問に思ったわけです。
コンパイラが覚えてくれるとか言ってるあたりでしょ それは全く見当違いで,ダウンキャストに成功するかどうかは実行時の問題
C系の言語だとintをfloatに「変換」するようなこともキャストというから
234みたいな混乱と誤解が起こるんだろうね。
結局234は
>>241 の指摘を理解せず、キャストとはintをfloatに変換するような
何らかのバイナリ操作を伴うものだと思い込んでるんじゃないか。
SlimDX
intをfloatに変換することに何か問題でも?
あんた何言ってんの?
32bit 同士だから MaxValue 近辺では普通に桁落ちしねぇ? まぁまったくそんな話じゃないが。
intからfloatへの変換でも値が失われることはあるよね
キャスト=変換だぞ。 ビット数の同じ整数型(ポインタを含む)同士の変換なら 内部表現形式が変わらないだけで変換はされている。
禅問答みたいになってきたな
参照型のキャストは見方を変えるだけ 動物⇔哺乳類⇔ゾウ みたいに
なんかよくわかってないやつも混じってるなw
261 :
256 :2008/04/27(日) 21:45:00
禅問答っつーかさ、変数名は入れ物に過ぎないってのを理解しないと。 C++のvoid *に相当するものが、Object。中になんでも入るけど、 中身が変換されてしまうわけではない。 static void Main(string[] args) { Object obj1 = "string"; Object obj2 = 0; Console.WriteLine(obj1.GetType()); //->System.String Console.WriteLine(obj2.GetType()); //->System.Int32 }
>>261 半分正しいが、それは「契約」という考え方を捨象してるだろうw
>>248 例えば、TextBox型のインスタンスをControl型にキャストしたとする。
これは単に「Control型の変数に代入した」だけであって、なんら変換などは起こっていない。
TextBoxをControlにキャストしたからといって、いきなり中身が消えちゃったりしたら変だろ?
実体がTextBoxなんだから、TextBox型にダウンキャスト出来るのは当たり前だ。
今から鈴木君を動物として扱います。 そして、このぬこを鈴木君として扱います。
>>247 サブクラスは全然部分集合じゃないだろ
むしろスーパークラスがサブセット
ふとC#の本を見てて驚いた。 インターフェースの既定のアクセシビリティはpublicって書いてあった。 が、少なくともvs2008/C#3.0だとinternal。 msdnのvs2005/C#2.0でもpublicって書いてあるから、C#2.0→C#3.0で仕様変更でもあったのかね
既定の「メンバ」アクセシビリティじゃね?
ほんとだ。 じゃあ単純に標準C#入門の216pが誤植か。
>>266 ふと気になったので。
サブクラス∈スーパークラスでしょ。
・多態性でスーパークラスのコレクションをforループする時。
・自己参照型構造体っぽくインターフェイスを作っておく時。
・一時的にアップキャストする時。
どの場合もサブクラスはより大きな概念のスーパークラスにキャストしてるべ。
266は概念じゃなくて使えるメソッドの数かなんかで考えてたんじゃね
272 :
247 :2008/04/28(月) 01:27:27
>>266 インスタンスの集合と考えると自然
{ o | o is Superclass } ⊃ { o | o is Subclass }
イメージとしては、生物の分類で界、門、網、…と細分化するのと同じ
>>270 記号の意味を間違えてないか
>>272 自分でもレスした後に気づいた。突っ込まないでくれ。
いいや突っ込むね!!
気色悪いな。 こういう連中がプログラマの評価を不当に下げている気がする。 いや、実際問題こういう感性が人間の平均とズレている奴が多いから 不当な評価じゃないのかもしれんが・・・
とりあえずマならその短絡思考、推論ジャンプなんとかしたほうがいいんじゃないか?
禿同
てst
280 :
167 :2008/04/28(月) 16:44:10
4回目って何の4回目? ステップ実行とかしてみた? あとまだ中までは見てないんだが while (true) { if (coin < 3) { break; } こうするくらいなら、 while (coin >= 3) でいいべ
あと、配列の添字は 0 からな。 したがってfor文も 0 で初期化でいいべ
283 :
167 :2008/04/28(月) 17:31:28
>>281 ありがとうございます。
おかげでちょっとだけプログラムがすっきりしました。
>>282 言われたとおり0にするとちゃんと動くようになりました。
ありがとうございます。
通常のグラフィックの描画はうまくいったのですが タイマーでtimer1_Tick()のとび先で描画すると windowを手動で画面外へ出してもどすということをしなければ 画面更新できませんでした。 VbでのPicture1.Refreshにあたるような命令はありますか?
Invalidateとか
286 :
284 :2008/04/28(月) 18:29:07
g = Graphics.FromImage(_bmp); で定義してあるもんで 探すと this.Invalidate; の使用例ばかりでてきて どうInvalidateしていいにかまだ・・・ もうちょっと調べてみます。
ただ Invalidate(); だけでいいんですね できました。 ありがとうございます。
それ呼び出してるのは多分Formだと思うけど フォーム全面を再描画要求する必要があるの? とか
>>288 そうですね _bmpだけ更新したいのですが。
ところで
timer1.Interval = 100;
この値をいくつに変えても間隔が全くかわらないのですが。
他になにか記述が必要でしょうか?
>>289 > そうですね _bmpだけ更新したいのですが。
違う。
ディスプレイに描画する責務があるのは画像じゃないだろう?
その画像を表示するコントロールが指定された画像をディスプレイに描画する。
つまりその画像を表示するコントロールのInvalidateを使えってこと。
なのでそのBitmapをたとえばForm.BackgroundImageに指定してるのならForm.Invalidateで正しい。
> ところで
> timer1.Interval = 100;
> この値をいくつに変えても間隔が全くかわらないのですが。
そんなことはないが。
どこかでうっかりIntervalを再設定してるとか?
Intervalの単位を勘違いしてるだけ に全部
Interval の件 Form1_Load から別の場所に移すとうまくいきました。
D3DXCreateTextureFromFileExはManagedDirectXにはないのでしょうか?
TextureLoader.FromFileの引数の多いオーバーロードはそれに当たる
>>294 ありがとうございます。
後でやってみます。
293です。 TextureLoader.FromFileの最後に引数は何を意味しているのでしょうか? 255やら0やら適当に入れても動くので問題ないのですが、 きちんとした意味を知りたいのですが……。
> colorKey > 型 : System::Int32 > 透明な黒で置き換えられる値。カラー キーを無効にする場合は 0 (ゼロ) を指定します。 > ソース イメージの形式とは関係なく、colorKey は常に 32 ビットの ARGB カラーです。 > アルファは有意であり、通常、カラー キーを不透明にする場合は FF に設定する必要があります。 > たとえば、不透明な黒の場合、値は 0xFF000000 となります。
>>298 ありがとうございます。
もっとググる能力鍛えないとなあorz
MSDNも活用しきれない……。
英語版のほう見ないと大抵まともな情報ないよ
ちなみに
>>298 のはMicrosoft.WindowsMobile.DirectX.Direct3D名前空間の方の解説
301 :
デフォルトの名無しさん :2008/04/29(火) 10:20:16
お世話になっております。 fileversioninfoで取得したバージョン文字列を比較する方法ってどうやるんですかのう・・・ stringのcomparetoだとうまくいきそーもないです・・・ comparetoだと例えば、 1.0.15.0と1.1.5.0を比較すると、1.0.15.0が大きいって結果になっちまいます。
Versionオブジェクト作ってやればいいよ Versionクラスは比較演算子もオーバーロードしてる
!! マヂですかー。 ありがとー つД`)
304 :
デフォルトの名無しさん :2008/04/29(火) 13:12:04
C#(というか.NET)ではどのようなDBエンジンがありますでしょうか? ・使いやすいと思われるもの ・WindowsXP以上でインストールなしで利用可 のものを教えていただけないでしょうか? ぜひあなたがお使いのものも教えて頂きたいです。
C#で整数の除算はバックスラッシュとありますが入力できません。 \ではエラーになってしまいます。 どうすればいいですか?
C#で整数の除算はバックスラッシュではありませんよ
>>300 ありがとうございます。
英語中学レベルくらいしかできないんですよね……orz
日本ももっと情報充実しないかなあ
>>304 sqlite.NETとか。
sqliteをADO.NETのクラスでラップしたもので、特徴はsqliteに準ずる。sqliteのバイナリも内蔵しているから、DLLひとつ参照設定するだけですむし。
sourceforge.net/projects/sqlite-dotnet2
>>306 どう書くんでしょう?
関数やキャストを使わなければだめですか?
バックスラッシュを使うというのはどこから持ってきたのか。 「整数の除算」とは、具体的に何を差すのか。 / ではいけない理由を書かないと誰にもわからない
スラッシュとバックスラッシュを勘違いしてるだけだろ
ManagedDirectXで、 テクスチャが多くなるとメモリ使用量が多くなって困るのですが、 1画像に1テクスチャはおかしいのでしょうか?
>>310 型指定するんですね わかりました。
>>311 検索でVBのが混ざって出てきてしまいました。 VBでは'5 \ 2'ですね。
小数点を出さずに 5 \ 2 = 2 と余りを切り捨てる除算のことです。
型指定てのが何を差してるのかだけど、 両方整数型なら / はそのまま切り捨てられる。 逆に最終的に代入する型が浮動小数点だったとしても、 式の途中の整数演算は切り捨てられるから要注意。 例えば 1+8/3 =3 1.0+8/3 =3.0 1+8.0/3 =3.6666666666666665 ※小数点が付いているのは浮動小数点型
>>314 int a = 5 / 2 ;
Console.Write(a);
ReadKey();
これをコンパイルしてみろ
>>304 RDBMSに拘らず、データが保存できれば良いだけならLinq to XMLという選択肢も
先生ども、質問です。 Process[] ps= Process.GetProcessesByName("TARGETPROCESS"); // --- 見つかったプロセスに対する処理 ---- for(int i= 0; i< ps.Length; i++) { ps[i].Close(); ps[i].Dispose(); ps[i]= null; } ps= null; System.Threading.Thread.Sleep(1000); System.GC.Collect(); ↑を、定期実行してるんですが、メモリが開放されないっぽく、メモリ使用量がウナギのぼりです。(´・ω・`) 何か足りないですかね? ちなみに、開放されないのは GCのTotalMemoryを参照して確認したですよ。 コメントの範囲の処理をコメント化して、上記のコードだけでも開放されてないス(´・ω・`) 上記コードをコメント化するとメモリの増加は抑えられます。
GCてのはメモリが足りなくなって初めて動きます
>>307 こういうドキュメントは中学程度の文法で十分読めるよ
>>320 なるほどー!
ありがとうございました。
ちょっと放置して状態をしらべてみようと思います。。。
GC.Collect()はGCの強制実行だろ
>>319 プロセスに対する処理がサンプルコードなのかもなんだけど、
CloseMainWindow()してKill()してやらないと
メモリ解放できずにプロセスが終わっちゃってたりしないのかな。
全然関係無いかもしれないけど。
一般的な言語なら知らなくても、大抵書いてあることの意味はある程度想像が付くけど、 C#の場合例えば void hoge(string fileName) { Invoke((MethodInvoker)delegate() { var file = Files.Find(item => item.FullName == fileName); if (file != null) file.hogehoge(); }); } とか書かれると、まるで意味不明になるのが諸刃の剣
もうちょっとしたら一般的な言語にもラムダが実装されるよ
どれとどれの諸刃なんだ?
>>326 正直全然イミフなコードに見えん。
というかそれ以前にそのコードは書いた人の意図も見えんので糞サンプル
だと思う。
varでがやがやしてた時も思ったが「で?」っていいたくなるような
無理矢理書きましたみたいな役にたたんサンプル作るやつが多すぎる気がするよ。
byte配列を構造体にキャストして使用したいと思っています(VS2008 .NET3.5使用) 色々調べた結果、下のような処理になったのですが、もっとC#らしい(?)やり方が あったりするのでしょうか? 目的は「配列をある型を通してアクセスしたい」で、構造体でなくても問題はありません。 using System; using System.Runtime.InteropServices; namespace ConsoleApplication1 { class Program { [StructLayout(LayoutKind.Sequential, Pack = 1)] unsafe struct MyStr { public fixed byte pathName[3]; public short sval; public int ival; } static void Main(string[] args) { byte[] buf = new byte[] {0xFF, 0xFF, 0xFF, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xFF, 0xFF, 0xFF, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0xFF, 0xFF, 0xFF, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12}; unsafe { for (int i = 0; i < 3; i++) { fixed (byte* p = &buf[sizeof(MyStr) * i]) { MyStr* myStr = (MyStr*)p; short sval = myStr->sval; // このようにアクセスしたい } } } } } }
きめえw
>>330 > byte配列を構造体にキャストして使用したい
っての自体がC#らしくない
キャストじゃなくて普通に代入するといいと思うよ
>>330 無いと思いますよ、基本XML、もしくはバイナリフォーマッターを通して
環境依存を可能な限り避けるが基本方針ですから。
もうひとつ、構造体の内部情報に直接アクセスできないのはセキュリティーの問題もあります。 private にしておいたデータを外から改ざんされないようにする為です、ネットワークを通じてコピーするようなケースは重要。
要はCでいう共用体的に使いたいという事か
C++からこちにに来ればいちばん最初に考えて、アレッてなる所だからな Win32APIとの相互運用のために各種機能はあるが、キッパリ諦めるが正解。
338 :
330 :2008/04/29(火) 23:47:19
やっぱりらしくないですよね 1.TCPでの受信や、ファイルにバイナリで保存されているデータの先頭を、ヘッダ構造体にキャスト 2.上記キャストしたデータ中にある、データ種別を取得 3.ヘッダ以降のデータを、上記データ種別毎の構造体にキャスト 4.データ種別毎の構造体を通してデータにアクセス (ヘッダにあるデータ数分ループしたりもする) 5.データの構造が変更になった場合は、構造体を変更すれば既存部分は変更無し こんな処理をよく作っていて、それをC#に移植しようとしていました。 もう少し色々なサンプルを見てみようと思います。 ありがとうございました。
>>338 System.Runtime.InteropServices.Marshalクラス内に使えそうなの無い?
PtrToStructureメソッドとか。
>>338 わざわざ自分で作ろうとしないで、素直にSOAPなり使ってWebサービスとして実装したほうが楽チンな予感が・・・
>>338 データのバイナリ構造を定義するDSLと、
それを使ってバイトストリームを処理するコードに分けて考えればいいんじゃない?
あと、C言語の場合、確かに構造体定義はバイナリ構造の定義に転用しやすかったけど、
そういう用途に最適だったとは言い難いよね。
パディングやアライメントに関してはコンパイラ拡張でごまかしてるし。
バイナリファイルの読み書きかと思ってたよ。 ネットワーク腰の場合はunsafe等を使うとアプリやライブラリの融通が利かなくなってくるから、全面改訂した方が今後の為かと・・・ 全面書き換えを強くお勧め。
初めはStructureToPtrを使用してと考えていたのですが、
>>330 のようにループしながらキャスト位置を変えて処理
という事がしたくて、
>>330 のようなロジックになりました。
今もMarshalクラスを見直していたのですが、なかなか難しいですね
やぱり根本的な考え方を変えないと難しそうですね
>>339-342 さん、色々とアドバイスありがとうございました。
>初めはStructureToPtrを使用してと考えていたのですが、
>
>>330 のようにループしながらキャスト位置を変えて処理
>という事がしたくて、
>>330 のようなロジックになりました。
StructureToPtrを使ってもできるから使わない理由付けとしては弱いが。
346 :
デフォルトの名無しさん :2008/04/30(水) 07:36:11
>>345 http://msdn.microsoft.com/ja-jp/library/ms162529 (VS.80).aspx
> このメソッドは、開始タグと要素の内容を順に読み取り、リーダーを終了要素タグの後に移動します。
Indentedにしない場合は商品名ノードでReadElementContentAsStringを呼んだ直後に
XmlTextReaderの位置が価格ノードの先頭に来るけど、そのままwhileの次のループにいって
Read()してしまうので価格が正しく取得できてない。
Indentedの場合、ReadElementContentAsStringを呼んだ直後は商品名ノードの後ろかつ価格ノードの前にある
空白要素(改行)にいるので正しく取得できる。
>>346 C++というより、ほとんどWin32API
MSDNライブラリとかググりながら何やってるか調べてみればいい。
.NETでもほとんどは結局API呼び出してるし、憶えて損はない
APIを呼び出す方法はP/Invokeかなんかをキーワードにググってみれ。
唯一俺には謎なのがListView_GetItemPositionやるためだけにVirtualAllocExやってることだけど。
LVM_GETITEMPOSITIONをSendMessageするだけじゃだめなのかな?
試してみるぜ。
>>348 プロセス越しにポインタ扱う場合は必須よ。
lParamがPOINT*で位置を返してくるからね。
クラス勉強してから関数を勉強したのですが クラスと関数の違いがよくわかりません どんな違いがあるのでしょうか?
>>351 もう少し具体性のある質問をしないとまともな回答は付かないと思うぞ。
C#が始めてのプログラミング言語なのか?
もしそうならC#での関数は必ずクラスのメンバとして記述する必要がある。
深い悟りを開けばクラスと関数に違いはないと言えるようになるかも知れない
全く定義の異なるものが同じに思えるとは悟りの境地ですな。
>>351 真面目に答えると(いや本当)違いがわかるまで勉強する、が正しい。
本当は先にC(別にVBでもいいんだけど)の構造体を理解してるとクラスの意味を理解しやすいんだけどね。
クラス=構造体+関数
なんでやねん。
関数を遅延評価するとクラスになる
Cの関数 = C#の静的メソッド
歩く(人間1, 3歩); 走る(人間1, 5歩); 止まる(人間1); こう書くより, 人間1.歩く(3歩); 人間1.走る(5歩); 人間1.止まる(); こう書いた方が自然でしょ ただそれだけのこと
今15歳です 今年プロコンに出ることになったのですがほとんどプログラミングできません (cでifwhileがほんの少しわかるくらい) 先輩がこのゴールデンウィーク中にできるだけc♯を覚えて来いといわれました 開発環境はvisual c# 2008です できるだけ短時間でわかりやすい(書けなくてもいいからコードが読めるようになる) サイトを教えてください
ならアンタ教えてくれよ、ってその先輩に言えばいいじゃん。 なんといっても人に教わるのが一番早いよ。 まあ「教師」がアホならそうとも限らないが・・・ それがダメならどんな糞本でも書籍を読んだ方がいい。 web上のテキストなんて(個人差もあるだろうが)長時間読む気しないでしょ。
>>365 それは先輩が正しい。
ぐぐって出てくるところ、並みの本より情報そろってるぞ。
そうかな。 初心者がweb上の断片的な情報から体系的に学べるわけないと思うけどね俺は。 まあ@itの連載とか「猫でもわかる」みたいなある程度まとまった文章もあるにはあるが。
そうかな。 初心者が本の断片的な情報から体系的に学べるわけないと思うけどね俺は。
どうせベターCとして使うんでしょ?
なんで頭悪い奴の振る舞いってのはこうも類型的なんでしょw
この間プログラミングを初めて始めた俺は本の方がわかりやすいと思ったよ
自分に合いそうな学習方法を選択できるならすればいいし できないなら言われたようにすればいい。
根拠も 無い無い
>>362 を見る限り,GUIを使うためだけにCじゃなくてC#を使うだけなんじゃないの
またプロコンか・・・
enumの要素数を取得するいい方法ありませんか?
Enum.GetValuesでいいんじゃね
>>378 Enumのstatic メソッドにあったはずと思うが。。
381 :
デフォルトの名無しさん :2008/05/01(木) 00:32:19
>>362 まず日本語書けるようになれ。
まじめな話し人に質問する時は書き込む前の推敲くらいしてこい
優しさがねえなあ
どうでもいいが書けないけど読めるっていうのはどういう状態なんだろうな
書くより読むほうが難しいなたいがい
>>382 じゃないがコメントが日本語で書かれてるはずなのに日本語じゃないやつとか居るしなw
>>362 俺はプログラミングWindowsのC#編で勉強したわ
C#はこれといって難解な言語という訳じゃないと思うが
まるっきり書けないやつだと意味わからない機能(なぜ作られたのか、とか、何ができるのかとか)は多いだろう。
どの程度のレベルの学校か知らんが、正直一週間でプロコンでどうこうできるレベルになるのは無理。
>>384 わかりやすく国語に例えるとこういうこと
薔薇、憂鬱
独習C#と、オライリーのプログラミングC# どっちか読もうと思うんだけど、どっちがいい?
>>387 いや、少なくとも読むためには構文理解しなきゃだめだろ?
構文理解したら、遅いとしてもヘルプ読みながらなら書けるだろ?
英語じゃあるまいしフィーリングで読むか?当たりを付けて読むのはありだが。
C#でDictionaryの値の更新について、分からないことがあります。 Dictionary<int, int> a = new Dictionary<int, int>(); a.Add( 1, 1 ); a.Add( 2, 1 ); foreach ( int key in a.Keys ) { a[ key ] = 2; } というコードを書いたんですが、二つ目の要素を更新する際に、 System.InvalidOperationException: コレクションが変更されました。列挙操作は実行されない可能性があります。 という例外が返ってきました。 foreachの中でコレクションに追加、削除した場合にこの例外が発生するのはわかるのですが、 要素を更新した場合でも起こるのでしょうか。 また、であれば、Dictionaryの一括代入(例えば初期化)はどのようにすればいいのでしょうか。 よろしくお願いいたします。
確認してないけど、とりあえず思い付きで KeysがIEnumerable<>あたりになってるんだろうから、 ToArray()してみるとか一時変数に入れてみるとか
>>391 KeysをToArray()はできないようです。
というか、Dictionaryの値をかきかえているのに、KeysをToArray()したり一時変数に入れたりするのですか?
>>391 あ、一時変数入れたらできたみたいです。
ありがとうございます。
ちなみに、Keysを書き換えている訳ではないのに、なぜ怒られたのでしょうか。
>>309 それってDictionary<string,string>でも起こる?
>>388 独習C#はお勧めしない。その2つならオライリー。
オライリーも章構成がおかしい気がするけど。
もうそのガキ臭い名前だけで見る気しないんだよね俺なんか。
ITmediaの連載でいいんじゃね 俺はその後プログラミング.NETFramework読んで学んだ
すいません VS2005 のデバッガで、ある変数の値が変化したときにブレイクインするようなことってできますか? ある変数が意図しない内容に変ってしまうので、追跡をしようかと思っています。
それってC++のほうにしかなかったような。 setter 使ってるならそこで止めればいいだけだけど、そうでないならログ出力かなあ
>>403 のレスをヒントに、変数をプロパティにして、そこでブレイクして呼び出し履歴で確認しました。
考えれば当たり前なのですが、気づきませんでした。
ありがとうございましたm(__)m
条件付ブレイクってできたよな なんか今探しても出てこないんだがExpressだからかな
Ctrl+B で無理なら知らん
pdbファイルというのが勝手に作られるのですが、 これは消しても問題ないのでしょうか?
それはデバッグ情報。しないなら問題ない
数値演算のプログラムを書いたのですが、 .NET2003 と .NET2005 で同じソースを実行しても 計算結果が若干異なります。なぜですか。
浮動小数点数に精密さを求めちゃなんねぇぜ(誤差をきっちり考慮して記述した場合を除く)
>>414 ソース準備にはちょっと時間かかりますが、
.NETユーザには常識かどうか知りたかったのです。
>>405 [Conditional("DEBUG"), DebuggerHidden]
static void BreakIf(bool condition) { if (condition) Debugger.Break; }
こういうの作っとくと便利だよ
ヒットカウントもラムダ式で簡単に作れる
>>415 コンパイルオプションの確認は当然してるよな
>>417 していないです。。どういうオプションなら計算結果変わるのですか。
こいつ、バカだろ。
VC++にはあったけど、C#にもあるんだっけ
>>414 どう考えても原因はアプリだろ。仕様です。
>>421 頭オカシイ人?w
自分で何を言っているか理解してるかい?
とにかく、さっさとIL晒せや。
>>412 が正解
Java strictfp でぐぐれ。
多分.NET 2.0からJITコンパイラがSSEガンガン使い出したので
そのせいで結果が変わったんだろう。
>>424 そんなはずねえだろ、と思うけどな。
もっとも、実装方法によって誤差が変わる算術関数の話をしてるのなら不思議はないけど。
少なくとも普通に四則演算の組み合わせなら変わるわけがない。
>>425 特に除算に関してはプラットフォーム間の差異が激しいぞ。
一部の RISC には除算命令が存在しない場合だってあるし。
>>424 それだと2005と2008で結果が異なるのはおかしかろう。
とにかくソースがないことには検証できっこない。
>>425 >少なくとも普通に四則演算の組み合わせなら変わるわけがない。
x87 FPUは80 bitの浮動小数点数レジスタ(スタック)を持っている。
floatだろうがdoubleだろうが、スタックに読み込まれたら80 bitに拡張される。
スタック同士の演算精度をどれぐらいに保つかはFPUコントロールレジスタで制御される。
高精度演算モードだと、float同士の演算も80 bitで行われることになる。
ただしメモリに書き出すときには自動的に丸められる。
結果的に、レジスタ上で演算を繰り返す限りは
データ型のサイズに関わらず拡張doubleの精度で演算が行われることになる。
一方、SSEのレジスタは32 bitと64 bitを厳密に区別している。
JITコンパイラが最適化を行った結果、
floatの演算がSSEレジスタ上で演算を繰り返す場合、
中間状態は常にfloat精度ということになる。
演算途中の格納精度が異なるため、単なる四則演算でも演算結果が変わることがある。
もちろんどの環境でも同じコードにJITコンパイルされるなら同じ結果が得られるようになる。
が、.NETにそういう仕組みはない。
>>429 x87命令だけでもメモリへの書き出しを行うかどうかで変わるから厄介かな。
例えば次のコードをVisual C# 2008でReleaseビルドすると、
F5実行とCtrl+F5実行で結果が違う。(64 bit環境の人は同じになるかも)
同じILというだけでは計算結果が同じことは保証されないよ。
float x = 0.00000000000001f;
float y = 1.0f + x;
float z = y -= 1.0f;
Console.WriteLine("is x zero? {0}", z == 0);
CLRのバージョンが変わって、
最適化のパターンが変わると、同じILであっても計算結果が変わっておかしくないかな。
431 :
デフォルトの名無しさん :2008/05/02(金) 11:25:16
decimal使うんではだめなの?
メモリをたくさん使うからじゃね? 3日前にプログラミング始めた初心者だから知らんけど
退路を確保したすばらしいレスですね
仕様ですと言い切る強い心を持て
仕様ですみません
仕様ですすみません
仕様ですすすみません
ソース晒さないバカだから、ネタだろ。
>>429-430 昔の常識は通用しないのなスマン。。
まあPCの実数の扱い方知ってれば普通はそれでも無問題なんだけど。
演算の結果についてナニがどこまで保証されてるのかってドキュメントになってったっけ?
ゲームのリプレイデータの互換性とかでも問題になっていた気がする
441 :
デフォルトの名無しさん :2008/05/02(金) 13:03:37
ソースが用意できました。 void tmpcalc() { double a = -0.00000717; double b = 0.446; double c = 0.100; double d=1.248; double result; double e1 = 124.0 *(1.0/12.0); //double e2 = 124.0 /12.0; result = ((a * e1 + d) * Math.Exp(-b * e1) + c); //result = ((a * e1 + d) * Math.Exp(-b * e2) + c); //NET2005 result = 0.11243570180467005 //NET2003 result = 0.11243570180467004 } これだけだと微小な差ですが、最終計算結果はかなり変わってきます。 他に原因あるかもしれませんが、ひとまずソース書きます。
コンパイルオプションは同じ?
> 最終計算結果はかなり変わってきます。 浮動小数点は誤差があるのを考慮して、 計算順序等を考えるのが基本
コンパイラやコンパイルオプションが変わると 全く同じ計算順のコードにコンパイルされるとは限らないから、 コンパイラ変わるとそういう誤差が出るのは仕方が無い。 ほぼ差がない値同士の差での割り算が式に含まれてると、 凄い大きな値になるというのと組み合わせて考えると、 最終計算結果が大きく変わるということは十分あり得る話。
カオスの再発見ですね、わかります
バタフライエフェクトですね、わかります
風が吹いて桶屋が儲かったんですね、わかります
桁落ちでググ(ry
449 :
デフォルトの名無しさん :2008/05/02(金) 15:02:44
>>442 特に注意するコンパイラオプションはどれですか?
で、再現した奴いるの?
つまり狼少年ってことですね、わかります
ということにしたいんですね、わかります
>>441 変わらないところを書いても意味無いぞ、変わるところが重要なところだ。
大抵、足し算・引き算のある場所、1/x や log では、無限大の周辺に問題は集中するから追ってみろ。
例1
double s = 0 ;
double dt = 0.00001 ;
for( int t = 0 ; t < 100 ; ++t )
{
s += f(t) * g(t) * dt ; // こういうのを見つけたら += の部分を追ってみろ、大抵ここで起こる。
}
例2
x = 1.00001;
y = (x*x + 2*x - 1)/(x*x - 1); // 分母が 0 近傍で、分子も 0 近傍だ、こういう時は log を取って足し算・引き算に書き換えろ。
>431 誤差が出てはいけない状況では普通にdecimal使ってるだろ。
>>455 十進数で割り切れる場合のみの有効な誤差無しを使ってどうする、一度基礎から勉強しなおしたほうがいいぞ。
>>454 確かにそうですが、2003/2005 両方比較していくのは
なかなか難しいです。連休明けに調査再開します。
ありがとう。
ILの差分みればいいんじゃね
Win32APIのPathCompactPathを使用してステータスバーに収まるようにパスを表示したいのですが 第1引数に何を渡せばいいのかが分かりません。 どうかご教授のほどよろしくお願いいたします。
460 :
459 :2008/05/03(土) 09:12:17
StringBuilder str = new StringBuilder(fileName); Graphics g = this.statusStrip1.CreateGraphics(); PathCompactPath(g.GetHdc(), str, this.statusStrip1.ClientSize.Width); this.toolStripStatusLabel1.Text = str.ToString(); で自己解決しました。 お騒がせしました。
GetしたものはReleaseしなくちゃ CreateしたものはDisposeしなくちゃ
結局、ガベコレというのは幻想でしたね。
それなりには役に立つよ
WinFormのオブジェクトがアンマネージドリソースを
抱えすぎているのは構造的な欠陥だとは思うな。
そのせいで
>>462 のような論調が後を絶たない。
WPFを見るとわかるけどほとんどDisposeは不要になってる。
WPFは普及しない。なぜならDisposeが不要だからだ。
じゃあManageDirectX普及してくださいよ……
そんなものはありませんでした
わかります
>>464 そもそもその「
>>462 のような論調」が的外れだと思うんだけど。。
Disposeが必要かどうかはアンマネージリソース使ってるかどうかと
関係ないだろうw
あんた何いってんのww
469はDisposeが必要な設計になってるのがおかしいと言いたいんだろ
もうぬるぽでいいよ
>>471 違うよw
そもそもGCとは「リソース管理の自動化」と「リソースの効率的な活用」という
二つの二律背反の命題を両立させる銀の弾丸ではない、ということ。
なんでStreamReaderとかってGCしてくれないの?
「俺様」がストリームを使わなくなるタイミングをエスパーして自動で閉じろっての?
放置しとけばそのうちGCされるときに呼ばれるファイナライザ内で閉じられる でもそんなの気持ち悪いでしょ? GC云々とはまた別の問題
全然気持ち悪くない。それが理想のプログラミング。 自分で破棄なんて旧世代の考え
理想と現実 だいぶ違うから 夢から覚めなさい〜
>>477 統合失調脳だねw
だからお前がいつファイルならファイルを閉じたいと思っているかはコンピュータには
ワカンネエの、わかる?
いや本気で、統合失調の奴もこういう思考をするんだよね。
「思考盗聴」とかなんとか言って、自分の思考が読まれてると感じられるらしいw
というか、477の頭には他のスレッドとか他のプロセスのことがないのかもしれないね。
>>475 オブジェクトが参照から外れたら閉じてくれてもよさそうじゃね
>>477 あほか?閉じる処理自分ですべき。それ以降はGC。
>>482 その「オブジェクトが参照から外れた」を確認するのにコストがかかるんだよ。
↑は448へのレス
なんだこのスレ リアル厨が休みで荒れてきたか?
スコープから外れる度に参照をスキャンするのは効率が悪いな まぁusingあるんだからそれで良しとしようや
そのうち無停止GCが並列処理して参照から外れたものをバンバンFinalizeしてくれるようになるさ
C++/CLIは、スコープを抜けたら自動的にDisposeを呼んでくれるんだけどね。 ただし、参照じゃなくて、ローカル変数として宣言した場合だけど。
あれはどう考えてもわかりにくくないか わざわざブロック切ってusingみたいにしたくなりそう
C#にはコピーコンストラクタがないから、 デフォルトで勝手に捨てられるようにすると不便。
>>492 従来のC++と全く一緒だから、分かりにくいことなんてないでしょ。
/* C++ */
class C;
{ C c;
} // destructed
{ C* c = new C();
delete c; // destructed
}
/* C++/CLI */
ref class C;
{ C c;
} // disposed
{ C^ c = gcnew C();
delete c; // disposed
}
/* C# */
class C;
{ using(C c = new C()) {
} // disposed
}
{ C c = new C();
c.Dispose(); // disposed
}
deleteしなくていいんだよ C++ではローカル変数に作ったものはスコープを抜ける時にデストラクタが呼び出される
えーと…
C++の知識がなくて困っているのは分かったから、C++のスレでやれよ
だから、 C#: using(var fileStream = new FileStream("hogehoge.txt")) { ... } と C++ FileStream fileStream("hogehoge.txt"); ... は等価で、C++ではスコープを抜ける時に勝手にDisposeされる
>>498 DisposeするのはすでにC++じゃないし、C++の知識がなくて困っているのは分かったから、C++のスレでやれよ
↑話を理解してない馬鹿
スレのタイトルも読めないバカに言われたくはない
502 :
デフォルトの名無しさん :2008/05/03(土) 18:37:15
↑話を理解してない馬鹿
すまん
>>494 と同じこといってた
サンプルを誤解してしまった
ひどい荒らしだ
今後は、これで決定だよ、ウザイものは全部なくなって終わり。以上終了。 >WPFを見るとわかるけどほとんどDisposeは不要になってる。 >そのうち無停止GCが並列処理して参照から外れたものをバンバンFinalizeしてくれるようになるさ
506 :
デフォルトの名無しさん :2008/05/03(土) 19:03:09
CPUはマルチコアがトレンド、この方向性に沿わない物は遠からず消えてなくなる運命 マルチスレッドで全部のオブジェクトについて把握しきってDisposeしろとか無茶もいい所だよ。 GCも遠からず並列処理が入るだろう。
507 :
デフォルトの名無しさん :2008/05/03(土) 20:02:23
if(myForm.showdialog()==DialogResult.ok) ~~~~~~~~~~~~~~~~~~~ このDialogResultみたいなのを自分で用意したいのですが、 これってなんていう型?になるんでしょうか? 構造体みたいな定数みたいな・・・
enum
509 :
507 :2008/05/03(土) 20:38:23
510 :
167 :2008/05/03(土) 21:24:21
Console.Write("")のなかに文章をかいたのですが、 内容がながくて編集部分がひろがってしまい、そのうえみにくいので 右端で折り返したいのですがどうすればいいですか? (出力時ではなくてコードをかいているときです) ちなみにMicrosoft Visual Studio 2008をつかっています
"" "" ""
512 :
510 :2008/05/03(土) 21:30:25
すいません511さんの言うとおり(?) 改行して""で囲んだのですがエラーがでました。 お願いですが実際に例をみせていただけないでしょうか?
"..." + "..."
改行したならプラスを付けなきゃ "foo" +"bar" +"baz"
515 :
510 :2008/05/03(土) 21:41:52
513様ありがとうございます。
516 :
510 :2008/05/03(土) 21:44:44
連スレすいません、もうひとつ質問です if文で真の場合に処理AとBをして偽の場合は処理Bをするとしたら ・goto文を使う ・真のところにも偽のところにも処理Bを書く のどちらがよいですか?おしえてください
>>516 trueでもfalseでもBをやるなら、ifの外に置けば?
if (・・・) {
A
}
B
if(foo == ture){A;} B;
if(...){ 処理A; } 処理B
if(条件) { // 処理A } 処理B
521 :
510 :2008/05/03(土) 21:48:53
ありがとうございます。
510、大人気だな。
>>507 WPFではbool?を返してくるようになったからそっちにしてもいいかも
524 :
510 :2008/05/03(土) 23:50:15
あと、お金がないのでカンパお願いします。m(_ _)m
>>524 口座番号書いとけば、物好きが振り込んでくれるかもよ。
526 :
510 :2008/05/04(日) 00:01:39
あと、彼女欲しいので女の子紹介してください。m(_ _)m
527 :
510 :2008/05/04(日) 00:37:23
とりあえず今からオブジェクト指向について学びたいので 俺みたいな厨房でもわかる解説サイトおしえてください
528 :
510 :2008/05/04(日) 00:46:40
口座は持ってないので電話番号書いておきます 0120-・・・
おまえら初心者向けのスレで悪ふざけは程々にしとけよ
530 :
デフォルトの名無しさん :2008/05/04(日) 13:08:43
>>318 >>308 遅レスですが、ありがとう。
SQLiteの.netラッパーもあるんですね。検討してみます。
既存のでかいプロジェクトを開いたときに エントリポイントってどうやって探すものなんでしょう? アセンブリ情報のスタートアップオブジェクトは「なし」 だったんで、Main( を検索しちゃいました。
それでいいんじゃねえの
そういえばいつも思ってたんだけど、グローバル関数、何で採用してないんだろC#。 エントリポイントの構造に未だに気持ち悪さを感じるんだが、 仮にエントリポイントが単体で定義できてしまうとかえって気持ち悪いのかな?
メソッドを見てもそれがどこに定義されてるのか分からないのはよろしくないということなんだろう そんなこと言っても拡張メソッドはまさにそうなんだけども
アプリケーション/プログラムクラスのプライベートメソッドというのは 個人的にはしっくりくるんだが…
Static関数じゃ不満なの?
不満だねえ
名前空間やめてpartial classの内部クラスにしちまえばいいんじゃないの
いままでC言語鹿経験無くて これからC#始めたいと思ってるのですが CとC#の違いを解説しているサイトなどが あれば教えていただきたいです
541 :
デフォルトの名無しさん :2008/05/05(月) 08:36:10
ない
>>540 C の経験ないんだったら素直に C# 入門サイトだけ見りゃいいと思う
確かに知らないものと比べても意味ないなw どういう意図なんだろ。
わざわざより理解の難しい言語との違いをなんで求めるか?
鹿はしかなんじゃないのか?
取りあえず猫C#をやってる始めたばかりの者ですが、この本ではメソッドの修飾子は全てpublicになっています。 別の入門サイトでは、基本的にprivateが推奨されているという記述があったのですが、 どちらが一般的なのでしょうか?
>>546 基本はprivateだよ。
なんでもpublicにするのは悪い作法。
クラス外部からアクセスさせるメソッドだけをpublicにする。
>>546 基本的にprivateが推奨されているのはメンバ変数。
メソッドがpublicなのは普通。privateメソッドを定義するのも普通。
あー確かに公開する必要のないメソッドまでpublicにする必要は無いですね。
>>548 は訂正します。
>>543 ではDelphi使いのためのC#入門というのはあるでしょうか?
Delphi使いならカンで使え、作者は同じだ。
Delphi歴は趣味で10年程度(DBは知らない)、C#に触り初めて4ヶ月の俺的印象 言語としてDelphiと大きく違うのは ・完全オブジェクト指向(グローバル変数・関数がなく、int含め全ての型がオブジェクト扱い) ・構造体(record)は継承できないクラスという感じ ・集合型がない ・文字はユニコード ・stringもStringBuilderも、Delphiのstringとは違う。 ・DLL呼び出しが簡単 使いたいpublicクラスが定義されたDLLやEXEを参照とusingに追加するだけで、そのまま使える ・ジェネリック型・デリゲート型がある ・.NETと密接に絡んでいるので、C#の機能なのか.NETの機能なのか区分けも難しい VCLと.NETを比べると ・ActionManagerがない ・汎用TListのジェネリック型List<>等、リスト処理用のクラスが多数ある ・VCLよりWin32APIやらCOMやらを呼ばなくてもいいことのほうが多いが、 逆にFindWindowやSendMessageとかのハンドル・メッセージを直処理する機能はないから、 ラッパー関数を作るまでが面倒 開発環境 ・コードの自動レイアウト機能がある }や;を入力した瞬間に、あらかじめ設定しておいたフォーマットに整形できる。 入力時にインデント等を気にしなくてもいい反面、 上下で=の位置を揃えていても下手に}を入力してしまうと水の泡になったりする。 ・コードの補完機能がDelphiよりも強力な気がする ・メソッドの前で///と入力することでIDEから参照できるコメントが簡単につけられる ・デバッガ上でインタプリタ的にそのまま式やメソッドを実行できる ・デバッグ中に次に実行する行を変えたり、ソースを修正して変えたソースでそのまま続行できる
ケチ付ける気はないけど暇なんだねえお宅も
匿名メソッドとラムダ式
>構造体(record)は継承できないクラスという感じ 違うだろw
↑話を理解してない馬鹿
>>557 556じゃないが、お前は本当に馬鹿だと思うよw
構造体ほど言語によって定義がバラバラなのはないから、話が理解できなくて当然。
なんでも揚げ足を取りたい思春期メンタリティーのとっちゃん坊やを例外とすれば、 大雑把な印象として「継承できないクラス」でいいと思うけどね。 「継承を禁止された」、とは言ってないわけだからねえ。
メソッドの付いてないクラス、じゃないかなぁ
>>562 ヤツの行動パーターンの馬鹿さ加減に無知は関係ないだろw
↑馬鹿
>>547-549 ありがとうございます。
把握しました。そう読み替えようと思います
>>550 何かお勧めがありますでしょうか?
良ければ教えていただきたいです
たぶん一つの本とか一つのwebページに固執というか深入りせずに 金と時間の許す範囲でいろいろザッピングするのがいいと思うよ。 書き手もそんなに精読される前提で文章書いてないし、 そうでなくてもガイジンさんと違って日本人はだいたい網羅的に説明するのって苦手だから たった一人の書き手に依存するのは危険でもある。
568 :
デフォルトの名無しさん :2008/05/05(月) 14:41:59
>>566 逆引きリファレンスみたいなのがいいよ
実行結果の画像とコードがしっかりのってる奴
ありがとうございます。
>>567 なるほど…一冊の本に依存するのは駄目ですか。
色々見るのが良いという訳ですね
>>568 本屋に佇む相当分厚い奴らの事でしょうか
今度ちょっと見てきます
572 :
デフォルトの名無しさん :2008/05/05(月) 15:54:06
俺が持ってる本 独習JAVA、C言語によるはじめてのアルゴリズム入門 Visual C++入門 ビギナー編、逆引きハンドブックVisual C#
>>566 オライリーの初めてのC#がお勧め。
消防の僕にも完璧に理解が出来たぐらいだからすごく分かりやすい。
ちなみにリファレンス的なものは良くないと思う。
何も理解しなくても作れるし。
処理をデリゲートのみで行ってて 参照できないインスタンスって GCの回収対象になっちゃう?
いいえ
ありがとう
逆引きリファレンスはクソだな もっているだけで成長の道を閉ざす
おれは役にたった。超便利。 オイラリーとか当り前のことを冗長に書きすぎてて、読むのは時間の無駄。 スキルや目的に合わせて選ぶのが吉。
逆引き本とか見てコピペ君になる奴がいると仮定して(本当か?) そいつは最初からその程度の人間なんじゃないか、と俺も思うね。
逆引き本は逆引きが目的なんだから、 それで何かをマスターする目的で買う奴はいないと思う。
581 :
551 :2008/05/05(月) 19:51:09
とりあえず「C#の絵本」は読みやすかったよ
>>553 ありがとう
一番の問題は長年世話になったコンポーネント類なんだ
>>581 C#覚えてオマイが実装して公開すればよくね?
>>580 いや逆引き本の存在意義ってのは言語やライブラリを解説している本には書いてない、
細々とした個別のテクニックとかHow toを紹介することだろう本来。
アプリケーション設定(Properties.Settings.Defaultでアクセスできるアレ)に "hoge"という名前のstring型があるんだけど これをXAML上でTextBoxにBindingってできるの?
こまごました知識が得たかったら検索するかリファレンスを読むべき 逆引き本を見るような初心者には一番必要なことだ
素人に初心者扱いされるとは。
>>585 アンタ逆引き本とか読んだことないだろ?w
逆引き本は役に立つ 役に立つから成長に邪魔なんだ
開発の仕事だとな、納期ややっつけ仕事というのがあってだな・・・
C#のプロパティってUMLのクラス図描く時 属性に書くの?操作に書く?どっち?
属性は英語でプロパティ
属性はattributeだろ。
UMLのクラス図の属性は英語でプロパティ
まじかよ。それ誤訳だろ。
でも、Javaとかでget, setメソッドは操作に 書くじゃない?
それはJava使いがUMLを誤解してるんだな 属性をフィールド、操作をメソッドのことだと思っとる
単なるアクセサなら普通操作としてUMLに書かないよな フィールドを属性として書く
プロパティのsetで変換とか計算とか入ってても属性?
場合によるんじゃね? 例えばControl.ClientSizeなら属性にするね
操作になるようなものは、そもそもプロパティにしない。
boolを返すsetterの中でメッセージループ回してるキモいコードみたことあるぞw しかもMSのオフィシャルなサンプルだった希ガス
>>584 <TextBox
xmlns:prop="clr-namespace:Properties"
Text="{Binding Source={x:Static prop:Settings.Default}, Path=hoge}"
/>
でいいんじゃない?
>>602 それでできました。thx
いろいろ実験してBindingの仕組みはなんとなく分かった気がするけど
マークアップ拡張?とかまだよく分からんなぁ…
Artistic Licenssってどういうライセンスでしょうか?
>>603 XML 属性中に {} 内に書けるのは MarkupExtension を継承するクラスのみ。
例えば、
<Button Background="{StaticResource myBrush}"/>
とか書くと、対応するC#コードは(うろ覚えだけど多分)
new Button {
Background = (new StaticResourceExtension {
ResourceKey = "myBrush"
}).ProvideValue
};
になる。
あっ、ProvideValue の後ろに () 忘れてる。
>>605 あぁ、分かった気がする。
>>602 の場合、x:Static(System.Windows.Markup.StaticExtension)のコンストラクタは
"prop:Settings.Default"を受け取って、ProvideValue()でリフレクション(だっけ?)使って
Settings.Defaultプロパティの値を返すということか。
608 :
デフォルトの名無しさん :2008/05/06(火) 20:39:56
C#を勉強しているのですが、どうやったら画像とかを表示して 本物のゲームみたいにできますか?いまは文字を表示することしかできません。 おしえてください
まずは文字のみでテトリスやシューティングゲームを作ってみてはいかがでしょうか。 まだスキルが低すぎて難しい気がします。
610 :
デフォルトの名無しさん :2008/05/06(火) 20:45:50
ほうほう、テトリスやシューティングを・・・・・・。 わかりました、ありがとうございます。
あのー質問2丁お願いします C#でPg作る時 テキストとかボタン を Wクリックして イベント書き始めるじゃないですか その後このイベントいらないーと思った時 消すと落ちるじゃないですか デルファイは使ってないコードコンパイル時に 自動的に消されるんですがC#はそういう機能ないんでしょうか? 自分で関連したところ消さなくてはいけないんでしょうか 後・・・「ボタン」のイベントで、Name変更しても 消す前のボタンの名前が残ってしまう&Wクリックすると昔(その)のボタンの コードの場所に飛ばされてしますのですが・・・修正する時がんがって消してから イベント書かなくてはいけないのでしょうか よろしくおねげえします^^;
日本語でお願いします
613 :
デフォルトの名無しさん :2008/05/06(火) 21:51:00
>>611 ついダブルクリックしちゃうんだよね
するとクリックイベントコードが作られちゃうんだけど消したい
自分で消してるけど
name変えてもButton1_Clickのままってことかな
仕様でしょ
>>613 やはり自分で消すんですか
デザイナ.CSの中を見て、消さなくてはいけないので
めんどいな、とおもいますた
ありがとうございます
>>612 らじゃ
615 :
デフォルトの名無しさん :2008/05/06(火) 22:08:05
あと印刷系を実現する時 皆さんはどうやってます? 基本の印刷は地味で・・・ 町で見かける領収書みたいのを作成 したい場合どうやってます クリスタルレーポートですか ジャイブレポートですか エクセルにはいて印刷ですか そもそもそんな用途にはむいてないんだよですか?
>>611 プロパティ ウインドウのイベントから消せば、デザイナのコードもちゃんと消してくれるよ。
>>611 イベントハンドラ名の上にカーソルを置いてCtrl+(R+R)
619 :
デフォルトの名無しさん :2008/05/06(火) 22:27:50
なるほどクリックの上でリセットですね ありがとうございます m^^m
>>618 キーの組み合わせ(Ctrl+R Ctrl+R)現在使用できないコマンド・・・略
出来ませんでした^^;
コード表示画面だよ。 あと、名前を変えたいメソッドや変数の文字列の上で右クリックして、 そのメニューの「リファクタ−「名前の変更」でも出来る。
622 :
デフォルトの名無しさん :2008/05/06(火) 22:38:42
なるほど
>>621 さんできました
変更する時はつわかせていただきます^^v
ソース上でイベント処理用のメソッド名を変更した後に、Shift+Alt+F10したほうが早い
Shift+Alt+F10を使ったusing追加は神
Delphiだとコントロールの名前を変えると、 デフォルト名のままのイベントハンドラ名も追随して変わってくれるから この点だけはVSは賢くないと思う。
626 :
デフォルトの名無しさん :2008/05/06(火) 22:59:01
>>625 おいらわ初心者なんでよく分からないけど
<HOGE>で検索かけた時<HOGE>を使ってる一覧表見たいのが
「がーーーー」と、でないかなと思ってる
デルファイであったんだけど、C#にあるのかなと言うよりIDEとして
こんな感じ
***********************
PG AAA INT HOGE
PG BBB INT HOGE
PG CCC INT HOGE
PG CCC INT HOGE
HOGEは4箇所で使われています
***********************
627 :
デフォルトの名無しさん :2008/05/06(火) 23:14:11
C++からこれに移ってきて あまりの書きやすさに目に鱗の日々なのですが にも関わらず、いまいち普及してないのはどうしてなんでしょ?
出たばかりだからだと思います
629 :
デフォルトの名無しさん :2008/05/06(火) 23:16:54
631 :
デフォルトの名無しさん :2008/05/06(火) 23:25:29
右肩上がりだな
旧VBでやってたような領域は、C#かVB.NETに移行せざるをえないからな。
Javaより普及してんの? 流石にそれはなくない?
>>624 でも、デフォルトのShift+Alt+F10って押しにくいよな
何でこんなキーバインドにしたんだろ
HHKだとShift+Alt+Fn+0とさらに無茶苦茶な組み合わせに
>>634 sqlとかhtmlとか入れると結構あるな
スレの趣旨から脱線してるからこのくらいにしたいけど、ひとことだけ。 調査法でまったく結果が変わる。 案件ベースなのか、金額ベースなのか、ステップ(命令・ワード)ベースなのか、 求人ベースで調べるのか、雇用中を対象にするのか、 アマチュアを対象に含むか、単独回答か複数回答か、などなど。 開発ツールのダウンロードのときなどのにこの手のアンケートをやらされるとこがあるが、 自分がどの程度まともに回答するか思い浮かべてみよう。
>>637 お前・・・すごいな
いい釣り師になれると思うよ
これから始めたいのですが おすすめの本とかありますか?
俺もそれ聞きたいです 特にC++でいうSTLにあたるクラスとメソッドの解説が充実してるやつ
>>640 C#にテンプレートは無い、似ているが違うから同様の処理は不可能。
STLで良くつかわれる方法は代替としてリフレクションで行える、が考え方は全然別物なので比較の意味なし。
ジェネリックスの範囲なら同様だがSTLが解るなら説明するまでも無いだろう。
いやいや640が求めているのは(ジェネリックコレクションと)LINQのことだろう
643 :
デフォルトの名無しさん :2008/05/07(水) 20:10:06
じゃんけんゲームを作っているのですが勝ち負けの判定をどうしたら言いかまよっています。 if文だと長いのでほかの方法がいいのですが、何かいい方法はありますか?おしえてください enum じゃんけん : byte { グー =1, チョキ = 2, パー = 3 } static void Main() { Random Random = new System.Random(); Console.Write("グーなら1、チョキなら2、パーなら3を入力してください;"); int ken = int.Parse(Console.ReadLine()); int ransu = Random.Next(1, 4); for (int i = 1; i <= 4;++i ) { if (ken == i) { switch(ken) { case 1: Console.Write("あなた;{0}\nあいて;{1}\n", (じゃんけん)i,(じゃんけん)ransu); break; case 2: Console.Write("あなた;{0}\nあいて;{1}\n", (じゃんけん)i, (じゃんけん)ransu); break; case 3: Console.Write("あなた;{0}\nあいて;{1}\n", (じゃんけん)i, (じゃんけん)ransu); break; }
二次元配列とか
2人じゃんけんならば引き算する方法もあるな
646 :
デフォルトの名無しさん :2008/05/07(水) 20:23:46
すいません、わからないので実際にコードかいてみてくれませんか? おねがいします
(グー - チョキ + 3) % 3 を (グーとチョキをあれこれ変えて) 計算してみれ
サロゲートペアの文字ってcharに入らないよね? どうしたらいいんだ。
>>643 enum じゃんけん
{
グー = 1,
チョキ = 2,
パー = 3
}
static void Main()
{
Random rdm = new System.Random();
Console.Write("グーなら1、チョキなら2、パーなら3を入力してください;");
int player = int.Parse(Console.ReadLine());
int cpu = rdm.Next(1, 4);
//結果判定
int d = player - cpu;
string result;
if (d == 0) result = "あいこです";
else if (d == 1 || d == -2) result = "あなたの負けです";
else result = "あなたの勝ちです";
//結果出力
Console.Write("あなた;{0}\nあいて;{1}\n", (じゃんけん)player, (じゃんけん)cpu);
Console.WriteLine(result);
}
651 :
デフォルトの名無しさん :2008/05/08(木) 15:41:05
XP+C#2008です。 SplitContainer を使用して左右にTextBoxを配置し、最初に右側へフォーカスを 持たせたいのですが必ず左がフォーカスを持ってしまいます。 タブオーダーもいじったのですが変わりませんでした。 Focus使えばやりたいことは出来るのですが、どうやって順番を変えるのでしょうか。
(コンテナも含めて)全てのタブオーダーを適切に設定したのか?
653 :
643 :2008/05/08(木) 17:22:17
なるほど、数値化して引き算の値で結果を求めるのですね。 ありがとうございます。もう一度一からつくりなおしてみます。
タブオーダーってかぶった数値はかぶったままになるから設定しづらいんだよな
コピペ君って馬鹿だな、まで読んだ。
657 :
651 :2008/05/08(木) 20:07:14
コンテナってのはSplitContainer 自体のことでいいのかな。 テスト的につくったフォームで試したところ、タブオーダーは SplitContainer 0 TextBox1 0.0.0 TextBox2 0.1.0 となっていました。 貼り付けたコントロールは上記三つだけです。
>>657 全ての先祖コンテナの設定が必要
(たとえ、IDEで表示されなくても)
そのまま貼り付けただけだとこうなる
-- splitContainer1 ――――――― 0
+- splitContainer1.Panel1 ―― 0.0
| `- textBox1 ――――― 0.0.0
`- splitContainer1.Panel2 ―― 0.1
`- textBox2 ――――― 0.1.0
見たところ、splitContainer.Panel{1,2}がデフォルトのまま
え?w
>>649 >>659 おれもそう思う、しかし enum で定義しておきながら、それを case で使っていないのがとても気になる、一番肝心なところが間違っている。また、byte も余計だろう。
次点は剰余を使ったものだが、かなり数学に強くないと衝撃が大きいので自分専用ならOKか。
>>643 で書いたコードがわかりやすいって
仕様どおりじゃないしそもそも動かない。
まあ誰が見ても良くないのはbyte
>>662 if と case があって、それ以外にも手段があるかとか、それを聞いているだけだろ
コードは途中で切れているから、仕様通りかなどという判断はできんし、見てほしいとも思っていないかと思っている。
数値演算せずに、条件分岐を避けるなら、 const string[][] ResultString = {{"あいこ", "あなたの勝ち", "あなたの負け"}, {"あなたの負け", "あいこ", "あなたの勝ち"}, {"あなたの勝ち", "あなたの負け", "あいこ"}}; としておくと、ResultString[ken-1][ransu-1]が結果。
俺もそれでいいんじゃないかと思うけどなぁ。 単純だけど汎用性もあるし
多重かジャグかはっきりしろよ
いいえ、ケフィアです。
勝ち負け判定したいって仕様だろ
>>669 やりたい事は分かるし、手法も問題ないが
宣言はジャグなのに初期化は多次元になってるとか
constは使えないとか
# 667で多重とか書いちゃったけど、多次元の間違い
671 :
デフォルトの名無しさん :2008/05/09(金) 21:18:44
たぶん文字列を配列と見なしてのジャグなんでしょ
Java出身なのですが、APIドキュメントのようなものはどこで配布されているのでしょうか?
>>673 >>674 ありがとうございましたー!!!
しかしながらC#のクラスライブラリの仕様が見あたらない・・・
文書量が膨大なのでゆっくりと探していきます。ありがとうございました。
C#の〜じゃなくて.NETの〜で探さないと。
Win32 APIをC#で利用しようと思い、GetAsyncKeyStateを使う以下のような小さいクラスを作ってみたのですが、 実行中、GetAsyncKeyStateを呼んだ地点でNullReferenceExceptionが発生してしまい(ちなみにcatchできない)、悩んでおります。 原因おわかりでしたら、教えていただけると助かります。 class GetKey{ Dictionary<int,bool> bKey; [DllImport("user32.dll")] static extern short GetAsyncKeyState(int vKey); public bool Get(int key){ short result=0; result=GetAsyncKeyState(key); if((result&0x8000)!=0) if(bKey[key])return true; else{ bKey[key]=true; return false; } else return false;  
すいません、コードの最後が少し欠けましたが、 内容自体はそれで全部です
>>676 一発で見つかりましたw
まだ.NETって何って感じなんでそっからやった方がよさそうですね。
ありがとうございました。
Javaプラットフォーム、J2SEってところかな。
>>677 >GetAsyncKeyStateを呼んだ地点で
というのが怪しい。場所が違う気がするからスタックトレースを見直してみよう。
ソースを見た感じではbKeyがnullのせいだと思える。
>>681 確かにそうでした。GetAsyncKeyStateのある行をコメントアウトしたら収まったため、
完全にWin32 APIの問題だと思い込んでしまっていました。
(実際には、判定結果の違いでif(bKey[key]に到達しなかっただけ)
bKeyを初期化し、bKey[key]を必要に応じて作成するようにしたら解決しました。
初歩的なミスばかりなのに、教えていただいてありがとうございました。
C#の入門書でおすすめは?
自分は黒白基調なカバーのの標準C#入門で覚えた。 手元にあるやつだと2箇所程度ミスを確認してるけど、何だかんだでお世話になった。
686 :
デフォルトの名無しさん :2008/05/10(土) 13:01:32
ctrl + xって無駄に便利だね 正確に言うとその行を切り取るんだけど、単にその行を削除できる感じ コピーしたのを貼り付けようとして間違えてctrl + c押しちゃってウゼーって思ってたけど
へぇ。
無駄じゃないだろ
失礼しms。
ttp://www.uploda.org/uporg1415339.c.html 上記のようなコードを書いたのですが、
bの領域を解放するときに
”Windows によって aaaaa.exe でブレークポイントが発生しました。ヒープが壊れていることが原因として考えられます。aaaaa.exe または読み込まれた DLL にバグがあります。”
のようなエラーが出てしまいます・・・。。。
確保していない領域にアクセスし、それをフリーしようとしたときにおこるエラーみたいなことがググったら書いてあったのですが、
double** b; が確保されている領域と、callocで追加確保された領域が連続でないということでしょうか?
またそのせいでこのエラーがおこっているのでしょうか?
ご教授願います。よろしくお願いします。。。
690 :
689 :2008/05/10(土) 18:44:12
すみません。誤爆しました><
コンストラクタ中でbaseキーワードを使って親クラスのコンストラクタを呼ぶ前に、 別のメソッド等を呼び出すことはできるのでしょうか? 例えば下記みたいな感じで、 Hoge.GetPersonalData( name, out old )が戻り値がoutで返ってくるため、base()に直接入れられないのです。 //親 public class Oya { public Oya( string name, int old ) {} } //子 public class Ko : Oya { public Ko( string name ) : int old; Hoge.GetPersonalData( name, out old ); base ( name, old ) {} }
子のインスタンスを作る前に呼べばいいじゃない
>>692 子のコンストラクタを呼ぶ側でHoge.GetPersonalDataを先呼んでやって、
子のコンストラクタの引数を一つ増やして、Ko( name, old );とするということでしょうか。
うん。 もしくはhogeをそのまま渡せば?
あーごめ。 hogeはstaticか。
うーん、呼ぶ側の操作はなるべく簡単にしたいので、 可能な限りコンストラクタの内部処理として隠してしまいたいんです…。
こういう逃げ方しかないだろうな public class Ko : Oya { private static int GetPersonalAge(string name) { int old; Hoge.GetPersonalData(name, out old); return old; } public Ko(string name) : base(name, GetPersonalAge(name)) {}
横やり、うぇっうぇっっっ 自分はあきらめていたよ、そういう手があったか class C { public static void Age(out int age) { age = 5; } } class A { public A(int i) { } } class B : A { public B(string name) : base((new Func<int>(() => { int age; C.Age(out age); return age; }))()) { } } 次からはこうしよう
どういたしまして
親のコンストラクタ呼び出しの前にコード書くことが禁止されているのは なにか合理的な理由があるんだっけ?
普通に考えたら気持ち悪いだろ
未初期化のprotectedフィールドをさわってしまううっかりさん対策
継承元のクラスの部分から順番に初期化してゆく必要があり コンストラクタも継承元のから順に実行されてゆく。 コーディング上、継承先のコンストラクタから継承元のコンストラクタを 呼び出しているように見えるが実際は逆。
それが正確なら
>>697 のようなコードは書けないはずだと思うんですが。。
guiプログラミングのよいサイトはありますか?
708 :
デフォルトの名無しさん :2008/05/11(日) 14:20:52
string x = Console.ReadLine(); ってやると文字を入力できますが、日本語が入力できません。 日本語を入力してもらうにはどうすればいいですか?
でもこんなstaticの使い方はなしだな
普通はおとなしくファクトリメソッドを準備する
711 :
デフォルトの名無しさん :2008/05/11(日) 14:43:40
頼む。助けて。 課題でN88BASIC互換ソフト使ってグラフ 作れって言われたんだけど、データはあるんだけど N88互換がXPだからか、ダウンロードできないorz どうやったらいいんだろう?HELP読んでも解決 出来なかったし、マジ困った。
スレ違い子ね
713 :
デフォルトの名無しさん :2008/05/11(日) 14:52:05
質問です Windowアプリ作る時 大体終了ボタン作る時 場所って大体同じ場所に作りますよね それって雛形登録したいのですがどうしゅればいいのかな デルファイでいう リポジトリ見たいなものなんですが
714 :
デフォルトの名無しさん :2008/05/11(日) 14:53:57
すいません すべって書き込みボタン押してしまいました へんな日本語に・・・ 日本語でおkってことで 読んで栗
715 :
713 :2008/05/11(日) 15:02:10
回答まだかよサッサとしろよハゲども
日本語でおk
baseとなるformにそのボタンをつけて、それを実装したいフォームは継承する。 もしくはカスタムコントロールでググレ馬鹿
718 :
708 :2008/05/11(日) 15:10:41
だれかおしえてください
日本語が入力できる環境で使う
的確な回答吹いたw
721 :
708 :2008/05/11(日) 15:22:20
説明のしかたがわるかったようなので実際にコードをのせますね。 下のコードを実行するとkonnitihaとアルファベットで打たないといけませんが、 自分自身がこんにちはと入力できるようにしたいということです using System; class kaiwa { static void Main() { string kaiwa = Console.ReadLine(); switch (kaiwa) { case "konnitiha"://要するにここのkonnitihaが「こんにちは」でできるようにしたいということ Console.Write("こんにちは\n"); break; } } }
722 :
デフォルトの名無しさん :2008/05/11(日) 15:26:39
本物713だが 715てめー 失礼なこと書くな 馬鹿とか書かれたろー なんか恨みでも あんのかよぉ
意味がわかんね コマンドプロンプトで日本語入力ができない初心者ですという事?
724 :
708 :2008/05/11(日) 15:28:54
そういうことです。出力はConsole.Write("こんにちは\n");ってできても 入力するときはアルファベット・・・・・。 どうすれば日本語を入力できるのですか?
もしかして:Alt + 半角/全角キー
>>721 日本語が使える環境なんだね?
コマンドプロンプトを立ち上げて、日本語入力できるか試してみて。
単純に「半角+Alt」押してないだけだろうけど。
727 :
708 :2008/05/11(日) 15:31:08
できません、下のコードを実行してaltと半角全角をおして入力してもできません。 なぜですか? using System; class kaiwa { static void Main() { string test = Console.ReadLine(); } }
728 :
708 :2008/05/11(日) 15:32:39
あ、できました。どうやらIMEが正常に起動してなかったようです。 みなさまありがとうございました。
本物の713だが altを押しながら(半角全角)ボタンを1回押してみてもダメ?
708 おk コマンドプロンプト ぐぐってきま
ggttkrkygrks
>>713 Winアプリって大抵終了ボタンついてないけど?
×ボタンがあるからいらないじゃん
ダイアログの場合は右下についてる事が多いんじゃないかな。
>>733 たあーしかに、そうなんだけど
まあ例としてです ^^b
要するに雛形が欲しかったので
カスタムコントーロールむずい・・・・
なんか理解できない
更にググってきます
フォーム起動時に一瞬テキストボックスがグレーになるんですが 起動時からグレーではなく表示する方法ってありますか
737 :
736 :2008/05/11(日) 18:06:23
以下2つは試しました 1.SuspendLayout,ResumeLayout(false) 2.SetStylesでダブルバッファを指定する方法 以下の構成で、1.は各子コントロールのAddの前後に、2.はメイン画面に設定してます メイン SplitContainer Textbox SplitContainer TreeView RichTextBox
>>736 グレーになったことがないんだが。
enableってどうなってる?
739 :
736 :2008/05/11(日) 19:54:15
すべてtrueでした (InitializeComponentの最後にthis.Visible.ToString()をメッセージボックスで表示させてます) 起動時点で29メガ消費するんですが関係あります・・よね、きっと。
740 :
736 :2008/05/11(日) 19:59:16
すみません、VisibleではなくEnabledですね 各コントロールのEnabled.ToString()を表示させてみましたが やはりすべてtrueです
>>736 ぱっと見で気になるレベルなのか?
普通に書いてりゃならンと思うが・・・
その現象が起きるのはそのプログラムだけなのか。 デバッガ通しでなく、直接exeを起動してもそうなるのか。 CPUとメモリは? つまり遅いだけなんじゃないかと予想してみる。
743 :
736 :2008/05/11(日) 21:50:37
機能を削除して、フォームだけを表示するプログラムにしてみたんですが あまり状況はかわりませんでした。(リリースビルドしても同様) CPU使用率は、タスクマネージャで見た感じほとんど0です。 (このとき、起動時のメモリ使用量が22メガぐらいです) 結局原因はよくわからないですが グレーの部分が見えるのは0.1〜0.2秒ぐらいなんで、 NETが単に重いだけだと思うことにします (C#のフォームを表示させるだけのプロジェクトで起動時に13Mぐらいメモリ使ってました) みなさんありがとう。
Enabledを一度falseにしてから、最終的にtrueに直してる可能性は? 処理の最初にfalseに設定されてて、初期処理の終わりのほうでtrueにしてたら、 処理している途中はずっとfalseなわけだし・・
[DllImport("kernel32.dll")] private static extern bool SetProcessWorkingSetSize(IntPtr proc, int min, int max); private static void タスクマネージャのメモリ使用量を小さく見せる細工() { SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1); }
746 :
736 :2008/05/11(日) 22:33:59
>>743 んー、Enabledのfalseとtrue試してみましたがやはり、同様でした
また、Enabledをfalseにしたまま実行してみたところ、その場合もちらついてます
(RichTextBoxの矩形がSplitContainerのペインに一瞬表示され、
その後SplitContainerのペイン全体に広がっているように見えます。 DockStyleはFillです)
>>744 これは・・メモリ使用量が半分以下に・・
747 :
デフォルトの名無しさん :2008/05/11(日) 23:44:35
C#2008はソリューション構成ってなくなったのでしょうか?
749 :
デフォルトの名無しさん :2008/05/11(日) 23:54:02
どこにあるのでしょう^^ Debugとリリース切り替えるかっこいい奴 とりあえずぐぐってきま
困ったらツールバーを右クリックだ
困ったまんまですが 眠いので失礼島
>>749 VS2002(or 3)からの移行組?
2005以降はなぜかデフォでは表示されない設定になってる気がした。
オプションで表示されるように設定しなおすよろし
753 :
デフォルトの名無しさん :2008/05/12(月) 00:32:23
あらりがとうでもわからなかった ねますありがおうZzz
なくなったと思えば気にならないよ
ツール→オプション→「全ての設定を表示」にチェック →プロジェクトおよびソリューション→ビルド構成の詳細を表示
>>754 Debugクラスとか[Conditional("Debug")]とか使わないのかよ
>>752 わが国のITはユーザに使用法を十分説明する時間がありません。
このため、初心者がベテランに疑問についてたずねる光景を目にすることがあります。
しかし本来は事故(情報漏えいなど)が発生した場合の責任は、
接続業者、サーバ運営者、システムを開発したエンジニアにあります。
メーカあるいは購入店にたずねるべきです。
利用者の仕事は自治(掲示板の秩序を守ること)です。助言を行ってはなりません。
素人が専門技術に言及するのは「親切」ではありません。「無責任」です。
海外のプロフェッショナルは、「私の仕事ではない」と答えるはずです。
759 :
デフォルトの名無しさん :2008/05/12(月) 11:22:46
1.1なんですが DateTime のミリ秒だけ切り捨てることってどうやりますか? とりあえず new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second) みたいに書いてるんですが。
>>759 まずは、この書き方やめね?素人っぽいぞw
Ticksを1千万で割って1千万を掛ければ
>>759 幾つか方法はあるけど、最も汎用性が高いのは
こんな感じの拡張メソッドを作って
static class DateTimeEx {
public static DateTime Truncate(this DateTime old, long eps) {
return new DateTime((old.Ticks / eps) * eps);
}
}
使い方は、丸め幅をタイマ刻み数(100nsec単位)で指定するだけ
dateTime.Truncate(TimeSpan.TicksPerSecond); // 1秒未満を切り捨て
dateTime.Truncate(TimeSpan.TicksPerSecond*30); // 30秒未満を切り捨て
他には、Roundとか作っておいても良いと思う
VS2008なんですが突然 「System.Windows.Forms.Design.IEventHandlerService は既にサービス コンテナに存在します。」 とか言ってデザイナが開かなくなったんですが何故でしょうか?
764 :
デフォルトの名無しさん :2008/05/12(月) 13:15:34
よく分からんけどミリ秒に0突っ込んでやれば良いんじゃないの?
>>762 それだとDateTime.Kindを無視しちゃってないか。コンストラクタの2つ目のパラメータにold.Kindを指定しないと。
>>764 DateTime.Millisecondは読み取り専用。
DateTime dt = DateTime.Now; dt = dt - dt.Millisecond;
>>763 bin,obj消してリビルドするとどう?
>>765 確かに、入れた方がいいね
でも、よく見たら1.1とか書いてるよ
拡張メソッド使えないじゃんorz
普通のstaticメソッドに読み替えてくれ
あと、DateTime.Kindも2.0からみたいだな
dt.AddMilliseconds(-1.0 * dt.Millisecond);
VisualStudio2008で、プロジェクトの新規作成が.NetFramework3.5しか選べないのですが、 どうすれば2.0とかも選べるようになるのでしょうか。 前は選べたような気がしたのですが……。
3.0/3.5のオブジェクトを使わなければ、2.0と一緒だから。
>>770 Express版?
プロジェクトのプロパティから選べない?
773 :
デフォルトの名無しさん :2008/05/12(月) 22:59:39
774 :
デフォルトの名無しさん :2008/05/12(月) 23:05:08
おっと自分の質問忘れた sqlサーバーコンパクトのノースウインドいじっているんですが catgoryのクエリーってすごく遅いんですけど 普通にドロッアンドペーストして fillで出した方が早いですよね? こういうものなんですか? 皆さんはアダプターからクエリー使ってます? まあおいらのpcがぼろいと言えばぼろいんだが・・・涙
>>756 分かりませんでしたぁああ
すいません 涙
>>756 が分からないならプログラミングなんて諦めるべき
質問させてもらいます。 フォームの中にNumericUpDownを使ったものを考えていて、 UpDownButtonを押すとそれぞれのとき設定した最小値や最大値に一回でなるようにしたいと思っています。 また、インクリメントするためのUpDownButtonを残して その横にMaxMinButtonを付けるなど拡張したものが作れないかと思っています。 テキストエリアと、Up Down Max Minの4つのボタンが付いたコントロールのことです。 どのようにして作ればいいかなどのアドバイスをよろしくおねがいします。
>>777 UserControlにNumericUpDownコントロールとButtonを貼り付けて
ButtonのClickイベントハンドラでNumericUpDownの値を最大/最小値に設定すればいいんじゃないかと。
テキストエリアとUp/Downを分けたいならNumericUpDownじゃなくてTextBoxとButtonにすれば。
XP SP3をクリーンインストールしてみたけど、.NETの扱いが微妙なんだね。 一応2.0は入ってるみたいだけど、Microsoft Updateしてみるといくつかパッチがあったから完全じゃないみたい。 DirectXはドライバの日付は4/14になってたけど、Managedは入っていないから、結局2008/03版を入れ直した。
>>779 HFSLIPで.NET2.0SP1以降とかDirectXredist_Mar2008とかを好みに応じて統合すればいいじゃん。
781 :
デフォルトの名無しさん :2008/05/13(火) 17:37:19
C#でテトリスつくりたいのですが、どうすればいいかおしえてください (できれば参考サイトをおしえてください)googleで検索しても でないのでおねがいします。
783 :
デフォルトの名無しさん :2008/05/13(火) 17:43:26
すいません厨房なので日本語のサイトをおねがいします。
プログラムに英語も日本語もねえよ。
悪いことは言わん あきらめろ
786 :
777 :2008/05/13(火) 18:09:26
>>778 > UserControlにNumericUpDownコントロールとButtonを貼り付けて
> ButtonのClickイベントハンドラでNumericUpDownの値を最大/最小値に設定すればいいんじゃないかと。
やはりそれが一番なんでしょうね
もしNumericUpDownの継承先から作るとしたらどういう設計になりますかね
>>786 キモイ設計になる。
考慮する価値は全くない。
WPFのTabControlについて質問です。 Windowを要素に持つコレクションを、ItemsSourceにしていて、 (1) Windowのタイトルをタブのヘッダに表示する。 (2) WindowのContentをタブに表示する。 というのを作りたいのですが、ItemTemplate、ContentTemplateをどのように記述すればよいのでしょうか。
C#に限ったことでないけど,一応C#で開発しているのでここにポスト 今ListBoxをオーナードローで使っていて,そのListBoxの内部にユーザコントロールを配置している. で,そのListBoxのDrawItemイベントで内部のユーザーコントロールを適当な位置に配置しているんだが, このときListBoxのSelectedChangeイベントやMouseMoveが内部のユーザーコントロールに握りつぶされてしまい, ListBoxの項目の選択やマウスホバーによる項目の表示切替(浮き上がってみせるとか)ができない. どなたかListBoxをオーナードローにして内部にコントロールを配置したとき,ListBoxまでイベントを上げる方法を教えてください
>>776 分かりましたー
最後のやつチェック入れるのがポイントでしたー
みなさんthk
すみません、まだ小さなプログラムしか作ったことが無い者です。 そろそろ難しいプログラムに挑戦したいってことで、 データベースを使ったプログラムの計画は練ったんですが データベースとの接続クラスってどうやって保持するのが一般的ですか? DBConnectionってやつです。 C#とSQLServerを使って作る予定で とりあえずはじめはWindowsFormとローカルのデータベース、 次にサーバーにデータベースを移動させて、 最終的にはASP(?)とかも使えるといいなーって感じです。 とりあえず今は起動用のvoid Mainが入ったexeをひとつ、 そこからログインフォームを呼び出して、 ログインが完了したらメインメニューとメイン画面を呼び出すつもりです。 データベースのコネクションって、 どこでインスタンス化して、どこに保存しておくのがベストですか? 初心者すぎる質問かも知れませんが、宜しくお願い致します。
使う場所で保存する、としか言えんぞ
793 :
デフォルトの名無しさん :2008/05/14(水) 00:19:48
教えて下さい。m(_ _)m デスクトップ上のアイコンの場所を移動するのに、 C++だと、 //デスクトップのハンドルを取得 HWND hWnd; hWnd = FindWindow("ProgMan",NULL); hWnd = GetWindow(hWnd, GW_CHILD); hWnd = GetWindow(hWnd, GW_CHILD); if(!hWnd) return false; SendMessage(hWnd, LVM_SETITEMPOSITION, (WPARAM)0, (LPARAM) MAKELPARAM ((int)10, (int)10)); //set でいけるようなんですが、 これをC#で書くにはどうすればいいのでしょうか??
P/Invoke
>>788 > (2) WindowのContentをタブに表示する。
これ無理
>>797 やっぱりMSの陰謀だったか・・・
まぁとりあえず,ListBoxのイベントは起こらないことを前提に,ユーザコントロール側でゴニョゴニョすることにした
> オーナードローにして内部にコントロールを配置
って具体的にどうやるんだ?てか、どうやってる?
>>789 から読み取れる情報から考えても、
「まさか、コントロールを重ねて配置とか馬鹿げたことをしてないよな?」
という疑念しか生まれなかったんだが
>>799 ユーザコントロールをロードしてParentをListBoxにした後,DrawItemイベントで適切な位置に配置してる.
>>772 ありがとうございます。
プロジェクトのプロパティからは選べるのですが、
プロジェクトを作るときに前選べたような気がしたのでできないかな〜と。
Express版です。
>>773 ありがとうございます。
どの画面ででしょうか?
802 :
デフォルトの名無しさん :2008/05/14(水) 17:36:31
visualC#でテキストボックス内に変数を入れたいのですが、 下のように書いてもできません。どうすればテキストボックス内に変数をいれられますか? namespace _001 { public partial class Form1 : Form { int test = 1; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { textBox1.Text = test; } } }
画像をドラッグスクロールできるようXAMLを下のように書きましたが、イベントハンドラが呼ばれません。 (イベントハンドラにブレークポイントを仕掛けて確認) いろいろ試してみたところ、ScrollViewerのFocusableをfalseにすると呼ばれるようになったのですが どうしてそうなるのか理由がわかりません。 何故なんでしょうか? <ScrollViewer Name="scrollViewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" MouseLeftButtonDown="scrollViewer_MouseLeftButtonDown" MouseLeftButtonUp="scrollViewer_MouseLeftButtonUp" MouseMove="scrollViewer_MouseMove"> <Image Name="image" Stretch="None" /> </ScrollViewer>
>>802 できないとは、どうなるためにできないのか。
エラーならその内容も書くように。
textBox1.Text = test.toString();
とかは?
805 :
デフォルトの名無しさん :2008/05/14(水) 17:45:15
エラー内容は「型 'int' を型 'string' に暗黙的に変換できません。」です。
ちなみに
>>804 さんの言ったようにやってもできませんでした。
ちなみにmicrosoftvisualC#をつかっています。
>>805 >エラー内容は「型 'int' を型 'string' に暗黙的に変換できません。」です。
>>804 のようにすればこのエラーは消えるよ。
それでもできないってことはまた別のエラーが出たって事なんだからそれも晒して。
toString()がToString()の間違いとかそんな事のような気はするけど。
これ、通ったから
>>804 で合ってると思うけど。
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
int test = 1;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = test.ToString();
}
}
}
ああ、そういうことか。 エラーメッセージはちゃんと読みましょう。
「できません」の一言でいままで過ごしてきたから原因不明だったんだろうね そうですね
>>803 ScrollView の中の要素がHandledにしたんだろう
ああ、toString()はすぐ気がついたがIDEで候補出るからわかるべ、と放置してしまった・・・
812 :
デフォルトの名無しさん :2008/05/14(水) 19:33:00
"" + test でも出来るよ
そんなjavaScriptちっくな書き方は嫌だ。
>>796 マジですか……地道にC#で書きます、ありがとうございました。
>>814 無理ってのは、ほかの要素ツリーの下に入ってる要素を
そこから切り離さずにほかの要素ツリーの下に入れるのが無理ってことだぞ
Window.ContentはWindowの下にすでに入ってるからTabItemの要素ツリーには入れられない
最近始めた者ですが、C#の推薦図書って何があります? C/C++やJavaはいろいろ見るのに#は全然見かけない…
簡単な言語だから本を書くまでもない。
俺も知りたい c#からプログラミングを始めるとしたらどんな本ががいいの? 俺が知ってるのは 猫でも分かる・・・ 独習C# C#の絵本 くらいなんだが
>>818 最近はどうか知らないけど、俺が本当の初心者の時はVisual C#.NET入門 基礎編って本がよかった。
かなり読みやすいよ。
>>818 プログラミング自体が初めてだったら、猫でもかな
それ以外読んだことないけど
って言っても好き嫌いあるんで、立ち読みか図書館でも見てみたら
そもそもプログラミングど素人にC#は向いてない気もするんだけど
それはない
最初からオブジェクト指向的に考える癖がつく方が 何かと良いんじゃね?
一切書籍に頼らずMSDNと既存のソースコードだけを見る俺は異端なのか
>>824 自分もはじめのうちはそれで勉強してたけどね
最近は本も読むようになったよ
>>824 もともとプログラミングに向いてる人はそれでいける
が、不向きなのにやらなきゃいけない人もいるんだよ
言語仕様自体はともかく初学者のための情報が多くないからなあ VBとは違ってMSDNにも初心者向けの言語解説記事が全く無い
てゆーか、本じゃないと読む気しない
本だとパラパラ捲って探すのが楽なんだよね
>>810 ルーティングイベントの仕組みを調べてみました。
ScrollViewerのフォーカス関連の処理でHandledにされたんだろうなぁ
ということで納得しました。
しかし最近からプログラミングを始める人って大変だろうなあ いきなりオブジェクト指向の知識が必要だったり、巨大なライブラリから目的の関数を探し出したり。 俺は少しずつハードルが上がってったから苦労がわからないぜ。
しかし最近からプログラミングを始める人って楽だろうなあ 検索するだけでいきなり必要な知識が手に入るし、 OPコード表は暗記しなくて済むし、ハンドアセンブルしなくて済むし、 巨大なライブラリがあるから呼ぶだけで高度な処理ができるし。 掛け算ルーチンから作る苦労とかって分かってもらえないだろうな。
初心者がブチあたる壁:検索単語が分からない \ いろいろやってみましたが動きません.どうすればいいですか? / (^o^) xx調べれ
>>824 C#関連はプログラミングC#って本を一冊だけ持ってるけど、殆ど開いてない。
ググって解決する方が遥かに多いw
ここの板の人たちって現場ではどのくらいのレベルなの? 回答する人たちね。
初心者は高度なことと簡単なことの区別がつかないので、 いきなり高度のことしようとするから。かといって検索の便利さ知ってるから 助言されても絶対頭からドキュメントを読もうとはしない。
>>833 ググレカスだと糞の役にも立たんけど、xxでググレカスだと
それだけで解決しちゃう事も多いな。
最近、キーワード出してもソース張らないと逆ギレする奴、多いよな。
>>835 俺の場合プログラミングは本職じゃなくて趣味と研究の道具
学生の頃バイトしてた事はあるけど
たった一言で助けられたキーワードとしてはTypeConverterとIDesignerHost 本一冊分くらいある価値ある一言だった。 あと、俺の中での最も役に立ったキング・オブ・ツンデレレスは DxScanのソース嫁カスwwwwwwww DirectShowが一気に理解できた。今でも神レスだと思ってるw
WebControlの話もここでよかと?
よかよ
>>840 こういうのがいるから
スレが荒れてゆくのか・・・
TypeConverterって使ったこと無いけどクラス名を見ただけで死ぬほど不吉な匂いがするな
XP SP3クリーンインストールしたら、WPFのMediaElementが使えなくなった。 Source指定してPlay()してもエラーが出るわけでもなく、何も再生されない状態。 メディアプレイヤー10を入れたら直ったけど、どこかに動作環境書いてあるのかなあ。
おいらも見つけられなかったけどWPFのAV系はWMP10が必須ぽ。 > MediaElement および MediaPlayer は、いずれもオーディオ、ビデオ、 > オーディオ コンテンツ付きビデオを提供します。 > どちらの種類も対話的に、またはクロックで制御でき、メディア再生用の > Microsoft Windows Media Player 10 OCX への依存は最小限で済みます。
ものすごく基本的な質問で申し訳ないのですが ボタン1を押したときは、テキストが更新されますが ボタン2の場合はテキストに何も表示されません クラスを自作した場合に、フォームのコントロールは変更できないのでしょうか? private void button1_Click(object sender, EventArgs e) { bb("button1"); } public class test : Form1 { public void aa( string str) { bb( str ); } } public void bb( string str ) { textBox1.Text = str; } private void button2_Click(object sender, EventArgs e) { test a = new test(); a.aa("button2"); }
>>848 下の余白に書かれたプログラムは一体なんのためにつけたの?
もちろん最初の質問とは無関係なのは分かってるが
しょうむない質問ですんません。 internalってアセンブリ内で使えるとあるんだけど、 アセンブリって具体的にどの範囲までなのかよくわかんないです。 DLL、EXEを作る単位ということは・・・・ プロジェクト内のソースって理解であってますか? ちがってたら、どこ見れば、このクラスはアセンブリ内か外かわかるのだ?
>>850 アセンブリよくわからん
でもそこまで話広げる必要はないんじゃないかと思われ
1プロジェクト=1アセンブリ でいいと思うけど そうじゃないふうにも出来たはずだけど
853 :
759 :2008/05/16(金) 11:04:41
>>760 だからとりあえずって言ってるじゃないですかコノヤロウ><
>>761 以下
ありがとうございます。
Resources.Add("foo", new double[] { 1.1, 2.2, 3.3 }); ウィンドウのResourcesにdouble型の配列を設定したいのですが、XAMLではどう書くのでしょうか? VC#2008EE WPFアプリ
<x:Array x:Key="foo" xmlns:si="clr-namespace:System;assembly=mscorlib" Type="{x:Type si:Double}"> <si:Double>1.1</si:Double> <si:Double>2.2</si:Double> <si:Double>3.3</si:Double> </x:Array>
XAMLっていうかXMLが冗長で可読性も最悪だあ
>>855 それでできました。マークアップ拡張機能ってやつなんですね。
ありがとうございました。
858 :
802 :2008/05/16(金) 17:16:48
返信遅れました。みなさんありがとうございます。無事解決できました。 また質問ですがvisualC#で乱数をつかえません。下のようにすると 静的でないフィールド、メソッド、またはプロパティ 'System.Random.Next(int, int)' で、オブジェクト参照が必要です とでます。理由をおしえてください namespace _001 { public partial class Form1 : Form { Random Random = new System.Random(); int coin = 100; int check = 3; int[] count = new int[] { 1,1,1 }; int[] koma = new int[] { Random.Next(1, 4), Random.Next(1, 4),Random.Next(1, 4),}; public Form1() { InitializeComponent(); } private void start_Click(object sender, EventArgs e) { check = check - 3; if (check == 0){ coin -= 3; for (int i = 0; i <= 2; ++i) { count[i] -= 1; }textcoin.Text = coin.ToString(); }}}}
Random Random = new System.Random(); を Random random = new Random(); にしてみ
>>858 どこがおかしいのか調べるコツはコードを小さくにしていくことだよ。
ビットマップを配列にして使いたいんですが Bitmap[] _bmp0; で宣言して _bmp0[0] = new Bitmap(320, 240, PixelFormat.Format32bppArgb); 後からこれで定義すると コンパイルはできるのですが 実行すると白地に赤×マークになり うまくいきません 配列のビットマップはどう書けばいいですか
Bitmap[] _bmp0 = new Bitmap[3]; と先に入れ物を用意しとかないと というかList<T>の方が使いやすいような
できました サンクスです
UrlCreateFromPath相当の機能って、どのクラスにある??
その関数がどういう機能なのか具体的に書くのが質問のコツだぜ System.Uri
>>865 Very thanks!
期待通りでした。
<Window.ContextMenu> <ContextMenu> <MenuItem Header="あああ" Command="c:Window1.MyCmd" /> </ContextMenu> </Window.ContextMenu> <Window.CommandBindings> <CommandBinding Command="c:Window1.MyCmd" Executed="CommandBinding_Executed" CanExecute="CommandBinding_CanExecute" /> </Window.CommandBindings> <Window.InputBindings> <KeyBinding Command="c:Window1.MyCmd" Gesture="Ctrl+Q" /> </Window.InputBindings> public partial class Window1 : Window { public static readonly RoutedCommand MyCmd = new RoutedCommand(); private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) { MessageBox.Show("コマンド実行"); } private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e) { e.CanExecute = true; } } Ctrl+Qでコマンドは実行できるのですが、コンテキストメニューの項目が灰色で選択できない状態です。 e.CanExecuteを常にtrueにしているのに、何故コンテキストメニューの方は無効になってしまうのでしょうか?
>>868 バグっすか。こういうのって後でちゃんと修正されるのかな…
リンク先の通りやったら有効になりました。thx
870 :
858 :2008/05/16(金) 22:28:19
>>859 書き換えてみましたけど、なぜかできませんでした。
やはりvisualC#では乱数を使うことができないのでしょうか?
(そんなことないとは思うのですが・・・・・。)
>>870 Random.Next(1, 4) の方も random.Next(1, 4) にした?
そもそもオブジェクトって考え方わかる?
C言語のrand関数みたいなのだと、複数の独立した乱数列作れないのよ。
C#だと、
Random rnd1 = new Random();
Random rnd2 = new Random();
みたいに複数の乱数列作れる。
rnd1.Next() みたいに使う。
>>870 Random Randomとか宣言してるけど、これそもそもコンパイル通る?
Random randomとかしないと、コンパイラには型とインスタンス変数の
見分けつかないんじゃないかな?
>>872 それが通るんだなあ
クラスと同じ名前のプロパティとかあるでしょ
>>873 うそで〜とか思って試してみたら通ったΣ(´Д`; )
警告すら出ないとか、びっくりしたわw
今の今まで気づいてなかった俺もちょっとどうかと思うがorz
>>858 Random random = new System.Random();
int[] koma;
private void Form1_Load(object sender, EventArgs e)
{
koma = new int[] { random.Next(1, 4), random.Next(1, 4), random.Next(1, 4), };
}
>>870 「なぜかできませんでした」とかふざけてるの?
どうできなかったかくらい書けや。
通る通らないじゃなく、書くべきか書かないべきかを論じた方が良い
878 :
858 :2008/05/17(土) 16:04:49
>>871 言うとおりやってみましたけど、エラー内容も同じで通りませんでした。
>>875 それを入力してみましたがコンパイルはとおりましたが、テキストボックスや
ボタンなどが表示されなくなりました。
そのエラー内容をそのままここにアップしろてことだよ
<Window.ContextMenu> <ContextMenu> <MenuItem Header="ほげ" Command="c:Window1.MyCmd" CommandTarget="{Binding Path=PlacementTarget, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}" /> </ContextMenu> </Window.ContextMenu> public static readonly RoutedCommand MyCmd = new RoutedCommand("MyCmd", typeof(Window1), new InputGestureCollection(new InputGesture[] { new KeyGesture(Key.A, ModifierKeys.Control) })); コンテキストメニューに"ほげ Ctrl+A"と表示され、Ctrl+Aでコマンドも実行されることを確認しました。 試しに MyCmd.InputGestures.Clear(); MyCmd.InputGestures.Add(new KeyGesture(Key.B, ModifierKeys.Control)); と動的にショートカットを変更する処理を入れてみたところ、動作自体はちゃんと変更されたのですが コンテキストメニューの表示が"ほげ Ctrl+A"のままでした。 表示も更新させるにはどうやればいいのでしょうか?
>>878 871の通りにやってみたらなぜかできました。
なぜか(笑)
>>878 コントロールが表示されなくなったってのは、一体どこまで書き換えてるんだという感じだな。
プログラミングの基本的なことも知らなさそうだから、
先ずは一通り入門書やってみた方がいいんじゃないか?
でないといつまで経っても、乱数を使うなんて超基本的なことも出来ないぞ。
リッチテキストについて質問です。 テキストエディッタによくある「指定文字列で改行」を実装したいのですが どのような方法で実装していけばいいでしょうか
885 :
884 :2008/05/17(土) 20:35:04
誤字申し訳ないです。 「指定文字列で改行」でなく「指定文字数で改行」です。 よろしくお願いします。
>>885 回数指定クラスを使った正規表現を思い付いた
個人的にはその辺になるともうRichTextBoxじゃ首が回らなくなると思うけどな EM_SETWORDBREAKPROCEX でなんとかなるかな?
var point = new Point( 123, 456 ); <- ここのインデントを自動的に下げる機能はVC# Expressにはない?
889 :
858 :2008/05/18(日) 00:52:59
>>883 ありがとうございます、みたところ変なところまで書き換えてしまっていました。
もう一度冷静になってやってみたところ成功しました。
もうひとつ質問なのですが、さっき問題になっていたkoma
をテキストボックスに表示しようとしたのですが、実行してボタンを押すと
ハンドラされていない例外が発生しましたといわれました。おそらく
どこかを大きく間違っているとおもうのですがわからないのでおしえてください
namespace _001
{
public partial class Form1 : Form
{
Random random = new System.Random();
int coin = 100;
int check = 3;
int[] count = new int[] { 1, 1, 1 };
int[] koma;
public void Form1_Load(object sender, EventArgs e)
{
koma = new int[] { random.Next(1, 4), random.Next(1, 4), random.Next(1, 4), };
}
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
textBox1.Text = koma[0].ToString();
}}}
まだ変なところを書き換えたままだよ。 もっかいプロジェクトを作り直してみたら?
891 :
858 :2008/05/18(日) 00:59:09
そうですか?どの変が変なのでしょうか?
>>891 public void Form1_Load(object sender, EventArgs e)
this.Load += new System.EventHandler(this.mainForm_Load);
893 :
858 :2008/05/18(日) 01:08:40
>>892 それは書き換えって言うより追加ですよね?
>>892 間違えて送信してしまった。
public void Form1_Load(object sender, EventArgs e)
の部分をそのままコピペしても実行されないよ。
とりあえずForm1_Loadを削除して、デザイナのイベントからLoadの所をダブルクリックする。
そうするとForm1_Loadがコードに追加されるからそこに↓を記述する。
koma = new int[] { random.Next(1, 4), random.Next(1, 4), random.Next(1, 4), };
Loadは出来ているようだから、 button2_Click の方だな。
896 :
858 :2008/05/18(日) 01:16:47
>>894 できました、見たところ記述する場所(?)がわるかったみたいですね。
ありがとうございました。まだまだプログラムはネットの入門サイトみて
やってるばかりなので一回入門書買って真剣に勉強したいとおもいます。
というわけでvisualC#の入門書で一番やさしいのはなんですか?
897 :
884 :2008/05/18(日) 01:42:53
>>886 回数指定クラスについてよくわからないのでググってみます。
>>887 RichTextBox以外の選択肢だとユーザー作成のコンポーネントということでしょうか?
今までに利用したことがないので調べてみたいと思います。
またEM_SETWORDBREAKPROCEXについて軽くググってみましたが
ちょっとややこしいみたいですね…。
こちらも後ほど詳しく調べてみたいと思います。
みなさまありがとうございました。
>>880 RoutedCommand及びInputGestureCollectionのメンバ見れば分かるけど、ジェスチャの変更を通知する機構は存在していない。
MenuItem.Commandプロパティ自体を変更すればMenuItem.InputGestureTextも当然変わるのでこれをどうにかする。
例えばmyCmdって名前のリソースを考えて、
XAMLで
・MenuItem.CommandはmyCmdをDynamicResourceとして参照する
コードで
・Window.InitializeComponent直後にResources.Add("myCmd", MyCmd)する
・ジェスチャ更新時にはResources["myCmd"]に一旦nullを入れた後MyCmdを入れなおす
>>896 入門書を買うのもいいけどもう少し入門サイトで
勉強してみるのもいいんじゃないかと思った。
最初の内は意味がわからないプログラムを右から左に
書き写していくうちにみえてくるものがあると思う。
もちろん手元に本をおいて勉強する方法も全然問題ないけど。
>>896 猫でもわかるシリーズで一緒にやろうぜ
オモローそうだし
ググってみ?HPで遊んだあと、気に入ったら本書自腹で買う予感
ちなみにC#はVBと違い大文字小文字判断するんだが・・・
CのstaticってC#ではどんなキーワードになってるんでしょうか。 何も考えずに static int a; のように打ったら怒られました、、、
>>902 メンバ関数内でstaticは使えない。メンバー変数として使用すること。
VBだと関数内で使えるのだが、メンバー変数で使うのと意味が違うので要注意。
補足。 ファイルスコープの static は static private なメンバー変数に。
906 :
858 :2008/05/18(日) 13:39:15
>>899 ありがとうございます、一応今のところ入門サイトを見て勉強していますが、
多少わかりにくい部分があるので本を買おうかとおもっています。
>>900 猫でも分かるシリーズみつけました、ここでも勉強してみようとおもいます。
皆様ありがとうございました。
USBメモリが挿されたことを検知するためにはどうしたらいいですか?
太閤検知
WM_DEVICECHANGEでも使えばいいんじゃね
911 :
デフォルトの名無しさん :2008/05/18(日) 23:13:49
stringを関数に渡して、そこで加工をして、呼び出し元に返すにはどうすれば良いですか? 以下のようにやったけどstring xはコピーであり、testFuncが終わるとなくなってしまいます。 private bool testFunc(string x) { x = x + "aaa"; return true; } private void button1_Click(object sender, System.EventArgs e) { string sss = "test"; testFunc(sss); MessageBox.Show(sss, "testaaaになった"); }
>>911 private bool testFunc(ref string x) で。
>>911 今のままじゃstringはメソッドの中でしか使えないので
メソッドの外で宣言してグローバル変数にしないと
基本的に文字列は不変(変更できない) 変更する文字列にはStringBuilderをつかう
>>912 の補足。
呼び出し側もrefが必要か。
testFunc(ref sss);
916 :
デフォルトの名無しさん :2008/05/18(日) 23:24:35
こんばんわ〜。レスありがとうございます。m(_ _)m
>>912 早速ためさせていただきました。でも
C:\Documents and Settings\xxxxx\My Documents\Visual Studio Projects\Test\Form1.cs(124): 'Test.Form1.testFunc(ref string)'
に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。
ってなってしまいまする。
みなさま、ありがとうございます。
>>915 さんのご指摘のとおりにやったら出来ました。
そのほかの方々からのご意見も非常に気になるところですが。
(グローバル変数じゃなければいけない、StringBuilderを使う、などなど)
CやC++のポインタみたいなものがあればよいのですが。。
皆さんありがとうございました。
private string testFunc(string x) { return x + "aaa"; } private void button1_Click(object sender, System.EventArgs e) { string sss = "test"; sss = testFunc(sss); MessageBox.Show(sss, "testaaaになった"); } これじゃ駄目か?
クラスの参照は全部ポインタみたいなもんでしょ ポインタ演算はできないけども
>>917 >CやC++のポインタみたいなものがあればよいのですが。。
ref がまさにそれ。
>>918 それでもいいかもしれんけど、TryParseみたいに、成功かどうかをリターン値で返して、
引数で結果を返すとかやりたいってこともあるしな。
ref で渡さなくてもクラス内のプロパティとか変更できる挙動にも少し混乱した、おれ。 refって参照渡しではなくて、参照が変更可能な意味なんだよな。
値型をrefで渡すと参照になって 参照をrefで渡すと参照の参照になるんだろ
>>922 まあ、そう。
参照型をrefすると2重ポインタ状態になる。
SomeType** p に対して p = new SomeType(); するような感覚。
値型に対するrefの場合普通にポインタと同じ感覚になる。
なるほど、勉強になる。
最初から素直にポインタ用意してくれりゃいいものを。。
アドレス演算目的と参照目的は分けたほうがいいと思います、先生。
いちいち*とか&とか付けなきゃいけない世界に戻るならJavaにいくわ
C#からストアドプロシージャを実行する方法を教えてください。 DBはSQL Server 2005、ストアド自体はTransact-SQLで作成してます。 自分なりにググって見たんですが、ストアドプロシージャの作成方法ばかりで C#からの呼び出しコード例が見当たりません。
>>926 ポインタは、間違った操作も平気でできるのと、
用途がいっぱいあってどの用途で使ってるのかわからないのが問題。
C# でポインタがないのは誤操作をなくすとともに、
プログラマの意図がソースに残るように用途ごとの構文作った。
C# で ref と out が分かれてるのも、用途が分かるように。
コレクションでも配列でもいいのですが、たとえば元のデータが いちご にんじん さんしょ と有ったとして、プログラムの起動時に読み込みます。 そのデータをフォーム上でいじって いちご にんじん(削除) さんしょう(更新) しいたけ(追加) という編集をしたあと、元のデータをもう一度読み込みマージしたいのですが、 データベースを使わないでやるなら、どういう流れで処理するのがよいのでしょうか? 上には更新も書きましたが、基本的には削除と追加だけでやろうと思います。
マージって具体的に何をするのよ
934 :
932 :2008/05/19(月) 10:57:48
>>933 言葉が足りませんでした。
いちご, にんじん, さんしょ
と書いてあるテキストファイルを上の処理をすることで
いちご, さんしょう, しいたけ
に書き換えたいわけです。
普通に開いて全部書き込んでしまえばいいわけですが、
もし他の人も読み込んでいたら、他の人が編集する際に古いデータが上書きされてしまいます。
データベースを使うほどの内容でもないので、できればテキストファイルでやりたいなと思いました。
テキストファイルは上書きされるのは避けられないさ 普通に開いて全部書き込めばいいと思うよ
他の人が排他制御してない限りこちらのアプリ側でどうがんばっても上書きしちゃうんじゃないの? ファイル名別にして保存するのが一番楽だと思うけど。
何か知らんがDB使ったほうがいいような。SQLiteいいぞ
938 :
932 :2008/05/19(月) 11:35:12
>>935 >>936 まあ、冷静に考えてみればそれほど神経を使うくらいならデータベースを使う(mdbなんかも含めて)
方が早いかも知れませんね。
テキストファイルを開いて全部書き込むことにして、問題があったらDBを使う方向で考えることにします。
ありがとうございました。
>>937 SQLiteってmdbよりもいいのかな?
C#から使うファイルベースのDBだったらmdbの方が手っ取り早そうだけど、
なんかmdbと比べて利点とかあるのかな?
DB使ったって他の人が編集してるなら上書きされるのは避けられないだろ 自分が更新したら編集はやめさせるのか?
941 :
932 :2008/05/19(月) 13:07:34
>>940 Aがテキストファイルを開いてプログラムに読み込む。
Bがテキストファイルを開いてプログラムに読み込む。
Aがプログラム上で編集して書き込む。
Bがプログラム上で編集して書き込む。
Bが書き込む時に、Aが編集した内容を反映しつつ追加と削除を行いたい。
ということを考えてました。
でも、ここで書き込んでいるうちに、テキストファイルを編集するときに読み書きすれば
いいのかなと思ったり、mdbなりSQLiteなりを使ってもいいかなと考え直しました。
むしろsdfで
マージのやり方は何通りもあって、最後は判断をユーザーに任せるしかない。 この辺のアルゴリズムはDBを使っても一緒。 自身が読み込んだときのデータを編集後も記憶しておく。 書き出す直前にもう一度読み出しを行い、自身と読み込んだときのデータと同じ状態であるか確認。 同じなら変更を書き出し。 違うなら書き出しを取りやめるか何らかのマージ操作を行う。 良くあるのは他から変更されたデータと自身が書き出そうとするデータを両方表示して、 どちらを優先させるか選ばせるか、さらに編集を加えるかの判断をUIでオペレータに任せる。
反映しつつ追加と削除したいという意味が分からない Aが書き込んだときBはどうするの? Bにはどんな情報がいくの? 一番簡単な方法はAがファイルを開いてる時はBが開けないようにすることで 複数人で編集したいならAが編集を書き出したらBが即時に通知を受けて Aの変更内容をBにつたえる このときアプリはBの追加、削除した項目を全部覚えておいて Aの編集した内容に対してその追加、削除を適用するか、 Bの編集した内容を破棄してAの書き出した内容に置き換えるか といった選択肢があると思うけどどっちにしろ分かりにくい とりあえずDBを使えばどうにかなるというような問題には見えない
匿名型を型宣言したい、うぅぅ なんでもありません(T_T) 肝心なところでつかえねー
関係ないけど いちぢく、にんじん、さんしょう、しいたけ じゃなかったっけ? いちぢく、にんじん、さんしょう、しいたけ、ごぼう… 次なんだっけ・・・・?ろ、ろ、ろ、ろっぽんぞー????
匿名型ってActivatorでインスタンス化出来ないのか?
できるよ
<MenuItem Command="ApplicationCommands.Open" /> とすると項目名が自動的に"開く"になりますが、この名前はどこから取ってきてるのでしょうか? Nameプロパティとも違うようですし… 自分で作ったRoutedCommandでも同じことができるのでしょうか?
950 :
929 :2008/05/19(月) 21:47:18
>>930 ストアドプロシージャについて質問したものです。
リンク先の内容で理解できました。
良いサンプルを紹介してくださってありがとうございます。
951 :
デフォルトの名無しさん :2008/05/19(月) 23:55:42
>>939 mdbはスレッドセーフじゃ無かったと思うぞ。
複数アクセスのあり得るケースで使うとひどい目に遭う。
>>949 ブレイクポイント設定して中身見てみた感じ、
RoutedUICommand の Text プロパティではないかと。
VS 2008 SP1 β 入れると "Open" になっとる・・・
これのロケール設定ってどうなってるんだろう。
953 :
949 :2008/05/20(火) 00:24:30
>>952 あ、良く見たらRoutedUICommandなんですね。
素でRoutedCommandだと思ってた…
RoutedUICommandで調べれば一目瞭然でしたね。
お騒がせしました。
VC#2008 WPFアプリケーション アプリケーションの設定(Properties.Settings.Defaultのやつ)の保存場所を 任意の場所(exeのフォルダ等)に変更することはできるのでしょうか?
>>954 その質問するとマイドキュメント論争に発展するお^^
956 :
デフォルトの名無しさん :2008/05/20(火) 21:18:21
BandObjectでIEツールバーを作っています ツールバーの見た目を、Yahoo!ツールバーやGoogleツールバーのように FlatなボタンでXPスタイル?のような感じにしたいのですが、うまく いきません。どのようにすればいいでしょうか?教えてください。
xmlns:sys="clr-namespace:System;assembly=mscorlib" <MenuItem Header="ほげほげ" Command="〜"> <MenuItem.CommandParameter> <sys:UInt32>777</sys:UInt32> </MenuItem.CommandParameter> </MenuItem> 現状これでCommandParameterにuintの値を設定できてるのですが CommandParameter="〜"という風に、よりシンプルに書くことはできませんか?
958 :
956 :2008/05/21(水) 02:51:12
補足です。 今はbandobjectの上にtoolBarをおいているのですが、 toolBarがはみだしてしまうので bandobjectの上に直接?ボタンを並べたいのです。 toolBarのボタンはフラットにすることができましたが、 多分toolBarを置くのは間違っていると思いますので・・・ ご教授お願い致します。
1[tab]20.0 5.0 6.2 2[tab]10.0 15.0 9.5 3[tab]8.7 6.5 9.8 [tab]はtabを押して作った空白です 上のようにかかれたtxtをよみこんで float[,]などに格納するにはどのようなプログラムを打ち込めばよろしいのでしょうか?
そういう風に書く もうちょっと分からんところを絞り込め とりあえず必要と思われる手順を並べてそれぞれ調べてみろ
絞り込め 調べてみろ お前は北方謙三かw
ソープへ行け
行ってきた 次はどうすればいい?
行って来たならそんな質問出ない筈だ
>>960 1. ファイルから一行、文字列を読み込む ( StreamReader.ReadLine )
2. 文字列をタブ文字で分割する ( String.Split )
3. 分割した文字列配列を目的の変数に格納
4. 手順 1 〜 3 を、行が尽きるまで繰り返す
>>966 tabや空白の分割はどうするのでしょうか?
うまくできません><
string newstr = str.TrimStart("\t".ToCharArray()); or string[] strs = str.split("\t ".ToCharArray());
969 :
956 :2008/05/22(木) 00:10:34
自己解決しました。 コントロールはtoolbarでよかったかも AutoSizeとDividerをFalse、LockedをTrueにしたらそれなになりました。 ありがとうございました。
VC#2005なんですが、画面に表示しているウィンドウをAlt+Tabで表示させないようにする事は出来ますか? ウィンドウはC#で作成したもので、タスクバーには表示させていません。 ウィンドウを表示していない時(NotifyIcon時)はCreateParamsをオーバーライドしたり フォームプロパティを設定して消す事は出来ています。
Hideしたら出なかったなじゃなかったっけ
972 :
デフォルトの名無しさん :2008/05/23(金) 22:00:40
ハゲ
>>3 はじめてのC#
ではなくて
C#ではじめてのプログラミング
ってサイトありませんか?
974 :
デフォルトの名無しさん :2008/05/24(土) 08:03:47
ググレカス
>>973 まんま、タイトルが C# によるプログラミング入門 なサイトあるぞ。
976 :
お尋ね :2008/05/24(土) 17:39:59
画面周りはC#もしくVBのWindowsアプリケーションで作って、 データ送信部分だけをwebで作りたい つまりリッチクライアントを趣味で作りたいのだけど、 いいサイトとか知ってたら、教えて下さい。
MSDN
978 :
デフォルトの名無しさん :2008/05/24(土) 18:05:28
いやいや、最も確かで豊富な情報がそこにあるのだ。
980 :
デフォルトの名無しさん :2008/05/24(土) 18:22:40
>>979 いや、あなた様は、完全に、Sだと思われます。
ただ、私はMなので、ちょうど良い関係性です。
MとMも結構いいぞ。 たまにどっちかが不器用にSになるところがいい。 SとSは最悪。
べジータとピッコロってことか
yyy.xxx.Zenkaku(System.Windows.Forms.TextBox) こんなクラスがあるんだけど、どう書けば使えるのでしょう ・・・こんな質問だけにエスパー求む
テキストボックスを引数に渡せば内容を全角に直してくれるんじゃね?分からんけど
どう書けばってTextBox渡すしかないだろう どんな結果になるのかは知らんが
そう思って試行錯誤 「〜指定されたコンテキストが有効ではありません」と帰ってくる ギブ寸前
textbox1,text = yyy.xxx.Zenkaku("ウム"); 「〜指定されたコンテキストが有効ではありません」 だめだすた
例えば TextBox tb = new TextBox(); yyy.xxx.Zenkaku a = new yyy.xxx.Zenkaku(tb); とか
990 :
デフォルトの名無しさん :2008/05/25(日) 01:20:03
ありがとうございました 月曜 先輩に聞いてみますZzz
テキストへ直接代入じゃなくて、追加用のメソッドがあるんじゃね とC#もってない奴がいってみる
>>987 textboxをpublicにする とエスパーしてみる。
正解ならんなアホなもん使うなw
>>992 あからさまにstring渡してるじゃん。
つかtextbox渡す意味が一体どこにあるのやら。
え?
先輩に退職届の書き方教えてやれ。 転職サイトチョイスしてやってもいいと思うぞ。
>>989 No1エスパー
コンパイル通ったがボタン押すと
今度はアプリケーションランでひっ掛かりやがる
「ファイルまたはアセンブリ xxxx または依存関係の1つが読み込めません」
ここは自力でいきま
みんなありがとう
このレベルが職業マやってるのか・・・俺は運がいいなぁ
結局文法というか基本がわかってないだけかよ
元のクラス自体も、名前とコンストラクタ引数見ただけで(ry
1000げっと いやっほい
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。