[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 04/03 02:06 / Filesize : 241 KB / Number-of Response : 993
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

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



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

前スレ

ふらっとC#,C♯,C#(初心者用) Part24
pc11.2ch.net/test/read.cgi/tech/1202028267/

2 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 18:27:47 ]
C#, C♯, C#相談室 Part45
pc11.2ch.net/test/read.cgi/tech/1200911737/

C♯, C#相談室 Part34
pc11.2ch.net/test/read.cgi/tech/1162467959/

【新GUI FW】WPF(XAML,AVALON,.NET3.0)【重い?】
pc11.2ch.net/test/read.cgi/tech/1162950198/

Windows Live プログラミング
pc11.2ch.net/test/read.cgi/tech/1188112572/

初心者のためのプログラミング言語ガイド Part7
pc11.2ch.net/test/read.cgi/tech/1200807067/

3 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 18:30:26 ]
>>950を踏んだ人は新スレを立てて下さい。
>>950が無理な場合、話し合って新スレ立てる人を決めて下さい。


誰も建てないので立てますた。



4 名前:前962 mailto:sage [2008/02/27(水) 18:43:58 ]
>>前967
ありがとうございます。
どうしても同じスコープにするのは難しそうです、現状は大雑把なキャンセルということで満足しておくことにします

5 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 18:45:13 ]
>>1 乙。

>>前スレ998
わざわざ匿名メソッドとか使うまでもなく
OwnerForm.Invoke(new Action(OwnerForm.Show));

6 名前:前スレ998 mailto:sage [2008/02/27(水) 18:59:49 ]
>>5
たしかにその通りですねw
おかげでコードがシンプルになりました。
ありがとうございます。

7 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:00:52 ]
パネルのどこでダブルクリックをしても同じ動作をしたいのですが、
FlowLayoutPanel.MouseDoubleClickイベントは上に何も乗っていない場所でしか起きないようです。
上に載せたコントロール全てに同じイベントを設定してあげなければいけないのでしょうか?
それとも何かワザがあるのでしょうか?

8 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:17:32 ]
>>7
俺はそのワザというのがちょっと思いつかんけど、
俺だったらPanelの子コントロールコレクションをForeachでループして
一行イベント追加の構文書いて実現するね。
3行でいけるっしょ。



9 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:21:06 ]
>>8
!=7ですが面白い手ですね、自分は諦めてました

10 名前:7 mailto:sage [2008/02/27(水) 19:35:42 ]
>>8
ありがとうございます。踏ん切りが付きました。



11 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:54:17 ]
質問です。
例えばデフォルトのForm1クラスのような、継承やインスタンスの生成を1度しかしないクラスがあったとした場合
クラス内メンバ全てにstaticをつけた方が良いのでしょうか?

また、通常の設計などがわからず、インターネットで調べつつ色々作ってみています。
エントリポイントである以下の部分には通常手を加えるものなのでしょうか?(Program.cs)
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Properties.Form1());
}
}
全てForm1クラス内で済ませているのですがどうにも不自然に感じてきています
おかしなことを言っていたらすいません、それではよろしくお願いします

12 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 20:01:17 ]
>>11
パフォーマンスの点ではstaticをつければ、パーマネント領域に移ってガベージコレクト対象から外れるのでいいかもね。
汎用性をとるなら、普通にメンバにしておいたほうがいいんじゃないかな。
自分は "クラス名.メソッド()" と書くとコードがシンプルになるらな迷わずstaticを選ぶね。
エントリーポイントは時に変更が必要不可欠になる事がある、そのときのために触らなくて済む限り触らない、綺麗なままにしておく。

13 名前:11 mailto:sage [2008/02/27(水) 20:04:56 ]
>>12
ありがとうございます。
主要処理部分をとりあえずstaticにしておくことにしました。
エントリポイントについては把握しました。
自分の場合Form1クラスを中心に他を操作するような感じでいけばいいわけですね

14 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 20:28:00 ]
staticにするとコントロールに触れないよ?
だからってコントロールもstaticにするとかアホなことするくらいなら迷わずインスタンスメソッドにする

15 名前:11 mailto:sage [2008/02/27(水) 20:31:59 ]
コントロールをstaticにすると何か問題があるのでしょうか?
まず最初にコントロールをstaticにしてましたorz
一応色々調整してうまく動いています

16 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 20:40:21 ]
デストラクタで全コントロールをDispose()すればいいんじゃね、と初心者が行ってみる

17 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 20:48:41 ]
>>15
>何か問題
コードの読み手(一ヵ月後の自分だってそうだ)を無意味に惑わすのが問題。

普通の能力の読み手なら「あえて」staticにしているのには何か意味があるはずだ、
と考えると思うんだが、実際には何の意味もない(あったら教えてくれ)ってのは
大問題でしょ。


18 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 20:59:27 ]
エスパーするとステータスバーだけpublic staticにするといい

19 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:10:04 ]
どう「いい」のかねw

20 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:11:39 ]
エスパーするとって書いてあるんだから馬鹿にするんだからどうエスパーしたかわかってるんだろうな、すごいなw



21 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:16:28 ]
>>16
コントロールをstaticにしてたらGCの対象から外れるからデストラクタが呼ばれない

22 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:15:23 ]
>前スレ992
2秒差で無茶ゆうなよw


23 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:25:41 ]
>前スレ992
こ れ は ひ ど い

24 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:10:29 ]
>>21
呼ばれるよ、アプリが終了する時までには。
実行中はガベコレの対象にならないというだけで、他にもこのパーマネント領域にはクラスのTypeのオブジェクト等がいる。

25 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:46:00 ]
匿名型で System.Collections.Generic.List は簡単に作れないのでしょうか?

var tmp_array = new[] {
new { Col1 = 10 , Col2 = "あ" } ,
new { Col1 = 20 , Col2 = "い" } ,
new { Col1 = 30 , Col2 = "う" } ,
};
var list = tmp_array.ToList();

とりあえずこんな具合に作ってみたのですが、どうにも無駄っぽい感じがします。

26 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:47:25 ]
エクスプローラの左側みたいなデスクトップがルートのツリービューを作りたいんだけど
そういうコントロールって無いの?
TreeView使って自分で項目追加するしかないのかなあ。

27 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:01:46 ]
>>26
Microsoft.VisualBasic.Compatibility.VB6.DirListBoxとか、使った事無いけどそれっぽいの出るよ。


28 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:09:57 ]
>>25
var list = new[] {
new { Col1 = 10 , Col2 = "あ" } ,
new { Col1 = 20 , Col2 = "い" } ,
new { Col1 = 30 , Col2 = "う" } ,
}.ToList();

これでいいんじゃない?

29 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:19:37 ]
ひさびさにツールボックスの追加項目色々ながめてみたら結構色々よさげなの多いね
言語の壁を越えられるライブラリはすばらしい

30 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:44:49 ]
C/C++で言うところのstatic修飾されたローカル変数と同様の動作をするローカル変数を定義することはできないのでしょうか?



31 名前:26 mailto:sage [2008/02/28(木) 00:45:25 ]
>>27
うーん、見た目がなんか古臭いし、デスクトップがルートじゃないのも…
自分で作るしかないか。
シェルネームスペース関連のクラスって無いですよね?
その辺も整備しないといかんのか…

32 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:46:31 ]
>>30
静的メンバ変数じゃあかんのか?

33 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:52:53 ]
>>31
Com側も探してみたら、なんか色々あるよ。
もっともComインターフェイス系のクラスは、どれも表示できても使い勝手悪そうだけど……

34 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:53:45 ]
>>32
それでも実装できるんですが、一つのメソッドでしか使用しない変数なので他のメソッドにもスコープを広げるのはどうかと思いまして・・・

35 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:57:56 ]
>>34
privateしかないですね、C#は、というか.NETはリフレクションという機能があって、
自分自身のコードをプログラムから覗く機能があって、スコープ概念は実質ないというか使えません。
たとえば、あるクラスにどんな変数や関数があるのかプログラム中で一覧を列挙できるんですよ。
この機能はC++では、templateメタプログラミングで代用ですね。

36 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:00:42 ]
>>35
細かい解説ありがとうございます。privateメンバで実装したいと思います

37 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:20:30 ]
C++でもtemplateが絡むと static ローカル変数は怖いんだよ
Microsoft じゃない方の M の付く会社で作っている、なんとかリャーとかいうコンパイラは
型が違うなら別々のインスタンスにすべき所を纏めて一つだけとって重複バグをやらかしたりその反対やらかしたりと・・・

38 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 09:10:50 ]
エビフリャー?

39 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 10:18:30 ]
おんどりゃー!

40 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 11:33:31 ]
クロージャ使えばそれっぽいことできるよ
実質メソッドごとに内部クラス定義してるのと一緒だけど



41 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:19:21 ]
こう書くとwhileのループに捕まってしまう事があるのですが何か良い方法はありませんでしょうか?

WebBrowser wb = new WebBrowser();
wb.Navigate(uri);
while (wb.Url == null)
{
Thread.Sleep(1000);
Application.DoEvents();
}

42 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:25:20 ]
Navigated イベントとか使えよ

43 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:31:58 ]
今はイベントでやっているのですがイベント無しだと無理なのですね。

44 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:35:39 ]
イベント前提のフレームワークなんだから

45 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:33:45 ]
int a = 0;
a = a++;

ってやるとaの値が0のままなんだけど、これはどういう理屈?
C++だとインクリメントされた値になるんだが

46 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:41:03 ]
a = ++a;なら1になるのでは?

47 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:44:32 ]
馬鹿は黙っててください

48 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:53:38 ]
仕様に逆らって喜んでいる基地外に言われたくない

49 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:59:55 ]
は?

50 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 23:04:04 ]
a = a++;
右辺から評価されていく。
aをインクリメントし、式としてはインクリメントする前の値を返す。
すなわち
a = 0;



51 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 23:06:54 ]
今時こんなバカな話がでるとは

52 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 23:31:31 ]
C++とC#で挙動が違うって言うのはちょっと面白い。

53 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 23:34:08 ]
C++だと未定義で動作は処理系依存じゃなかったっけ?

54 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 00:10:03 ]
>>53
代入演算ですらそんな挙動するっけ?

確かに、x = f(a) + g(b) みたいなのは、f と g のどっちが先に呼ばれるか
未定義・処理系依存だったと思うけど。
C++ は思った以上に処理系依存動作多いもんなぁ。

55 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 00:34:33 ]
>>45
int a=0;
a++;

a=1
になるんですよ、クソガキ

56 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 00:43:03 ]
>>55
そりゃなるだろ

57 名前:デフォルトの名無しさん [2008/02/29(金) 02:45:36 ]
物凄い勢いで走るスレッドがあるのですが、
ウェイトは下記のどちらが良いのでしょうか?

// 1
System.Threading.Thread.Sleep(1);
Application.DoEvent();

// 2
Application.DoEvent();
System.Threading.Thread.Sleep(1);


58 名前:デフォルトの名無しさん [2008/02/29(金) 02:54:39 ]
1しかあるまい

59 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 08:10:41 ]
>>57
そのスレッドはUIスレッドなのか?
そうじゃないならプライオリティを下げるのが常套。

60 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 08:16:15 ]
>>59
くわしく



61 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 08:24:00 ]
Application.DoEvent()はいらないでしょ。

これはマルチスレッド使えないVB6のDoEventsからから恐らく来てるわけで、
つまりUIスレッドでビジーループで仕事してもUIが無反応にならないように
したい場合に使うわけでしょ。

つまりCドトネトでは普通は使い道はあまりないはずと思うが。

62 名前:デフォルトの名無しさん [2008/02/29(金) 11:32:24 ]
Cでいうところの自己参照構造体を実現したいのですが、
どうすればよいでしょうか?

<C>
typedef struct hoge {
long foo;
struct hoge* bar; /* 自己参照 */
} hoge;

→OK


<C#>
struct hoge{
public int foo;
public hoge bar; /* 自己参照 */
}

→エラー。以下メッセージ。
型 'hoge' の構造体メンバ 'hoge.bar'により、
構造体レイアウトで循環参照が発生します

63 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:33:56 ]
参照

64 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:36:01 ]
構造体じゃなくてクラスを使う

65 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:09:49 ]
ListViewの背景をいろいろ描写したいと思って
OnPaintBackgroundを継承したのですが、
背景は描写されましたがアイテムが描写されません。
背景以外は普通に描画したいのですが。

66 名前:65 mailto:sage [2008/02/29(金) 14:10:33 ]
コード。
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
class ListViewEx : ListView{
public ListViewEx(){
this.OwnerDraw = true;
this.SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaintBackground(PaintEventArgs e){
using (LinearGradientBrush lgb = new LinearGradientBrush(this.ClientRectangle, Color.Black, Color.White, LinearGradientMode.Vertical)){
e.Graphics.FillRectangle(lgb, this.ClientRectangle);
}
}

67 名前:65 mailto:sage [2008/02/29(金) 14:11:04 ]
protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e){
e.DrawDefault = true;
base.OnDrawColumnHeader(e);
}
protected override void OnDrawItem(DrawListViewItemEventArgs e){
e.DrawDefault = true;
base.OnDrawItem(e);
}

protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e){
e.DrawDefault = true;
base.OnDrawSubItem(e);
}
static void Main(){
Form form = new Form();
ListViewEx list = new ListViewEx();
list.Dock = DockStyle.Fill;
list.Items.Add("unko");list.Items.Add("unko");list.Items.Add("unko");
form.Controls.Add(list);
form.ShowDialog();
}
}

68 名前:デフォルトの名無しさん [2008/02/29(金) 14:17:49 ]
スレッド4本上で.NET Remotingを使って10MB/100ファイルくらいを
一気に取得するプログラムを作っているのですが、高負荷になると
クライアント側のWindows(2003)が毎回ブルースクリーンになって
しまいます。

クライアントのハードウェアが壊れているのかと思い手持ちの3機種で
試してみたのですが、どれも同じ結果でした。
mouclass.sysなど、毎回違うところで止まっているので原因がサッパリ
わかりません。

69 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:23:36 ]
>>65
OwnerDrawのときは
OnDrawItemやOnDrawSubItemで自前描画しないと駄目よ
base.OnDrawItem等を呼んでもなにもしてくれないよ


70 名前:65 mailto:sage [2008/02/29(金) 14:35:03 ]
>>69
そうなんだ。
e.DrawBackground()とかすればいいんですね。

となるとDrawDefaultはどういうときに使うんでしょう。
ネットに転がってるサンプルだとOwnerDraw = trueでも
e.DrawDefalt = trueしてそのままになってる。



71 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:40:06 ]
>>68
よくわかんないけど、ブルースクリーンになるのはディバイスドライバの障害だよ
どこかのドライバがバグっている。

72 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:41:30 ]
このListWiewを使うと、グラフィックソフトにレイヤー機能を持たせるのが簡単になりますか?
いまグラフィックソフトを作ってますが、レイヤーごとにGraphicオブジェクトを用意してそこへ描画してるんだけど、
管理が複雑になってしまって。

73 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:02:23 ]
>>72
フォトショップのレイヤーみたいなもの?
もしそれなら、自前で作ったほうが無難な予感がするな。
未来志向ならWPFという手もあるかもしれない、使った事無いけど。(←ぉぃぉぃ)

74 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:04:20 ]
(←ぉぃぉぃ)って何?

75 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:04:53 ]
Paint.NETのソースコードをパクれば

76 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:05:15 ]
自己突っ込みでつ

77 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:15:03 ]
pc11.2ch.net/test/read.cgi/tech/1162950198/l50
WPFあんまり流行ってないですね、チュートリアルビデオとかみるとスイスイ完成して気持ち良さそうなんですけど
リファクタリングが対応してくれればもうちょっとは使い勝手もましになりそうですが、次のVSに期待ですね。

78 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:40:50 ]
その辺よりデザイナを色々なんとかしてくれ。XAML養成ギブスとか
言われないぐらいには。

コード書いたら負けかなと思えるぐらいに柔軟なのはわかったから

79 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:45:20 ]
MS「ないものは自分で作ればいいお」

80 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:55:37 ]
listview.Items.Add("text").Name = "";
listview.Items[""].Selected = true;

これだとエラーになるのですね。



81 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 23:36:22 ]
Visual Studio2005の話なのですが、プロパティを作成すると
フォームのプロパティに表示されるものとされないものがあります。
表示されるものとされないものの違いがよくわからないので教えてもらえないでしょうか


82 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 23:43:00 ]
プロパティーの前に[BrowsableAttribute(false)]と書く
他にもいろいろあります、リンクの先へどうぞ。
www.microsoft.com/japan/msdn/net/general/pdc_vsdescmp.aspx


83 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 02:14:19 ]
>>82
悩んでいたのは操作方法ではなく追加方法なのですが、自己解決しました。
恥ずかしいことに継承せずにプロパティを追加するだけでプロパティブラウザに追加できると勘違いしておりました。
リンク先の内容を役立てることができそうです。ありがとうございました。

84 名前:デフォルトの名無しさん [2008/03/01(土) 17:30:13 ]
C#3.0になってから var キーワードができましたが、ぱっと見た目で型がわからないので、不便なんですが・・・
コーディング中に簡単に型を知る便利なテクニックとかないですかね?

var instance = object.Method() ;
   ↑
   ここにマウスカーソルを置いたら型が分るとかだったら便利なんですけど・・・出ない


85 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 17:31:05 ]
>>84
VS 使ってるならそれで型分かるよ。

あと、個人的には右辺値から型が分かりにくいときはあんまり var 使いたくないなぁ。

86 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 17:32:36 ]
>>84
varの上

87 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 17:39:45 ]
>>86
しまった気付かなかった、そんな所に

88 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 19:03:19 ]
using System.IO;

DirectoryInfo info = new DirectoryInfo( @"C:\");
info.  ← ここで候補が出てこないのは何故?

89 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 19:05:08 ]
メソッド内じゃないからじゃね?

90 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 19:16:14 ]
>>89
お恥ずかしい・・・



91 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:35:46 ]
コンソールでベーマガ風のテキストベースのゲーム作ろうと思ったら
どういうクラス、API使えばいいの?
80x25の配列を用意して適当に着色して■Ωとか配置してキー入力を受け付けられればいいんだけど。

92 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:40:52 ]
Console

93 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:49:38 ]
いい加減静的型言語の悪癖から抜けろよ
varで分からなくなるってどんな変数名つけてんだよ

94 名前:デフォルトの名無しさん [2008/03/01(土) 23:07:21 ]
クラスのFieldに番号を付けて、その番号のFieldを呼び出すってことがしたいのですが、
属性を作成してその属性に番号を格納してってことをしてみたところで、
属性の内容からFieldを取得する方法が分からず挫折してしまいました。

なんとかしてFieldを取得する方法はありませんか?

95 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:07:39 ]
>>93
場所によっては分りにくくなることもあるべぇよ、大半問題ないけどね。
ちなみにC#の var は静的な型だよ。
var i = 0 ;
と書いたら
object i = 0 ではなくて int i = 0 だから。

>>91
そりゃもう System.Drawing.Graphics を使って直書きしかないね、
普通に印刷したらプロポーショナルに美しく表示されてしまいますからw
詳しい説明いるかい?
必要なら追記しましょう。

96 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:17:28 ]
>>94
フィールド列挙してそれぞれの属性調べてく

でも属性でやる必要あるの?
インデックスを引数にとるメソッド一つ用意すればよくない?

97 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:20:22 ]
>>94
ちょっと作ってみた
public class MyAttribute : System.Attribute
{
public int IntData { get;set;}
public MyAttribute(int intData) { IntData = intData ; }
};
public class SumpleClass
{
[My(10)]
public int Field = 5 ;
};
void f(){
var tmp = new SumpleClass() ;
var attrs = tmp.GetType().GetField( "Field" ).GetCustomAttributes( false ) ;
for (int i = 0; i < attrs.GetLength(0); ++i)
{
var myattr = attrs[i] as MyAttribute ;
if (myattr == null) continue;
System.Console.WriteLine("{0}", myattr.IntData);
}
}

98 名前:デフォルトの名無しさん [2008/03/01(土) 23:25:54 ]
>>96
インデックスですか・・・?
class C
{
  DateTime d1;
  int i1;
  string s1;
  DateTime d2;
}
って感じなのですが、
上から順番にd1には0番の値を、i1には1番の値をって代入していきたいんですよ。
objcet[] data = //データ
for(int i = 0; i < data.Length; i++)
{
  field[i] = data[i];
}
というかんじが理想なんですが・・・
インデックスってのがよくわからないので詳しく教えてもらえませんか?

99 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:30:47 ]
>>98
>>97 の GetField を GetFields にして、あとはアトリビュート検索して、所望のものがあったらそのフィールドに代入してくださいな。
フィールド名から代入方法が分らないなら、また書く。


100 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:31:17 ]
public void SetValue(int index, object value) {
    switch (index) {
        case 0: hoge = (...)value; break;
    }
}
みたいな。つかこれくらいならインデクサでいいか。



101 名前:デフォルトの名無しさん [2008/03/01(土) 23:40:26 ]
>>97
すみません、属性の番号がiと一致するものの名前の取得まではできるんですが・・・
どうやってそこに代入するかが難しいです。。。

>>99
すみません、代入方法お願い致します。

>>100
なるほど・・・
でもswitch分が3ケタ超えるのは・・・
そっちのほうが保守やパフォーマンス的にはいいのでしょうか?

102 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:44:32 ]
>>101
ほい、フィールド名を検索してないけどそのへんは適当によろしく

var tmp = new SumpleClass() ;
var attrs = tmp.GetType().GetField( "Field" ).GetCustomAttributes( false ) ;


for (int i = 0; i < attrs.GetLength(0); ++i)
{
var myattr = attrs[i] as MyAttribute ;
if (myattr == null) continue;
System.Console.WriteLine("{0}", myattr.IntData);
System.Console.WriteLine("{0}", tmp.Field);
tmp.GetType().GetField("Field").SetValue(tmp, 100);
System.Console.WriteLine("{0}", tmp.Field);

}


103 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:46:26 ]
>>101
パフォーマンスはswitchの方が圧倒的に高いよ。
やり方しだいじゃありますが・・・

104 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:47:30 ]
フィールド100オーバーなクラスって・・・

105 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:47:54 ]
フィールド名の最後の数字をとってくればいいんだろ

var fields = obj.GetType().GetFields();
var regex = new Regex(@"(\d+)$");
foreach(var field in fields)
{
string numStr = regex.Match(field.Name).Groups[1].Value;

if(field.FieldType == typeof(DateTime))
{
field.SetValue(obj, dateTimeTable[int.Parse(numStr)]);
}
}

こんな感じか?

106 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:49:50 ]
>>104
C#3.0になってから普通に作れそうだけどねwww
匿名クラス楽でいいわ

107 名前:デフォルトの名無しさん [2008/03/01(土) 23:57:54 ]
>>102
すみません、よく理解できませんでしたのでswitch文にします。

>>104
>>105
すみません、フィールドの種類・名前は先に与えられていて、
そこはいじれないもので。

108 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:00:03 ]
とりあえず

field.SetValue(instance, value);

探してるのはこれじゃないの?

109 名前:102 mailto:sage [2008/03/02(日) 00:00:55 ]
>>107
ゆっり憶えればよろしい、まずは今できる方法じゃ

110 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:01:48 ]
100オーバーのフィールドに属性つけてく方が大変だしな



111 名前:102 mailto:sage [2008/03/02(日) 00:02:42 ]
>>110
100オーバーのスイッチ文とか考えたくも無いけどなwww

112 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:11:25 ]
C c = new C();

FieldInfo[] fields = c.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

for(int i = 0; i < fields.Length; ++i)
{
fields[i].SetValue(c, data[i]);
}

こうだろ

113 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:13:45 ]
>>112
GetFieldsの返す順を信頼できるあなたが素敵☆

114 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:14:41 ]
俺が試した限りではフィールドの宣言順は保持されてたけど
よく知らんな

115 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:15:43 ]
保障されているものじゃないから利用すべきじゃないな

116 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:16:10 ]
まぁ無保証だろうな、変わることもなさそうに思えるけど。

117 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:16:19 ]
で、Releaseビルドで裏切られるとw

118 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:16:54 ]
しかし一個一個属性つけるくらいならswitchも何も使わずに直接代入してった方が早いぞ

119 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:17:42 ]
※このソースをReleaseビルドするのはやめてください

120 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:19:50 ]
>>118
エクセルで一覧作っといて、あとで叩き込むとか結構俺は便利につかってるぞ
せっかくC#がJavaとの差別化として実装した自慢の機能なんだから利用してやらにゃ損



121 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:21:46 ]
>>108
それがわかっただけでも聞いてみたかいがありました。
ありがとうございます。

>>112
案の一つとしてメモっておきます。
ありがとうございます。


他のみなさまも親身な回答をありがとうございました。
また詰まったら頼らせてください。

122 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:22:48 ]
フィールドが100オーバーだろ
ソースコード生成するのが早いか、手作業でやるのが早いか悩むところだな

123 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:26:52 ]
>>122
そこでCodeDOMですよ、自己生成自己コンパイル自己実行www

124 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:29:00 ]
hoge func(out int a, ref int b) {}
というメソッドがあるとします。
引数のa, bのどちらか、または両方省略できるようにしたいです。
そこで
hoge func(out int a) {}
hoge func(ref int b) {}
hoge func() {}
を追加しようとしたのですが、上の2つがrefとoutの違いだけではオーバーロードできません。
こういう場合どういう設計にしたらいいのでしょうか?

125 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:32:05 ]
>>124
hoge funcWithAAndB(out int a, ref int b){}
hoge funcWithA(out int a){}
hoge funcWithB(ref int b){}
hoge func(){}

126 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:35:33 ]
>>125
VBとか、その他で省略能力のある言語との連携があるなら
使う側で対処する
func( out Type.Missing , ref data ) ;
といった感じ、Type.Missingが省略の意味。
C#オンリーなら素直にメソッド分けよう。

127 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:36:30 ]
あっ、いかんこのケースでは使えんかった


128 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:37:31 ]
あっ、いかんこのケースでは使えんかった、は 126 の事。

129 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:42:27 ]
あれ、安価みすっとる 126 のアンカは >>124 ね、

130 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:45:37 ]
class Result
{
public int A;
public hoge hoge;
}

Result func(ref int b)
Result func()

こうかな



131 名前:124 mailto:sage [2008/03/02(日) 01:00:40 ]
メソッド名変えた方が良さそうですね。
ありがとうございました。

132 名前:102 mailto:sage [2008/03/02(日) 02:40:42 ]
ためしに完全動作版を作ってみた、パフォーマンス的にも問題ないと思う
using System.Linq ;
public static class FieldIndexer
{
  class LookupTable
  {
    public System.Collections.Generic.Dictionary<int, System.Reflection.FieldInfo> mapIndexToField;
    public LookupTable( System.Type type )
    {
      mapIndexToField = new System.Collections.Generic.Dictionary<int, System.Reflection.FieldInfo>();
      foreach (var fieldInfo in type.GetFields())
      {
        var customAttributes = fieldInfo.GetCustomAttributes(true).OfType<FieldIndexerAttribute>();
        var count = customAttributes.Count();
        if (count == 0) continue;
        if (count != 1) throw new System.Exception("FieldIndexerAttributeが二つ以上ついているフィールドを発見");
        var index = customAttributes.First().Index;
        mapIndexToField.Add(index, fieldInfo);
      }
    }
  }
  static object syncRoot = new object() ;
  static System.Collections.Generic.Dictionary<Type, LookupTable> tables = new Dictionary<Type, LookupTable>();

133 名前:102 mailto:sage [2008/03/02(日) 02:41:25 ]
  static LookupTable GetLookupTable( System.Type type )
  {
    if (!tables.ContainsKey(type))
    {
      lock (syncRoot)
      {
        if (!tables.ContainsKey(type))
        {
          var tmp = new LookupTable( type );
          tables.Add(type, tmp);
          return tmp;
        }
      }
    }
    return tables[type];
  }


134 名前:102 mailto:sage [2008/03/02(日) 02:42:00 ]
  public static object GetValue(object dataClass, int index)
  {
    try
    {
      return GetLookupTable(dataClass.GetType()).mapIndexToField[index].GetValue(dataClass);
    }
    catch (System.Collections.Generic.KeyNotFoundException)
    {
      throw new System.Exception("指定のインデックスの設定されたフィールドが存在しなかった");
    }
  }
  public static void SetValue(object dataClass, int index, object value)
  {
    try
    {
      GetLookupTable(dataClass.GetType()).mapIndexToField[index].SetValue(dataClass, value);
    }
    catch (System.Collections.Generic.KeyNotFoundException)
    {
      throw new System.Exception("指定のインデックスの設定されたフィールドが存在しなかった");
    }
  }
}

135 名前:102 mailto:sage [2008/03/02(日) 02:43:17 ]
public class FieldIndexerAttribute : System.Attribute
{
  public int Index { get;set;}
  public FieldIndexerAttribute(int index) { Index = index; }
};
ここまでで、ライブラリ化する。

136 名前:102 [2008/03/02(日) 02:44:11 ]
使用例
public class SampleClass
{
  [FieldIndexer(10)]
  public int FieldA;
  [FieldIndexer(20)]
  public string FieldB;
};
void SampleProgram()
{
  var tmp = new SampleClass();
  tmp.FieldA = 10;
  tmp.FieldB = "ABC";

  System.Console.WriteLine("{0}", FieldIndexer.GetValue(tmp, 10));
  System.Console.WriteLine("{0}", FieldIndexer.GetValue(tmp, 20));

  FieldIndexer.SetValue(tmp, 10,1234);
  FieldIndexer.SetValue(tmp, 20,"XYZ");

  System.Console.WriteLine("{0}", tmp.FieldA);
  System.Console.WriteLine("{0}", tmp.FieldB);
}

137 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 10:37:00 ]
プロジェクトフォルダを見てみたらコンパイルの中間ファイルのようなものが見あたりません
コンパイルの度にプロジェクトに含まれる全ての.csをコンパイルしているのでしょうか?
それともどこか別の場所に置いてあるのでしょうか?

プロジェクトが大きくなってきてコンパイル時間が気になり始めたので
もし全てリコンパイルしているならdllに分割しようかと思っています。

138 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 10:40:51 ]
中間ファイルなんて基本存在しない
ので適切にDLLに分ける

139 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 10:41:43 ]
Generic使えばもっとシンプルになりそうだな。
ディクショナリじゃなくて配列で十分そうだな。
あとほんとはハンドルだけ保持しとくほうがいいかもな。



140 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 10:55:10 ]
中間ファイルはどっかにあるだろ
知らんけど
dll分けると余計に時間がかかる
しかし設計としてはどんどん分けた方がいい
依存関係が強制されinternalが有効に使える



141 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:03:27 ]
>>139
おっと、インデックスが好きに付けられるなら配列はやっぱまずいか…


142 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:09:12 ]
>>102さん
ありがとうございます。
ぜひ使わせていただきます。

143 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:15:31 ]
>>140
ソースファイルには無い リソースやxamlにはあるけど
/obj/xxxにも直接アセンブリが作られる
もちろんソースその他に変更の無いアセンブリはコンパイル対象にならない

144 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 12:13:00 ]
全部をコンパイルしなおすなんてそんな馬鹿なことをするわけがないだろう
中間ファイルが見当たらないことからそんな結論が導かれるわけがない

145 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:21:12 ]
>>107
>>105のやつは

dataを

foreach(object obj in data)
{
if(obj is DateTime)
{
dateTimeTable.Add((DateTime)obj);
}
if(obj is int)
{
intTable.Add((int)obj);
}
...
}
とやっていって、フィールド名の最後の数字を取得して、
field.SetValue(instance, dateTimeTable[num - 1]);

こうやっていけばきっちり出来るんじゃないかという話だ
フィールドはいじらなくていい

146 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:32:28 ]
構造体にまとめといてunsafeでbyte[]から無理矢理代入すればいいんじゃね

147 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:49:11 ]
C#ってなんでビットフィールドないの?

148 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:50:44 ]
BitArrayで我慢してください
つかいらんだろあんなの

149 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:52:22 ]
あとBitVector32

150 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:54:50 ]
ビットフィールドと共用体便利だったのになー



151 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:58:27 ]
>>147 >>150
プロセッサ非依存の.NETでは避けた方がいい、ビッグエンディアンで大変な事態に陥るから。
安易な実装事故の元

152 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:00:40 ]
初心者なんですが実際のソフトウェア開発なんかでビット単位で何かを扱うなんてことあるんですか?
どんな場合に使うかちょっと想像できないでいます

153 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:05:02 ]
>>152
いろいろある、データ圧縮では定番のテクニックの一つ

154 名前:152 mailto:sage [2008/03/02(日) 14:06:40 ]
データ圧縮ですか…ということは限定的なソフトウェアに限る、のかな

155 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:07:10 ]
アーカイバならC#で作らんだろう

156 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:08:59 ]
>>155
#ZipLibを馬鹿にしたな!?

157 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:13:48 ]
DGCAが気になってる最近

158 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:14:17 ]
でも、MSIL上でビット単位の処理できても嬉しくないよね
消費リソースを抑えたいなら、結局はそこだけnativeにする形になるし

159 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:14:48 ]
>>152
ネットワークプログラミングやバイナリファイルの読み込みではビットオーダーに気をつけないといけないね。

160 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:15:43 ]
自分で作ったクラスライブラリのファイルを複数のプロジェクトで利用する事は出来ないのでしょうか?。
プロジェクト毎にコピーされるのではなく1つのクラスライブラリファイルを複数のプロジェクトで共有したい。



161 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:17:42 ]
>>158
環境非依存ビットストリームライブラリは欲しいと思うけど、なおnativeは今後の事を考えると問題を引き起こす可能性が高いから止めるべき。
そもそもCom相互運用では処理速度が低下してかえって良くない状態に陥る。

162 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:19:27 ]
>>160
普通にできるよ、追加のところのメニューをくまなく探す

163 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:25:39 ]
>>160
聞く前に検索くらいしろよ。一発で出てきたぞ
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/596vssharelinkfile/vssharelinkfile.html

164 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:37:00 ]
>>162-163
ありがとうございます。追加ボタンの横にある矢印に気付きませんでした。

165 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:37:05 ]
まあ、新興の言語だとビットフィールドを採用しない傾向にあるからね。
intrinsicなビット操作命令は持ってたりするけど。

166 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:03:15 ]
自作板のAHCIスレから来ました。

「iata75_cd.exeに-a -aって起動オプションをつけて走らせる。」
って言われたんですが、-a -aって起動オプションをつけて
走らせるにはどうしたらいいですか?

何か書き換えるためのプログラムが必要なんでしょうか。

167 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:06:54 ]
スレ違いだコマンドラインでググれ低能

168 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:08:17 ]
>>152
GUIの設定(ラジオボタン)とかはよくビットでデータ持つよ

169 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:09:57 ]
>>168
あー、チェックが入ってるか否かを0と1でって感じでしょうか?
bool型とかにしてもそんな問題ない気はするけど実際はそういう話でもないのかな

170 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:13:18 ]
>>169
boolで一つ一つ持つよりも、ビットでまとめて
マスク処理とかした方が分岐させやすい



171 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:16:14 ]
>>167
コマンドラインですか><
了解しますた。

172 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:33:45 ]
iata75_cd.exeでぐぐるとあら不思議w

173 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:34:23 ]
盛大なマルチだな

174 名前:102 [2008/03/03(月) 01:48:41 ]
>>142
結構便利なので自分でも使い始めたのですが・・・
ダブルチェックドロックングの処理にバグを発見してしまいました、使うならこちらを使って下さい。
前出のコードではマルチスレッドで過負荷をかけると、Dictionary が壊れます。

>>139 氏の意見も取り入れて、ジェネリックにしてみました、実は当初も考えたのですが、
C++のように static 関数からジェネリックなシングルトンとなるオブジェクトを作り出す方法が思いつかなくて、
とりあえず object で実装していましたが、やり方を発見したので実装してみました。
ハッシュテーブルが一つになってさらに高速化したと思われます、またその過程でマルチスレッドバグも取れました。
あと、ハンドルの意味分りません、>>139 氏、説明お願いできますか?

さらに高速化するなら、LINQ のようにアクセス部分をコンパイルして switch 文にしまうか……
それは今後の課題にでもしておきます。
使い方は変わりません。

public class FieldIndexerAttribute : System.Attribute
{
  public int Index { get;set;}
  public FieldIndexerAttribute(int index) { Index = index; }
};

175 名前:102 [2008/03/03(月) 01:49:31 ]
public static class FieldIndexer
{
  class LookupTable<TSource>
  {
    public static LookupTable<TSource> Instance = new LookupTable<TSource>();
    public System.Collections.Generic.Dictionary<int, System.Reflection.FieldInfo> mapIndexToField;
    public LookupTable()
    {
      mapIndexToField = new System.Collections.Generic.Dictionary<int, System.Reflection.FieldInfo>();
      foreach (var fieldInfo in typeof(TSource).GetFields())
      {
        var customAttributes = fieldInfo.GetCustomAttributes(true).OfType<FieldIndexerAttribute>();
        var count = customAttributes.Count();
        if (count == 0) continue;
        if (count != 1) throw new System.Exception("FieldIndexerAttributeが二つ以上ついているフィールドを発見");
        int key = customAttributes.First().Index;
        if (mapIndexToField.ContainsKey(key)) throw new System.Exception("同じ値の FieldIndexerAttribute ついているフィールドを発見");
        mapIndexToField.Add(key, fieldInfo);
      }
    }
  }

176 名前:102 [2008/03/03(月) 01:50:11 ]
  public static object GetValue<TDataClass>(TDataClass obj, int index)
  {
    try
    {
      return LookupTable<TDataClass>.Instance.mapIndexToField[index].GetValue(obj);
    }
    catch (System.Collections.Generic.KeyNotFoundException)
    {
      throw new System.Exception("指定のインデックスの設定されたフィールドが存在しなかった");
    }
  }
  public static void SetValue<TDataClass>(TDataClass obj, int index, object value)
  {
    try
    {
      LookupTable<TDataClass>.Instance.mapIndexToField[index].SetValue(obj, value);
    }
    catch (System.Collections.Generic.KeyNotFoundException)
    {
      throw new System.Exception("指定のインデックスの設定されたフィールドが存在しなかった");
    }
  }
}

177 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 07:10:05 ]
マルチスレッド云々ならば性的コンストラクタ使えばいいじゃん

178 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 10:24:34 ]
>>170
どんな手順か教えてちょ

179 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:35:54 ]
C#ってswitch文でbreakかかなくてもだーっと全部実行されないの?

180 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:43:27 ]
関数ポインタ使えないだけですごい構文崩れるなぁ



181 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:53:38 ]
>>179
そもそもコンパイルエラー

182 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:53:55 ]
>>179
フォールスルーしたいなら明示的にgoto
caseラベル間が空白でない場合は、break/return/gotoが必要

183 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 12:55:03 ]
>>178
>>170じゃないけど、たとえば
class MyClass
{
public int X, Y, Z;
public string Str1, Str2, Str3;
public bool flag1, flag2, flag3;
}

class Program
{
static MyClass[] tmp = new MyClass[] {//何か入ってる };
static void Main()
{
foreach (MyClass item in tmp)
{
if (item.flag1)
{
//処理
}
}
}
}
フラグを読んで色々処理を変えたいようなクラスを作ったとする。
運用上、格納するフラグを増やす必要が出てきたときにどうする?
MyClassをライブラリとして作成するような場合、そのライブラリの回収が必要になってくる。
もしフラグ自体をboolじゃなくて例えばintで持っていたとすると、
1ビットに1フラグを割り当てておけばよいから、32種類のフラグを格納できる。
上の例だと、フラグが3つあるということは残り29ビットは予備の領域として確保できる。
運用を変えるだけでフラグを簡単に増やせるようであれば、ライブラリ化してあるMyClassの回収の必要がないので便利。



184 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 13:11:02 ]
>>178
あとは本題のマスク処理というのは、多分こういうことだと思う。

class MyClass
{
public int X, Y, Z;
public string Str1, Str2, Str3;
public int flag; //ビット単位でフラグを格納
public bool flag1, flag2, flag3, flag4; //全てboolで格納
}

フラグ1と3と4が立っている場合の条件分岐を考える。
boolで各フラグを格納しているクラスを使う場合、
bool f = flag1 && flag3 && flag4;

一方、intで格納しているクラスを使う場合、
int ff = 1 + 4 + 8; //それぞれflag1,flag3,flag4を表す
bool f = (flag & ff) == ff

また、全てのフラグをリセット(false)にしたいときなんかは、
flag1 = false;
flag2 = false;
flag3 = false;
flag4 = false;

intでフラグを格納してあれば当然、
flag = 0;
これだけで済む。

MyClassの中身が複雑になればなるほど、こういう手法は効果的になる。



185 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 13:12:48 ]
おまえら、そんなにC#でビットマスク使いたいなら、すなおに System.FlagsAttribute を適用した enum 使えゴラー
msdn2.microsoft.com/ja-jp/library/sbbt4032(VS.80).aspx

186 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 13:38:10 ]
>>184
なんで148?

187 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 13:44:28 ]
LINQのある今、ビット操作類もここに統合すると便利かもしれないな
bitvector.All() 指定のビットすべてについて true なら true
bitvector.Any() 指定のビットのなかに true なものがあれば true
はるかに柔軟性があるし。

188 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 13:45:06 ]
そんくらい自分で

189 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 13:49:22 ]
>>186
2進数だろカス

190 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 14:03:49 ]
>>187
BitArrayならOfType<bool>通せば可能だよ
列挙体やBitVectorにも拡張メソッド付けて
flag.ToEnumerable().Anyとかできるようにしたら面白いかもね



191 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 16:43:20 ]
ひとつのクラスで何行以上はよろしくないみたいなのはありますか?

192 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 16:48:08 ]
>>191
ない

193 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 16:56:34 ]
なるほど、ないんですかー
今色々試してみてるところで、ちょこっと場当たり的に作ってみたのですが
1つのクラスは2000行ほどなのに対してもうひとつが200行弱ほどで、その2つのみなのでどうも不自然に感じていたようです

194 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 17:02:30 ]
あんまり長いのは常識的によろしくないから気になるんだったら切ればいい

195 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 17:05:43 ]
切るっていうのはpartialってことではないですよね

主要処理部分のswitchが厄介だしここを別クラスにすべきっぽいかな…
ありがとうございました

196 名前:102 [2008/03/03(月) 17:20:58 ]
適当に長そうなところを、マウスでにるにるっと選択して
右クリック→リファクタ→メソッドの抽出
ってやればいいんだよ

197 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 17:22:20 ]
その機能はしってるんだけれども抽出してどうするんだろう

198 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 17:24:04 ]
最近namespaceを
namespace ソリューション名.Properties
にしているんですが
namespace ソリューション名
と違いはあるんでしょうか、普通にやると下になってそれがデフォルトのようですが

199 名前:102 [2008/03/03(月) 17:25:39 ]
>>198
こらー、何処にいれちょるかー
そこは、アプリケーションプロパティーの居るべき場所じゃー

200 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 17:26:27 ]
まあ名前空間はほんとにただの名前だからどうでもいいといえばどうでもいい



201 名前:198 mailto:sage [2008/03/03(月) 17:30:31 ]
最初はソリューション名だけだったけどなぜか途中から切り替えました
たしかコードか何か新規項目を追加したときかな

で、今戻したらエラーが、Propertiesでいいや

202 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 20:22:54 ]
Enum.GetValuesで得られる値の配列と,
Enum.GetNamesで得られる名前の配列の
要素の順番の対応は保障されてるの?

203 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 20:38:06 ]
されてるって書かれてなかったっけ?

204 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 21:43:45 ]
されないよ
同値異名が可能なことを考えれば明らか

205 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 21:48:21 ]
>>203
謎の日本語だけれど、期待するなと書かれているように受け止められますな

> 解説
>戻り値の配列の要素は列挙定数の値に基づいて並べ替えられます。同じ値を持つ列挙定数がある場合、対応する名前の順序は指定されていません。




206 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:07:43 ]
保障も何もどういう順序づけしていいかわかんないだろ

207 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:51:40 ]
enum Hoge
{
A = 4,
B = 3
}

こんなん書けたよな

208 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:54:56 ]
泉あつの?

209 名前:デフォルトの名無しさん [2008/03/03(月) 22:56:46 ]
>>207
書けるんじゃね
続いてCだけを定義すると自動的に4になる

210 名前:デフォルトの名無しさん [2008/03/03(月) 23:08:46 ]
すいません
C#でExcelへの書き込みを行ってるのですが、
jeanne.wankuma.com/tips/programing/releasecom.html
このソースコードでExcelの解放が出来たのですが、書き込みをする為に

xlSheet.Cells[1, 2] = "テスト";

この上記の一行を入れたら解放されなくなりました。
何が原因なのでしょうか??
もしくは上記以外でExcelに書き込んで保存する方法はあるのでしょうか?



211 名前:デフォルトの名無しさん [2008/03/03(月) 23:11:11 ]
210です!
問題解決しました!!!!!

212 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 23:11:35 ]
CellsもCOMオブジェクト返すんじゃなかったっけ

213 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 23:22:51 ]
>>211
どう解決したか書けっつーのカス
書けないなら最初から2chで質問すんな

214 名前:デフォルトの名無しさん [2008/03/03(月) 23:23:49 ]
211です。
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet.Cells);
これを入れたら、なんか解放したりしなかったり・・・
VSの問題???

215 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 23:24:27 ]
さんざん既出な気がするが回答忘れた

216 名前:デフォルトの名無しさん [2008/03/03(月) 23:25:39 ]
211です
// Excel を起動しファイルを読み込む
// ※ Excel ファイルのパスは適宜修正してください
Excel.Application app = new Excel.Application();
Excel._Workbook wb = app.Workbooks.Open(
@"C:\test\test.xls",
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing
);
wb.Application.Visible = false;

// 人口のデータを配列に読み込む
Excel._Worksheet ws = (Excel.Worksheet)wb.ActiveSheet;
ws.Cells[5, 5] = "テスト";
System.Runtime.InteropServices.Marshal.ReleaseComObject(ws.Cells);
// ファイルをセーブし、Excel を終了する
wb.Save();
app.Quit();

System.Runtime.InteropServices.Marshal.ReleaseComObject(ws);
System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);

これでは解放しない??

217 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 23:35:33 ]
もう、GC.Collect(); GC.WaitForPendingFinalizers();でいいよ

218 名前:デフォルトの名無しさん [2008/03/03(月) 23:41:22 ]
なんで同じロジックで解放したりしなかったりするんだろうか・・・

219 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 23:46:45 ]
たとえば、
app.Workbooks.Open
ここで、Workbooksが漏れる

wb.Application.Visible = false;
ここでApplicationが漏れる

220 名前:デフォルトの名無しさん [2008/03/03(月) 23:52:36 ]
>>219
ありがとう、なんか現象として、cellに入れる値を変えてリビルドすると
解放されるんだけど、すぐにもう一回すると解放されない・・・みたいな



221 名前:デフォルトの名無しさん [2008/03/03(月) 23:54:55 ]
220です
すいません。
リビルドでなくデバックです^^;

222 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 23:56:03 ]
ws.Cells[5, 5] = "テスト"; 
を分解すると
a1 = ws.Cells
a2 = a1[5, 5]
a2.set_Value(Excel.XlRangeValueDataType.xlRangeValueDefault, "テスト");

でa2の開放がもれている。

223 名前:デフォルトの名無しさん [2008/03/04(火) 00:00:02 ]
>>222
すいません。
a1,a2はなんの変数でしょうか?

224 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:00:21 ]
a1も漏れる気がするけど?

225 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:01:27 ]
a1はRangeでa2もRange。

226 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:12:15 ]
>>202
・各要素は列挙定数でソートされる
・列挙定数が同値の要素の順序は不定

Enumとしてはともかく、値だけ見れば対応していると言えるな
列挙定数が同値というのは要するに別名だし

とりあえず、(type)Enum.Parse(type,names[i])==values[i]は真

>>224
開放されてるように見えるが?
念のために補足しておくと、>>216でws.Cells[5,5]も解放しろって話だろ

227 名前:デフォルトの名無しさん [2008/03/04(火) 00:21:58 ]
解放はされるようになったが、今度は上書きされなくなった orz

// 1000 ミリ秒 (1秒) 待機する
System.Threading.Thread.Sleep(1000);
xlRange.set_Item(3, 5, "テスト");
System.Threading.Thread.Sleep(1000);
xlBook.Save();

Rangeにはset_Itemしかなく、何か参照が足りないのでしょうか??
Excel.XlRangeValueDataTypeを書いてもエラーが出ます。

228 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:33:15 ]
COMラッパの開放漏れをなくすのには限度があるから、諦めれ

229 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:33:27 ]
ws.Cellsと言った時点でリファレンスカウントが1進むんじゃないの?
だからReleaseComObject(ws.Cells)は、増やして減らして意味ない
文かなーと思ったけど

230 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:35:44 ]
>>229
RCWの参照とCOMの参照カウンタは別。
RCW、つまりマネージ参照をいくらコピーしてもCOMの参照カウンタは増えない。



231 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:38:41 ]
ReleaseComObject(ws.Cells)
は新しいCOMオブジェクトを取ってきてそれを開放するから意味がないだろ。

232 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:39:39 ]
ws.Cellsは同じオブジェクトを返してくれるの?
ExcelのCOMを経由して、あたらしいオブジェクトが2つ、3つとできるんでなくて?

233 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:41:12 ]
jeanne.wankuma.com/tips/programing/releasecom.html
ネスト深すぎテラワロス

234 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:45:36 ]
ExcelのCOMインターフェイスはExcelマクロ(VBAやそれに準じるDLLなど)のための機能で
外部の独立したプロセスからExcelを操作することを意図して作られていない。
VSTOもそういう設計思想。

235 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:50:06 ]
というより単に.NETとCOMの相性が悪い点が見事に現れただけではないの?

236 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:54:02 ]
デストラクタでReleaseComObjectするラッパ被せてusing使うと大分ましにはなるけど、それでも汚いな

237 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:55:07 ]
Office.Netマダー?

238 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:59:00 ]
ふつーのGCみたいに消極追跡(使われていないかを調査)じゃなくて
積極追跡(Excel.Applicationから生み出されたRCWすべてのweakrefリストとか)して
まとめてあぼーん、みたいにはできないものかね?
 まあ、COM一般を対象にするならイマイチつかえない、Office用途な使い方になるけど。

239 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 01:05:53 ]
タイプライブラリから生成されるアセンブリに手を加えれば出来ると思うよ。

240 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 02:41:38 ]
こんなコード書くくらいならGCにやってもらう方を選ぶね



241 名前:デフォルトの名無しさん [2008/03/04(火) 07:36:08 ]
Comが入り込む場合は、出来る限り開放したら、あとはガベージコレクタを無難なタイミングで起動して解放するほうがいいような気がします。
自分はなんとなく全部書ききってしまってますけど・・・

242 名前:デフォルトの名無しさん [2008/03/04(火) 07:38:03 ]


243 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 08:26:26 ]
なあに?

244 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 08:30:22 ]
>>174
フィールドハンドルを保持しといて、必要になった時点で
フィールドインフォを取得するやり方のこと。
まあ必ずしもやる必要はないし、
単純な速度的にはやらない方が有利だけどね。


245 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 09:19:35 ]
XmlSerializerを使った場合、BinaryFormatterでの[OnDeserialized()]に相当する機能はないのでしょうか?
TreeNode.Parentのように、
あるオブジェクトAの内部で持っているオブジェクトBでオブジェクトAをプロパティParentで持っているのですが、
これを復帰させる方法に悩んでいます。
そのままだと循環参照でエラーになってしまうのでParentには[XmlIgnore]をつけてあります。

Deserialize()したあとに再セット用のメソッドを動かせば済むのですが、
オブジェクトAはList<>の中で持っているのでループを回す必要があることもあって、
あまり美しくないのでできれば避けたいのですが、何かいい方法はないのでしょうか?

246 名前:デフォルトの名無しさん [2008/03/04(火) 09:34:44 ]
webbrowserコントロールで navigateを同期的に行う方法ってないですかね?

webbrowser.Navigate(url); してDocumentCompletedイベントでDocument拾うと、
コードが分離されてわかりにくいし、遷移先のページごとにあれこれ処理変えたい
場合、複数のイベントハンドラメソッドを定義して イベントにアタッチ、デタッチを
繰り返さないといけないので、ロジックがスパゲッティになっちまうんですが…。

webbrowser.Navigate(url)
while(webbrowser.IsBusy)
{
}
でループ回しても、Documentが読み込まれていないタイミングのこともあるんで
いまいち信用ならないんですが、IsBusyプロパティ以外になんか判定タイミング
ってあるんでしょうか?

247 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:01:56 ]
.NETの機能を色々試してみようと思い、身近そうなFileやDirectory関係を使ってみていて疑問に思ったことがあります

foreach (string file in Directory.GetFiles(dir))
{
 try
 {
  File.Copy(file, destpath, true);
 }
 catch
 {
  continue;
 }
}

以上のように、複数ファイルをforループで回してコピーや削除を行っています
そこで、エラーは表示しなくていいのでコピーや削除でエラーが出たら飛ばしたいなと思い
コピーまたは削除処理にをtryで囲み、catchしてcontinueするという風にしています。

まず、コピーや削除が失敗することがあるのか(File.Copy、File.Delete等)
次に、私が上記で示したようにtryで処理を囲みcatchでcontinueするような処理が一般的なのかどうか
次に、出した例ではstringで処理していますがFileInfoなどを利用してみてもいます。
FileInfoを使うことで、他の質問にある答えが変わる場合それも教えて頂きたいです。
最後に、trycatchで処理部分を囲んでいるとして、それをループしています(そこがおそらく一番時間かかる主要処理)
その際、処理速度の低下などは気にするほどあるのでしょうか?

以上です、よろしくお願いします

248 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:22:16 ]
>>246
>遷移先のページごとにあれこれ処理変えたい場合、
>複数のイベントハンドラメソッドを定義して イベントにアタッチ、デタッチを
>繰り返さないといけない

が理解できないが
イベントハンドラ内で分岐すりゃいいだけじゃね?
IsBusyループはあほかって感じ


>>247
>まず、コピーや削除が失敗することがあるのか
当たり前だが、ある。

>tryで処理を囲みcatchでcontinueするような処理が一般的なのか
エラー処理でどんな処理をしたいかによる
一般にcatchで握りつぶすのはよくないが、ファイル操作のときは
仕方ないときもある

>FileInfoを使うことで...
同じ。Fileの静的メソッドは内部でFileInfo使ってる

>trycatchの処理速度の低下
tryはコスト高くない。catchが発生した場合は高コスト
ディスクIOの方が重いだろうけど

249 名前:デフォルトの名無しさん [2008/03/04(火) 10:24:58 ]
>>247

> まず、コピーや削除が失敗することがあるのか(File.Copy、File.Delete等)
ありますね。destpathが無効だったり、アクセス許可が無かったり、ファイルがロックされていたり
destpathが既に存在したりしていれば失敗します。

> 次に、私が上記で示したようにtryで処理を囲みcatchでcontinueするような処理が一般的なのかどうか
この例でcontinueがいるとは思えないですが…。。。

> 次に、出した例ではstringで処理していますがFileInfoなどを利用してみてもいます。
> FileInfoを使うことで、他の質問にある答えが変わる場合それも教えて頂きたいです。

同じだと思います。

> 最後に、trycatchで処理部分を囲んでいるとして、それをループしています(そこがおそらく一番時間かかる主要処理)
> その際、処理速度の低下などは気にするほどあるのでしょうか?

try-catchでも例外が起きない限り、ほとんどコストはかからないと思います。
逆にコストが問題になるほどしょっちゅう例外が起きるなら、ロジックを見直すべきだと
思います。

ファイルがらみの例外は種々雑多なので例外処理のコストを嫌ってすべて条件判定
で処理しようとしても、労多く益は少ないと思いますが。

250 名前:デフォルトの名無しさん [2008/03/04(火) 10:35:19 ]
>>248

二つや三つの場合分けならいいんですが、たとえば
Aページでフォームに自動記入してBページに飛んで、そこでなんか情報取って
さらにCページへ飛んで、サーバ側やクライアントスクリプト、activeXコンポーネント等で自動
ジャンプさせたのを判定して…Dページでまたフォームを記入して………
などと一連の動作を自動化することを考えると、条件分岐が異常に深くなってしまって、
それはそれでものすごく読みにくいんですわ。

素直にwebclientで同期的にダウンロードしてHTML独自に解析しろって言われそうですが、
ページでスクリプトやらactiveXコンポーネント使っているとお手上げなもんで、どうしても
DOM操作して人間の動作をエミュレートしたいときがあるもんで…。



251 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 11:14:03 ]
>>250
よくわからんけど、

abstract class Base {
public abstract void やること();
}
class 処理A : Base{
public override void やること() {
.....
}
}
class 処理B : Base{
public override void やること() {
.....
}
}

みたいにそれぞれの処理用のクラスを定義して、
Navigateする前に該当する処理クラスのオブジェクトを作って、

private Base 今の処理

みたいに保持しておいて
DocumentCompletedで

今の処理.やること()

みたいにすればすっきりするんじゃね?

252 名前:247 mailto:sage [2008/03/04(火) 11:15:49 ]
>>248
>>249
ありがとうございます。
trycatchはコストが低いということが聞けて安心しました
もし、以下の処理だけならcatch{}だけでよかったですね、反省
foreach (string file in Directory.GetFiles(dir))
{
 try
 {
  File.Copy(file, destpath, true);
 }
 catch
 {
  continue;
 }
}

253 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 11:16:16 ]
明示的にcatch{}ってしなくていんじゃないの、その例なら

254 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 11:26:18 ]
catch{}はしなきゃだめだっての
continueはいらんっちゃいらんけど

255 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 11:28:46 ]
まあcontinueって書いてても悪くないと思うけどな

256 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 11:36:53 ]
MSDNに書いてある例外くらいは事前にチェックして発生させないようにしとくべきだろ
キャッチはどっちみち必要だけど

257 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 11:48:31 ]
ある程度の事前チェックは必要だと思うけど、どうせ中でチェックして起きた例外をcatchするんだから、
事前に全部チェックしてたら二重になって遅くなりそうだし面倒くさいから俺はやらねえ。

258 名前:デフォルトの名無しさん [2008/03/04(火) 14:39:24 ]
>>255

ここではたまたまcontinueがループの最後にきてるから良いけど
continueは後無視してループの頭に戻っちゃうから、場合によっちゃまずくないですか?

259 名前:デフォルトの名無しさん [2008/03/04(火) 14:39:47 ]
先物チャートと検証ソフトを作りたいのですが、
C#のフォームとグラフィックを扱った書籍を教えていただけないでしょうか?
MDIでの開発の仕方が載っているものがあると助かります。

以前はDelphiを数年バリバリに使っておりましたので、
プログラミング初心者というわけではありません。

260 名前:デフォルトの名無しさん [2008/03/04(火) 14:40:14 ]
> C#のフォームとグラフィックを扱った書籍を教えていただけないでしょうか?
C#のフォームとグラフィックを扱った書籍のお勧めを教えていただけないでしょうか?



261 名前:デフォルトの名無しさん [2008/03/04(火) 14:43:07 ]
>>251

えっと 出していただいた例を今ひとつ理解し切れていない自分ですが、

たとえば、wb_documentcompletedでdocumentを取得して
その中のformをinvokemenber("submit")したりすると、次にやるべき処理の
クラス(baseの子クラス)を設定する場面が無いと思うんですが…。

wb.Navigateを呼び出したルーチンには戻らないでそのまま再びdocumentcompletedに
とんでっちゃうわけで…。

262 名前:102 mailto:sage [2008/03/04(火) 18:54:07 ]
>>244
すみません、後学のために教えていただけますでしょうか、フィールドハンドルって何ですか?
知らない知識がまだまだあるみたいです……

263 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 18:56:19 ]
>>258
なんでそういう解釈されたか意味不明

264 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 18:59:05 ]
>>263
ちゃんとレス辿ってないだけでしょ、彼が

265 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 21:30:42 ]
すみません、プログラミング自体の経験は過去にDelphiを少し触って挫折したような者です。
しかし、ひとつ作ってみたいプログラムのアイディアが浮かんだので、
これからC#で作ろうかと思っているのですが、なかなか指針すら立ちません。
どのような設計をすればよいのかアドバイスをお願いいたします。

何を作るのかというと、睡眠日誌というものがあるのですが・・・↓
ttp://www.kaimin.info/part/pdf/nisshi.pdf
これを実現するようなアプリを作りたいのです。どうすればよいでしょうか?

266 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 21:42:03 ]
睡眠障害のある俺にぴったりじゃないか。
作るかな。
ネタ提供サンクス。

267 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 22:00:08 ]
>>265
まず書いて動かすこと
動かせる範囲のものを書くこと
はじめからちゃんとしたものを作ろうとしないで一部分だけでいいからちゃんと動かす
うまく行かなくなったら何度も書き直す
それがうまくやるコツ

268 名前:265 mailto:sage [2008/03/04(火) 22:02:27 ]
>>266
なんとありがたい!
あまり突っ込むとスレ違いになりますが、私自身過眠症で必要に迫られてのことで。ぜひともお願いいたします。
後学のため、よろしければどのような感じで作るかの指針をお教えいただけませんでしょうか?

269 名前:265 mailto:sage [2008/03/04(火) 22:06:56 ]
>>267
なるほど。一度イメージするUIを紙に書いて、
自分なりにどの部位からコード化していけそうか考えてみます。
アドバイスありがとうございます。

270 名前:デフォルトの名無しさん [2008/03/04(火) 22:37:48 ]
>>264

いや、逆にcontinue書かなきゃいけない理由が知りたいですけど



271 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 22:44:54 ]
>>270
むしろ後に何か書き加える場合にcontinueがないとぶっ壊れるだろ
形としてはここにcontinueがあるべきで、今必要ないからといって
削除しなきゃならないというものでもない

272 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 22:46:10 ]
public bool IsMarked(object obj)
{
// この部分
}

上記のコメント部のなかで、
引数のobjが宣言時に特定の属性をつけられたかどうかを判別する方法はありますか?
たとえば
[Marked()]object a;

void Test()
{
if(IsMarked(a))
{
Console.WriteLine("True");
}
}

みたいなことができれば満足です。
詳しい方がたくさんおられるようなので、宜しくお願い致します。

273 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 22:47:45 ]
過眠症なんて病気があるんだw
なんか最近の医者って新しい病気作るのに必死だよな。

274 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 22:48:30 ]
>>272
それは属性の使い方が間違ってる

275 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 22:59:11 ]
属性はインスタンスには付かないぜ

276 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 23:11:27 ]
>>274
>>275
ありがとうございます。
納得しました。

277 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 00:28:15 ]
>>271
> むしろ後に何か書き加える場合にcontinueがないとぶっ壊れるだろ
追加実装の場合は、単なるコーディングミスだろ・・・

> 形としてはここにcontinueがあるべきで
ないべき。
使用しない、意味の無いコードは書いてあっても利益にならない。
なんで使わない変数とかが警告出るか考えろよ。

278 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 00:29:56 ]
じゃあifの中が一行しかないのに{}でくくってあったら消すのか?

279 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 00:35:35 ]
>>278
ちゃんとレス読んでから書け、読んでてそれなら半年ROMれ。
>>247だとfor文の最終行にcontinueつけてんのと同じ事。

280 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 00:44:46 ]
>>279
同じことだろうが
実行結果に関わらない、単に無駄なだけのコードだ
それに意味があると考えるか考えないかはお前の主観でしかない
ifを{}にいれておくのが望ましいといわれるのは、そこに何か追加することがあるからだ
あのコードは下に追加される可能性が大いにある
その意味ではあのcontinueには意味がある
elseがいらなくてもelseと書いた方が分かりやすいこともある
ケースバイケースだ

それはそれとしてC#ではfor文の最後にcontinueを書かなきゃならなくなることもよくあるぞ



281 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 00:47:14 ]
>それはそれとしてC#ではfor文の最後にcontinueを書かなきゃならなくなることもよくあるぞ
いいえ

282 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 00:48:41 ]
静的コンストラクタが呼ばれるのは

>最初のインスタンスが作成される前、または静的メンバが参照される前

と書いてありますが、複数スレッドから同時にアクセスした場合でも正常に動作するのでしょうか?

283 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 00:49:32 ]
gotoのラベルがfor文の最後に来る場合、ラベルの下にcontinueを書く必要がある
なんでそうなってるのかといえばラベルがforの最後にあるより、その下にcontinueがあったほうが
意味がはっきりするからだろう

284 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 00:52:24 ]
>>280
bool flg = false;
if (flg) {
} else {
 ・・・
}
こんなコード書いちゃう人?

285 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 00:54:13 ]
>>284
それはわかりにくいだろう
if(flg == false)
と俺は書くな

286 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 01:11:51 ]
俺なら
if ( ! flg ) {
//・・・
}
って書くぜ。
っていうかたまに flg == false とか flg == true って書き方みるけど変じゃね?

287 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 01:18:00 ]
if(flg == false)は
普通に左から読んでいけば
もしフラグがfalseならば、
と読める
!flgは頭の中で変換しなきゃならない
flgがよっぽど何のことか分からない名前でなければ==trueとも書かないな
しかし変数名がflgだったら==trueと書くかもしれない

288 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 01:32:30 ]
!flg程度で頭動かさなきゃならんのは駄目だろ

289 名前:デフォルトの名無しさん [2008/03/05(水) 02:21:11 ]
>>271

ちょっとだんだん意味わかんなくなってきたんですけど、
もしかしてcontinueの意味取り違えてません?

あとに何か書き加えたときにcontinueあったら、「後に書き加えた何か」
無視して、次の反復処理に制御を移動されちゃうと思うんですが…。

break→以下無視して反復処理抜ける
continue→以下無視して 次の反復処理へ移動

だと思ってましたが、違いましたっけ?

290 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 02:30:41 ]
>>289
何を言っているのか分からないが
後に書き加えた何かは、例外で失敗した後には実行されないものだ
そしてそれはtryブロックの後ろに配置されるべきものだ
全部をtryで囲んで全てをキャッチするというのは悪いコーディングだ



291 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 02:32:26 ]
>>289
もう相手すんな

292 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 02:48:52 ]
>>283
}の直前など、対応するコードの無い部分にラベル付けられないからだろ
どうしてもラベル付けたいなら、普通は空ステートメントを書く

>>284-288
if(flg == true)と書くやつは、何故if((flg == true) == true)あるいは
if((((flg == true) == true) == true) == true)と書かないのか
という指摘を見たことがあるな

293 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 03:00:03 ]
>>292
空ステートメントなんていう異様なものを書くよりは、continueの方がずっと分かりやすいだろう
ちなみにCにはこんな制限はない。C#にわざわざ加えられたものだ。
おそらくcontinueと書かせるためだろう

>f(flg == true)と書くやつは、何故if((flg == true) == true)あるいは
>if((((flg == true) == true) == true) == true)と書かないのか

意味が伝わりにくくなるからだな
プログラムにとって大事なのは意味が伝わりやすいことであり
文の量が最小になることではない

294 名前:デフォルトの名無しさん [2008/03/05(水) 03:01:10 ]
>>290

例外で失敗した後には実行されないものはtryブロックの中に入れるべきで

>全部をtryで囲んで全てをキャッチするというのは悪いコーディングだ
とは全然無関係ですよ。

295 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 03:02:52 ]
flgっつう名前が悪いだろ

bool isHogehoge
なら

if( isHogehoge )

と書いても違和感はない

296 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 03:09:48 ]
>>294
それでは例外で失敗しなかった後に実行された文で起こった例外まで無差別にキャッチする
それはバグを握りつぶしてしまう
よくないコーディングだ

297 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 03:35:54 ]
continue より flg の話が気になるな
まず flg という名前が論外で、if ... の ... に配置して意味が通るような名前を付けて、flg==true だの flg==false だのは今すぐ止めるべきと思うな
それが「プログラムにとって大事なのは意味が伝わりやすいこと」になるんだと思うよ。

298 名前:293 mailto:sage [2008/03/05(水) 03:39:42 ]
>>297
全く同感だ

299 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 03:40:54 ]
>プログラムにとって大事なのは意味が伝わりやすいことであり
>文の量が最小になることではない
まったくもって同感だが、ロジックの複雑さは最小にすべきだ。

300 名前:292 mailto:sage [2008/03/05(水) 04:36:35 ]
>>293
continueを書くかどうかは好みの問題だから議論する気はないが、
「continueと書かせるため」というのは誤解を招くので

ラベルの後にステートメントが必須なのはC++からで、
一応、仕様ではlabeled statementということになっている
単にラベル単独では存在し得ないというだけのこと



301 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 04:40:14 ]
>>283
ラベルは命令文の前に書く必要がある。命令文は空文でも良い。
for ( .. ) {
 ....
 label_1: ;
}
でOK。

302 名前:デフォルトの名無しさん [2008/03/05(水) 06:47:59 ]
DataGridViewでのコンテキストメニューの抑制ができなくて困っています。
自作のコンテキストメニューではなく、標準というかShell(?)のコンテキストメニューです。

DataGridViewTextBoxColumn、DataGridViewTextBoxCellでセル選択後に
カーソルがあたった状態で編集可能になったときに
右クリックすると、このコンテキストメニューが出るのを抑えたいのです。

通常のTextBoxでは
TextBoxのContextMenuStripに、空のContextMenuStripを設定するなり
新しいContextMenuStripのインスタンスを(newする)設定するなりすれば
抑制できるとことまでは判明して、実行できているのですが
DataGridViewの場合に、同様の制御をするための実装方法がわからないのです。

ご存知の方、お教えください。

303 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 06:48:34 ]
ifでの条件文の書き方についてのノウハウはCとC#で違うから混同すると議論が噛み合わない。
C++には論理型があるがCとの互換のために穴だらけだから結局Cと同じになる。
一方C#のifには条件文しかかけないし、論理型は単独で条件文たりえる。


304 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 07:05:06 ]
>>302
EditingControlShowing とか

305 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 07:49:18 ]
文字列をデータとしてファイルに保存してあとで読み込みたいと思っています。
文字列の構成は、9つの行と、行数不定の項目です。
その構成を一つのかたまりとしてたくさん扱いたいのですが、どうしたらいいんでしょうか?

306 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 08:23:00 ]
C#というのはどういった場面で使われるんでしょうか?Windows環境で動くソフトウェア全般だとは思うのですが
実際本職の方達はC/C++ベースで作ってそうですし

いまいちピンとこないです

307 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 08:31:32 ]
>>305
CSVでもXmlSerializeでもいいんじゃないかと。
>>306
ASP.NETとか?

308 名前:デフォルトの名無しさん [2008/03/05(水) 08:49:49 ]
>>297

flgの話は 命名法の問題は同意 その先 ==trueとするかどうかは趣味の問題。


>>296
continue書かないなら正解。
continueなんてせっかくの例外処理の構造化をわざわざ壊すようなもんをどうしても
書きたいなら不正解だろ。

309 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 09:40:47 ]
>>262
RuntimeFieldHandle
フィールドを一意に識別出来るハンドル。
識別という意味では、FieldInfoに1対1で対応している。
RuntimeFieldHandleとFieldInfoは相互に取り出すことが出来る。

FieldInfoなどのオブジェクトはサイズが大きいため、
常に使い続ける必要がないものはRuntimeFieldHandleで保持しておき、
実際に必要になった時点でRuntimeFieldHandleからFieldInfoを取得する。
こうするとFieldInfoがGC対象となり、頻繁に使われないものはメモリを占有しなくなる。


310 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:25:56 ]
>>306
いやいや、中小企業で使ってる業務システムには、VisualBasicが多いよ
Cで組んだシステムの方が珍しい。
大企業みたく開発費をかけたくないし、開発期間も短くしたいし、保守性を容易にしたいし、
負荷も少ないしリアルタイム性も求められない用途は多いから。
C#はVisualBasicよりいいし、そういう方面にも使われる




311 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:34:38 ]
>>307
>>310
なるほど…
来年度から就職でして、使うのかなぁといった感じで質問しました。
C/C++をやりつつC#に手出してて最近はWinAPI関連の本買って手出し始めたので
ちょっと気になりました、ありがとう



312 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:35:48 ]
どんな分野?それによるからなぁ、逆に低級言語ばっか使うとこもあるし

313 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:38:04 ]
>>312
そこら辺が明確に教えてもらえてなくって(使う言語とか)
一応エンジニア業と営業のそれを両方出来る人材を…って感じで募集されてて
会社自体は自動車会社のシステム部門です

314 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:39:17 ]
お前らそういう話大好きだな

315 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:53:19 ]
>>313
だったら、営業の顧客管理表をC#でちゃちゃっと作ったり
(たいてい、個人が自分の机のPCでエクセルでちまちまやってるから、
活用するときに面倒だったり、顧客表の流出する可能性があったり、
各営業間で共有が出来てなかったり等々。システムを作れば、
顧客の誕生日一週間前にポップアップさせてみたり、
車検前や12ヶ月点検前にポップアップさせてみたり、いろんな活用も出来る)。
また、営業所とエンジニア部門とをLANで結んだ連絡システムを作ったりにも使えるだろ。
stand-aloneなシステムを手早く作るのにも、
離れた部門をLAN経由で結んだシステムにも、C#は向いているし。

316 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 11:02:40 ]
文字列に指定の引用符を付けたり(Quote)、外したりする(Dequote)メソッドはないでしょうか?


317 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 11:11:46 ]
>>316
ごめ質問が理解できないので具体例をあげて

>>313
続けたいならあとはマ板でたのむ


318 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 11:24:17 ]
>>316です。
ええと。例えば、文字列ABCにダブルクォート"の引用符を付けると、
"ABC"、文字列DE"Fに付けると、"をエスケープ?して、"DE""F"にする
ようなメソッドです。Dequoteはその逆の操作です。



319 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 11:25:02 ]
class = new class();
このclassに後から変数を追加するなんて暴挙はできないでしょうか?。

320 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 11:33:26 ]
>>318
それくらい自分で作れば

>>319
無理
classのオブジェクトをキーにしたDictionary使うとか



321 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 11:57:01 ]
初めまして。
C# 2008 Expressを使ってます。
OpenFileDialogで、画像を選択した際にdialogのウィンドーにプレビュー画像を表示したいのですが、
いったいどうすればいいのでしょうか。

322 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 12:00:53 ]
>>304
ありがと。
それでなんとかなりそうです。

323 名前:デフォルトの名無しさん [2008/03/05(水) 12:03:02 ]
ボタンにUACのシールドアイコンを付加しようとしているのですが、
VS2005なので SystemIcons.Shieldが利用できません。

なので、APIから行おうとしたのですが、

internal class WinAPI
{
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
extern public static IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wp, IntPtr lp);
}

WinAPI.SendMessage(Target.Handle, (UInt32)0x160c, IntPtr.Zero, (IntPtr)1);

としてもシールドアイコンが表示されません。
何か間違ってるのでしょうか?

324 名前:321 mailto:sage [2008/03/05(水) 12:05:32 ]
追加でごめんなさい。
↑の件ですが、「縮小版」ではなく、クリックしたときにパッと表示してほしいんです。

あと、openFileDialogには大きさのプロパティがありませんが、
実行時にはマウスでドラッグして大きさが変えられますよね。
プログラム上で自動で変更できるんでしょうか。

325 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:10:17 ]
>>307
ありがとうございます。
XmlSerializeでなんとか出来そうです。

326 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:29:52 ]
>>321>>324
つまり、OpenFileDialogを拡張したいということだろ
結論から言うと、Win32API使わないと無理
cf. ttp://msdn2.microsoft.com/en-us/library/ms996463.aspx

327 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:34:58 ]
試しに>>174をDynamicMethodでif…else if…相当のコードを生成して
毎回リフレクションを使わないようにしてみたら10倍くらい速くなった
もっと速くなると思ったんだけどなあ

328 名前:321 mailto:sage [2008/03/05(水) 13:43:14 ]
>>326
ありがとうございます。
敷居が高そうですね・・。もう少し慣れてから挑戦してみます。

329 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 14:59:10 ]
>>327
if else は、フィールドの数が増えると遅くなるんじゃねえの、使うならswitchだろ。

330 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 15:19:44 ]
どっちもJITコンパイルされれば同じだと思うのだが



331 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 15:45:36 ]
switchは遅くならないのかよっ

332 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 15:50:58 ]
>>331
若干最適化は効きやすいとされる。


333 名前:デフォルトの名無しさん [2008/03/05(水) 16:13:40 ]
>>330-332
おまいら今すぐC言語のスレで、コンピュータの基礎を勉強しやがれ

334 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:27:33 ]
この場合アセンブラだろ
お前も基礎を勉強しやがれ

335 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:29:17 ]
>>334
違うだろ、テーブルルックアップ式 goto label の勉強だ

336 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:29:20 ]
>>327
FieldIndexerAttributeにAttributeUsage(Attribute)付けるといいかもと思った
あと、>>139の言ってるのは多分FieldInfo.FieldHandle/GetFieldFromHandleの事

>>329-332
以下、MSIL生成する言語に限った話しなのでそのように
疑問があれば逆アセンブル(ildasm.exe)してみればいい

判定するのが連続した整数値じゃないときはswitchもif〜elseも大差ない
比較部分は同じで処理部分がサブルーチンかスパゲッティかって感じ

連続した整数値があれば(一部でも可)switchではその部分がまとめられる
MSILから先は分からないが、多分ジャンプ先を数値的に計算してるんだと思う

337 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:34:21 ]
switchを逆アセンブルしてみると、if,elseとgo,labelの組み合わせだよ

338 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:39:46 ]
値が連続したところは>>336の言うように纏められるよ
あれ手でやるのは面倒

339 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:49:22 ]
class A
{
// ildasm.exe
static void Main( string [] arg )
{
System.Console.WriteLine( arg[0] ) ;
switch( (int)arg[0][0] )
{
case 0 : System.Console.WriteLine( 'A' ) ; break ;
case 1 : System.Console.WriteLine( 'B' ) ; break ;
case 2 : System.Console.WriteLine( 'C' ) ; break ;
}
}
}

340 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:50:36 ]
.method private hidebysig static void Main(string[] arg) cil managed
{
.entrypoint
// コード サイズ 66 (0x42)
.maxstack 3
.locals init (int32 V_0)
IL_0000: ldarg.0
IL_0001: ldc.i4.0
IL_0002: ldelem.ref
IL_0003: call void [mscorlib]System.Console::WriteLine(string)
IL_0008: ldarg.0
IL_0009: ldc.i4.0
IL_000a: ldelem.ref
IL_000b: ldc.i4.0
IL_000c: callvirt instance char [mscorlib]System.String::get_Chars(int32)
IL_0011: stloc.0
IL_0012: ldloc.0
IL_0013: switch (
IL_0026,
IL_002f,
IL_0038)
IL_0024: br.s IL_0041




341 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:51:27 ]
IL_0024: br.s IL_0041
IL_0026: ldc.i4.s 65
IL_0028: call void [mscorlib]System.Console::WriteLine(char)
IL_002d: br.s IL_0041
IL_002f: ldc.i4.s 66
IL_0031: call void [mscorlib]System.Console::WriteLine(char)
IL_0036: br.s IL_0041
IL_0038: ldc.i4.s 67
IL_003a: call void [mscorlib]System.Console::WriteLine(char)
IL_003f: br.s IL_0041
IL_0041: ret
} // end of method A::Main
このスレは息を吸うようにウソをつく奴が居るので注意が必要だ

342 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:55:09 ]
まあ、間違いもあるだろうからそんなわざわざ相手逆なでするような言い方する必要はないと思うけど。

結局、IL レベルで switch 命令ありで、
JIT 時に if-else 式かテーブルルックアップ式かで最適な方選択ってこと?

343 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:57:31 ]
間違いっつーか、これプログラマなら常識だろ?

344 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:04:55 ]
自分の常識を人に押し付けるもんじゃないけど、
その常識ってのは、
MSIL が switch 命令を持ってるってのの方か、
一般に switch はルックアップテーブル使って高速化可能って話の方か、どっち?

345 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:07:01 ]
そんな複雑な事は聞かないし、普通に学校で教えてもらえるだろ、switchの使い方。

346 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:15:14 ]
CILのswitch命令はJavaバイトコードでいうところのtableswitch命令相当かな。
Javaバイトコードにはもう1つlookupswitchって命令もあって、CILにはこれに相当するものがない。
これがないせいでgotoだらけのコードができることもあるかもね。

あと、C#のswitch caseには文字列を突っ込むこともできて、このときはもはやswitch命令は関係なくなる。
MSのC#コンパイラは、分岐数増えてきたらDictionary<string,int>を裏で作るって実装になってたかと。


347 名前:346 mailto:sage [2008/03/05(水) 17:21:07 ]
>このときはもはやswitch命令は関係なくなる。
すまん、これは言い過ぎか。

Dictionary<string,int>を使って無理矢理switch命令用のインデックスを作り出す。
が正しい。


348 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:26:34 ]
今、色々 IL Disasm して遊んでみてるけど、switch のコンパイル結果、そんな単純でもなさそう。

case が 0 で始まる連続な整数 → IL switch 命令
非 0 から始まっての連続 → sub してから switch 命令
完全に不連続 → beq とか brtrue の連続(= if-else と変わらない)

だった。

349 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:29:51 ]
あと、例えば、
switch(x) {
 case 0: xxx; break;
 case 4: xxx; break;
 case 6: xxx; break;
 case 9: xxx; break;
}
みたいなのは、0 のところだけ beq、
それから 4引いてから switch 命令、
その後さらに switch 後の default 句内で case 9 の判定するような妙なコードに。

ラベルが不連続でも、値の近い整数ならある程度最適化かけてるっぽい。

350 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:30:38 ]
コンパイラの出力にあわせてチューンはすべきじゃないよ
高速化したいなら、コンパイラにキチンと意図の伝わる形でコードすべき
前から準にシーケンシャルに比較をする事を伝えたいなら if else if で
一括比較したいなら switch で、将来のJITのチューンにあやかれるようにね。



351 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:33:02 ]
Cのswitchの実装は処理系依存だろ。常識って何だよ。

352 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:34:24 ]
>>351
常識っていうのは、プログラマ間で意思疎通をするのに最低限必要な知識だよ

353 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:37:29 ]
>>349
まあswitch命令がそういう仕様なんだから仕方ないよなぁ。

ここの議論とか参考になるかも。
ttp://www.atdot.net/~ko1/w3ml/w3ml.cgi/yarv-dev/msg/444
ttp://www.atdot.net/~ko1/w3ml/w3ml.cgi/yarv-dev/msg/452

354 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:38:13 ]
>常識っていうのは、プログラマ間で意思疎通をするのに最低限必要な知識
これはどこに書いてありますか?

355 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:39:29 ]
>>350
それは同意。

まあ、ただ、単なる興味本位で、IL の switch 命令に関して。
Java の tableswitch, lookupswitch とはどっちとも違うかも。
単に、スタックの先頭を見て、その値をインデックスにしてジャンプするだけっぽい。
ldloc.1
switch (0x10, 0x20, 0x30)
なら、ローカル変数1の値が 0 なら 0x10 に、1 なら 0x20 にジャンプってだけ。

switch をブランチの羅列にするか、引き算/テーブル参照+switch 命令にするかは
結局コンパイラ次第ね。

356 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 18:19:16 ]
こういう議論て、ふらっとスレで行われることが多いのはなんで?

357 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 18:49:10 ]
前からずっみみてきたが、誰か約一名、ウソを本当のように自信たっぷり書くアンポンタンが居ついているんだよ
コイツ以前マ板にもマルチレスで同僚がswitch文を使って if をごまかしたとか書きまくっていた奴じゃねぇかな
こういうキチガイはいっぺん地獄へ落ちればいいんだよ

358 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 18:54:31 ]
>>356
一旦的外れな方向に話が行った方が議論が盛り上がるからとか?

>>357
そういう発言はキチガイをよりいっそう近づけるから、
キチガイがいやなら逆に抑えた方がいいよ。

359 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 20:11:27 ]
paintイベントを発生させるにはRefresh()だったりを使ってイベントを発生させるけど、
任意のイベントを発生させるにはどうすればいいんでしょうか?

たとえば、textbox1でKeyPressが発生した時に、そのキーがエンターキーだった場合、
button1.Clickを発生させるときなどです。

360 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 20:19:00 ]
>>359
button1.Click(button1,new MouseEventArgs());

こんな感じか?



361 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 20:23:20 ]
クリックをエミュレートするのはPerformClickだな

362 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 20:57:58 ]
>>360
上手く動かなかったのでbutton_Clickメソッドを直接呼び出してみました。
button_Click(button1,new MouseEventArgs());
一応意図したとおりに動きましたが他のクラスからだと呼び出せないと思うので常套手段ではなさそうですね…。

363 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:36:37 ]
>>359
イベントは特定条件がそろった時に内部から発生するものだから、
その条件を無理やりそろえるためのメソッドがないものは基本的に無理

通常はイベントを発生させなくても、イベントハンドラで実行される処理と
同じ処理が実行されれば十分なはず
その例だとPerformClickでもいい

364 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:59:49 ]
>>363
なるほどそうですか。
同じ処理をしたいだけなので、例のbutton_Clickの処理内容を別のメソッドにして、
そのメソッドを呼び出すのが自然みたいですね。

365 名前:デフォルトの名無しさん [2008/03/05(水) 21:59:53 ]
TableRow,TableCellで動的にボタンをいくつか作成して

***** 何回かループ *****
Button objButton = new Button();
objButton.ID = "Btn" + i.ToString();
objButton.Width = 50;
objButton.Click += new EventHandler(Button_Click);
objTableCell.Controls.Add(objButton);
***** 何回かループ *****

縦にボタンがループの回数分並んだとして、適当に真ん中辺りのボタンを押した時、
そのボタンのIDって取得出来るの???
ちなみに"Btn" + i.ToString();で順番にボタンのIDをつけてるんだけど

private void Button_Click(object sender, EventArgs e)
{
string 押されたボタンのID = どのようなコード??
}

366 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:03:22 ]
ヒント: sender

367 名前:デフォルトの名無しさん [2008/03/05(水) 22:09:34 ]
senderをなにかのパラメーターとして渡すのでしょうか??
それともsender.Get…という形で使うのでしょうか?^^;

368 名前:デフォルトの名無しさん [2008/03/05(水) 22:15:32 ]
とりあえずsender.ToString();でなにが取れるか見てみたら
"System.Web.UI.WebControls.Button"としか取れず、色々してみても
特定のIDを取ってくることが出来ませんでした。。

369 名前:デフォルトの名無しさん [2008/03/05(水) 22:21:49 ]
わかりました!ありがとうございます!

370 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:23:51 ]
>>368
それはつまりsenderがButtonにキャストできるということ。



371 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:27:07 ]
IDとButtonの関係がさっぱり見えない

372 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:20:43 ]
>>368
的外れな話かもですが、
そのコントロールの定義?のところに書いてある、senderなんちゃらを使ってみるというのは?


質問です。
画面AからダイアログBを呼び表示させました。


ダイアログBのロードメソッドで条件を判定した結果によって、
ダイアログBを閉じたということにしたいのですが、うまくいきません。

ロード処理の中で、ダイアログのクロージングの処理を呼んだのですが、
処理が画面Aの呼び出し元に戻らず、ダイアログが表示されたままになってしまいます。

クロージングの中で使う、CancelEventArgsで何かパラメーターを渡せばよいのでしょうか?

すいません。お願いします。

373 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:47:22 ]
ヘルプ! IDEをダウンロードしたいのですがセットアップ中のダウンロードが
進まないのは私だけ?

ttp://www.microsoft.com/japan/msdn/vstudio/express/


374 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 00:10:24 ]
>>372
クロージングの処理とやらは何?
イベントメソッドを呼んでるのか?
それは「閉じようとしてるときに呼ばれるイベントメソッド」であって
「閉じるために」呼ぶもんじゃないが。

>>373
これまじお勧め。
全部入り。
www.microsoft.com/japan/msdn/vstudio/express/maninstall/2008/default.aspx


375 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 01:08:13 ]
ListViewのColumnHeaderコレクションエディタでColumnを追加した後、
メンバの順序を↑↓で変更しても反映されないのはバグ??


376 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 01:49:03 ]
逆引き本を探しているんですが、オススメないでしょうか。
どれも似たり寄ったりでしょうか?
ペイントブラシのようなものに挑戦しているので、グラフィック関係が書かれていると助かります。

377 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 02:13:57 ]
>>374
いつのまにか全部入りのExpress Edition出てたのか
単品よりいいね

378 名前:323 [2008/03/06(木) 09:45:15 ]
自己解決しました。
ボタンのFlatStyleをSystemにしたら適用されるようになりました。

379 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:37:43 ]
C#使うなって言われそうだけど、
C#でWin32ネイティブアプリ作れます?

380 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:57:57 ]
そもそもコンパイラがネイティブコードを吐けないはず。
VC#以外のコンパイラはしらね。



381 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:45:30 ]
だれか>>375を試してみてください。
ListViewのViewプロパティをDetailsにして、Columnsのコレクションをいくつか追加して、
コレクションエディタの↑↓で位置を変えても反映されません。
(DisplayIndexが変更されない?)


382 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 19:08:52 ]
>>381
DisplayIndexってわかってるなら自分で直せばいいじゃん。
位置を変えたときに変わらないのは仕様なのかもしれないし。

383 名前:382 mailto:sage [2008/03/06(木) 19:20:46 ]
うん。やっばり仕様だと思う。
コレクションエディタの順番は単にListViewItem.SubItemsの順番で、
DisplayIndexが表示の順番なんだと思う。
で、それらは必ずしも一致せず、
ListViewItemを作る部分のコードは変えずに表示の順番を変えることも出来るようになってると。

#実は俺も前に同じように順番が変わらず悩んだことがある。
そのときは.Designer.csにDisplayIndexの指定があるのを見つけて、
なんじゃこりゃと思いつつ手作業で削除した。

384 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:17:33 ]
MySqlで日本語をインサートしようとすると文字化けするのでSET NAMESでutfやsjisを
投げてみたのですが直らず。どうしたら良いのでしょうか?。

385 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:25:29 ]
>>384
自己レス、接続時にcharsetを投げたら上手く行きました。
他の言語ではnamesを投げて上手く行っていたのですがc#ではだめなのですね。

386 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:48:21 ]
そんなに投げちゃいかん

387 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 22:21:04 ]
>>383
そうなのね。ありがと。
でもコレクションエディタで順番変えてOK押した一瞬だけ順番が変わってすぐに戻るのがデザイナ上で見えるからバグっぽく見える…

388 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 22:37:24 ]
あるクラスを作って、そのインスタンスを複数作ったとき、
それぞれのインスタンスを区別するにはどうしたらいいのですか?
たとえばこんなクラスです。

public void 猫()
{
 string kainushi
 public 猫(string, ka)
 {
  this.kainushi = ka
 }
 public 好きな遊び{ get; set;}
}


389 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 22:41:45 ]
クラスってclassで定義するんじゃないの?

390 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:01:41 ]
区別してどうするの?



391 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:04:34 ]
区別しない方が難しいだろ。

392 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:05:36 ]
そんなこと自分で考える前に基本的な文法を勉強した方が

393 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:10:58 ]
猫[] cats = new 猫[5];

Console.WriteLine(cats[0] == cats[1]);
Console.WriteLine(cats[0] == cats[2]);
Console.WriteLine(cats[0] == cats[3]);
Console.WriteLine(cats[0] == cats[4]);
Console.WriteLine(cats[1] == cats[2]);
Console.WriteLine(cats[1] == cats[3]);
Console.WriteLine(cats[1] == cats[4]);
Console.WriteLine(cats[2] == cats[3]);
Console.WriteLine(cats[2] == cats[4]);
Console.WriteLine(cats[3] == cats[4]);

全部Falseだろ。つまり区別できてる。

394 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:16:16 ]
>>393
インスタンスの区別じゃないの??

395 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:17:20 ]
猫 → クラス
cats[0] → インスタンス
cats[1] → インスタンス
cats[2] → インスタンス
cats[3] → インスタンス
cats[4] → インスタンス

396 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:22:54 ]
>>393
そのまま動かしたら全部trueになっちゃうw

397 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:59:33 ]
>>395

398 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:02:36 ]
cats[0] → null
cats[1] → null
cats[2] → null
cats[3] → null
cats[4] → null

399 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:12:27 ]
cats[0]がインスタンスと聞いて

400 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:26:15 ]
ぬる猫がいると聞いて



401 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:31:44 ]
>>393
>>393
>>393

402 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:54:49 ]
何で配列にしようと思ったのやら

403 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:59:17 ]
classの規定の==はそれぞれのインスタンスを区別する
中身が全く同じでもインスタンスが違えば==はfalseになる

404 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:24:40 ]
>>387
5分くらいで適当に考えた対策だけど多分おk

全選択してDisplayIndexを 列数-1 で並び順になる (0だと逆順)

405 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:52:53 ]
>>404
何その裏技っぽいのwすごw
でもそれでいけるね!
0指定すると逆順になるけどコレクションエディタと同期してないから同じ事だけど。

406 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 02:25:26 ]
最近C#使ってみようと思ってるんですが、
C#3.0ってもうリリースしてるんでしょうか?

どうせなら3.0から勉強したいなと・・・^^;

407 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 02:26:47 ]
とっくの昔にリリースしとる

408 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 02:30:41 ]
>>407
そうでしたか・・・アホな質問してすいません(__)
Wikipediaは見たんですが、言語仕様しか書いてなくて^^;

JavaScriptっぽいらしいですね。JavaScriptは好きなんで楽しみです。
後、C#でP2Pしたいんですがお勧めのページあるでしょうか?

ActionScript3.0がSocketが扱えて同期通信できるようになるって言ってたんですが
当分先そうなんでFlex2からC#に浮気してみようかなと・・・^ω^;

409 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 02:32:33 ]
「C#」「P2P」「ページ」の関連性について。

410 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 02:36:08 ]
お勧めのページといったらタウンページかMSDNしかないだろう



411 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 02:39:20 ]
Wikipediaにも最新リリース: C# 3.0とはっきり書いてある。

412 名前:406 mailto:sage [2008/03/07(金) 02:40:14 ]
>>410
でwwwすwwwよwwwねwww

まぁ進捗Blogとか貼ってくれたら儲けもんぐらいに思ってただけなんで、
適当にググッてみますわwwww

413 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 02:41:43 ]
>>411
あー・・・右上の表見落としてた・・・
まじすまそ・・・あほすぎ。

414 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 04:08:06 ]
なんか覚えたての単語並べてみましたって感じ?

415 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:22:30 ]
c#からmysqlにinsert set name=val にする時にvalをエスケープしないといけないのですが
mysql側に専用のエスケープ関数などあるのでしょうか?。

416 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 12:55:07 ]
それはあれだ、C#のソースコード上の文字列をエスケープする関数を探すようなものだな
例えば、文字列リテラルで \" とエスケープせずに、 " と書いて関数でエスケープしたいと

417 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:25:23 ]
>>416
いじわる!!笑
@の他は正規表現でいちいち書き換えないとだめなのでしょうか?

418 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:03:44 ]
意地悪ではない。処理のレイヤーが違うから無理と暗にいってる

パーサが文字列リテラルを判別するためにエスケープが必要で
関数に渡されるのはパースされた文字列

当たり前すぎて確認してなかったけど、
valは文字列リテラルでエスケープというのは ' => '' とかのことだよな

419 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:04:50 ]
>>417
そんなことより株取引がんばってください

420 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:21:10 ]
>>418
言われて見て思ったのでちょっと試したのですがこういう事ですよね。
sqlでインサートできないから安易にエスケープと考えてしまったのですが問題は別にあると
認識し試行錯誤します。

string text = @"\a\a\a'''";
MessageBox.Show(text);

>>419
おうよ!。みずほが下がってる><



421 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 18:00:24 ]
2008を使ってますが、2002年に出たC#の本を買っても問題ないでしょうか?
『C#によるプログラミングWindows』上下Charles Petzold (著)が気になっています。

422 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 18:33:20 ]
せめてC#2.0(VC#2005)に対応したのにしとけ

423 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 18:47:21 ]
PictureBoxに画像+αを表示したいのでPictureBoxのPaintデリゲートに指定した関数の中で
描画処理を行わせるようにしたのですが、その際にPaintEventArgs.Graphicsを利用して描画すると意図通り動くのに対して
それを利用せずに関数内でPictureBox.CreateGraphics()により取得したGraphicsオブジェクトを利用して描画した場合には
他のウインドウの影に隠れた場合等に再描画が正常に行われないのですが何故なのでしょうか?

424 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 19:22:06 ]
お前さんが再描画してないんだから当然
てか、そのためのPaintイベントじゃないか

425 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 19:31:44 ]
>>424
どちらの場合も処理してる関数自体はPictureBox.Paintに登録しているのでクライアント領域が無効化された場合には
再描画のルーチンが実行されると思ったのですが違うのでしょうか?

426 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 20:10:49 ]
クリッピングというものがあってな

427 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 20:33:12 ]
ああ、そういうことか
こんな感じにして何度か再描画すると面白いものがみれるよ

void pictureBox1_Paint(object sender, PaintEventArgs e) {
e.Graphics.Clear(Color.White);
Thread.Sleep(1000);
e.Graphics.Clear(Color.Gray);
Thread.Sleep(1000);
this.pictureBox1.CreateGraphics().Clear(Color.Blue);
Thread.Sleep(1000);
}

428 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 20:33:44 ]
MySqlDataReader.read()って一番最後の行を読んだ時点でfalseになりません?

while(MySqlDataReader.read()){
List<string>.Add(val)//これだと一番最後の行が追加されない
}

429 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:51:04 ]
System.Web.WebProxyクラスに設定した、プロキシサーバーが生存中かを
楽に確認する方法ってないでしょうか。
プロキシサーバーにpingを打って、100ms以内に応答がなけれ
ば無効と判断するコードの、簡単な書きかたってないでしょうか?

430 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 23:27:15 ]
Pingクラスがあるよ



431 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 00:17:09 ]
>>428
サードパーティ製ライブラリについて質問するのに、ライブラリの名称もバージョンも書かないとか
どんだけ

432 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 00:52:32 ]
街の仲間たちにぬっ殺されろ


433 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:32:31 ]
>>428
read()の時点で1レコード呼ばれてるってオチだろ

434 名前:デフォルトの名無しさん [2008/03/08(土) 03:04:25 ]
C#初心者でございます。
C#もJAVAのように数学の関数などを
Math.Sin(); 
等とクラス名を書かなければいけないようですが
クラス名を省略することは可能なのでしょうか。


435 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 03:05:09 ]
using

436 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 03:26:02 ]
Java には static import が付いたけど
C# には似たようなものってあったっけ

437 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 03:27:34 ]
using

438 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 04:41:44 ]
ハッシュテーブルのことC#では何言うんだっけ?

439 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 04:44:48 ]
ハッシュテーブルだろ

440 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 04:49:07 ]
Hashtable
Dictionary



441 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 07:38:26 ]
おはようございます
string[] str = (string[]) List<string>をみたいに簡単に変換する方法はないでしょうか?

442 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 07:40:20 ]
ToList

443 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 07:41:05 ]
じゃなかったToArray

444 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 07:49:23 ]
>>443
こんな便利なものがあったのですね
ありがとうございます

445 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 10:37:58 ]
>>434
いきなりSin()とか書かれても面食らうだけだからやめてくれ

446 名前:デフォルトの名無しさん [2008/03/08(土) 10:58:30 ]
お答えいただき有難うございます。

usingだと省略できますか。
別名をつけられるのはできたのですが 
M.Sin()とかになってしまうのでこれでもまだすっきりしないというか。
できないならできないで仕方ありませんが。

>>445
そうですか?
数学をやるとき「数学の積分(R*数学のSIN(π + θ))」なんて
いちいち書くのは冗長ですよね・・・と思っていたのですが、
sin ,cosと来たら三角関数、というのはもはや非常識なのでしょうかね。


447 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 11:08:59 ]
>>446
確かに数値計算系のプログラムではいちいちMathつけると読みにくいというのには同意。
自クラスに
static double sin(double x) { return Math.Sin(x); }
なんて定義するのはダメ?
クラス毎に定義しなきゃいけないのが面倒だが。

448 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 11:41:55 ]
VBのモジュール感覚で濫用するアホが出てくるからだろ

449 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 11:46:26 ]
doubleの拡張メソッドにしたら

450 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 11:55:12 ]
でも確かにDelphiのwith相当のことをやりたいことはたまにあるな。



451 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 11:58:39 ]
>>450
VB使えよ

452 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 12:17:05 ]
ヘジは早くプリプロセッサを追加しろよ。

453 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 12:17:22 ]
with最凶

454 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 12:38:28 ]
>>446
現状で最もましな方法はpartialクラスで>>447だと思う
てか、モドキじゃないMix-inが使えればいいのにな

455 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 12:55:40 ]
ListViewの詳細をクリックするとアイテムが選択されますが、
プログラムから選択させることって出来ますか?
listView1.Items[0].Selected = true;
こんな感じにしてみたのですが選択はされていると思うのですが見た目上選択されたようにはなっていません。
見た目も選択されているようにするにはどうしたらいいんでしょうか?

456 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 13:16:41 ]
>>454
違うと思うよ。
もっとも「マシ」な方法は、"Mathがうっとうしい"などという感覚を矯正すること。

要するにただの慣れの問題でしょ。
まあ慣れすぎて自分のクラスの静的メソッドでもクラス名つけたくなってくるのも
それはそれで難儀だとは思うけど

457 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 13:25:23 ]
あとVBのWithってブロック内のインスタンスの表記を省略できるだけなんだよね。

458 名前:466 [2008/03/08(土) 13:40:33 ]

クラス名の省略はとりあえずできない、というのがわかって助かりました。
ありがとうございました。

459 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 14:07:05 ]
>>455
HideSelectionがTrueのままになってて、フォーカスが他にあるってオチじゃないよね?

460 名前:デフォルトの名無しさん [2008/03/08(土) 14:09:48 ]
>>455

listview.Focus()してもだめ?



461 名前:455 mailto:sage [2008/03/08(土) 14:15:32 ]
listView1.Select();
で解決しました。

462 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 14:17:31 ]
>>459
違うみたいです。
>>460
だめでした。。

463 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 16:47:12 ]
"続行するには何かキーを押してください . . ."ってどうやるの?

464 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 16:54:03 ]
>>463
pause

465 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:09:11 ]
Visualstudioでクラスの名前を変更する時、
ジェネリッククラスだとファイルとクラスの名前が連動しないのは仕様ですかね?

466 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:12:52 ]
ファイル名に<>使えない

467 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:13:04 ]
>>464
ごめん。質問の仕方が悪かった。
僕が言いたいのは以下のようなプログラムの場合、
using System;
namespace HelloWorld
{
  class Program
  {
    static void Main()
    {
      Console.WriteLine("Hello World");
    }
  }
}
実行すると一瞬コンソールが現れて消えてしまうんだけど「Visual Studio」とかで実行したら
"続行するには何かキーを押してください . . ."って出て終了しないよね?
それでそのようなことをするコマンドプロンプトのオプションがあるのかなあって調べたら無かったからどうやるのかなあってこと。

468 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:15:26 ]
>>467
Console.Write("続行するには何かキーを押してください . . .");
Console.ReadKey();

469 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:32:04 ]
>>468
レスどうもありがとう。
でもその方法は知っているんだ。
Visual Studioはいちいちそれを加えてからコンパイルして実行しているの?
違うよね。FileMonitorで監視してみたけど「Console.ReadKey();」が付加されている
exeファイルは見つけることが出来なかった。
僕は今C#用のエディタを作っているんだけどどうしても、
よく見る"続行するには何かキーを押してください . . ."が出来ない。

教えてください。よろしくお願いします。

470 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:33:43 ]
だから、pause
もしくは、コマンドプロンプトから実行すればいい



471 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:35:24 ]
そして、そのpauseコマンドはC#で作られているわけではない。

472 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:40:39 ]
インターフェイスの利用価値がわからないんだが、インターフェイスってよく使うもんなのか?

473 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:50:37 ]
多分知らないうちに一番お世話になってるのはIEnumerableとIEnumerator
デリゲートもインターフェイスみたいなもんだな

474 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:55:05 ]
>>470
出来ました。ありがとうございました。

475 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 18:08:10 ]
>>473
んじゃあ、自分でインターフェイスを作る事はそんなに無い感じなのかな?
ありがとう^

476 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 18:29:56 ]
>>475
ライブラリつくるときとか
プラグインぽいのつくるときとか


477 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:54:38 ]
>>476
じゃあ俺にはまだ必要ないな
ありがと^

478 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 22:42:48 ]
>>467に便乗だけど、
Visual C#でコンソールアプリケーションを作成してデバグするときに
ウィンドウが消えないように、Visual C#のオプション設定でできないの?
>>468のようにソースはいじらないで。)

479 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 22:47:55 ]
#if DEBUG
(>>468)
#endif
でいいだろもう

480 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 22:51:53 ]
他の方法ではなく、できるかできないかを聞いている。



481 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:00:23 ]
>>480
オプションではできないんじゃね?
ってか回答者は機械じゃねぇぞ。

482 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:02:03 ]
できないならできないと答えろ。

483 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:02:41 ]
できますん。

484 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:03:11 ]
そんなきき方じゃできたとしても誰も教えないってなるだけじゃね?

485 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:04:30 ]
答えられる奴が答えればいい。

>>478に回答できる奴いないの?

486 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:05:14 ]
できるよ。やりかたは自分で探してね☆

487 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:06:17 ]
できるかできないかでいえばできるな。

488 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:07:00 ]
>>486
おk。

【結論】
Visual C#でコンソールアプリケーションを作成してデバグするときに
ウィンドウが消えないように、Visual C#のオプション設定できる。

以上。


489 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:07:56 ]
POST送信をデバッグするよい方法ってないですかね?
いまのとこ、HttpWebResponseの結果をテキストにしてるのですが、
これじゃPOSTに成功したのかどうかさっぱり・・・。
IEに簡単に表示とか出来ないものでしょうか?

490 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:08:24 ]
出来ない。



491 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:09:58 ]
Wiresharkでも眺めてろよとかそーゆーの駄目?

492 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:12:17 ]
>491
申し訳ない、プロトコルレベルでの通信は成功してます。
チェックしたいのは、掲示板に書き込んだときあとの、
「名前を入力してください」
とかの類です。POSTの送信データが抜けなく遅れてるのかをチェックしたいのです。

493 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:27:49 ]
正常に送られてるか検証するためには送らないことが必要である

494 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:29:47 ]
そこはTCPの保証範囲でないの。

495 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 00:21:03 ]
ウインドウが消えないようにするには、returnのところでF9を押す

496 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 00:22:02 ]
returnのところって何?

497 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 00:22:57 ]
Mainメソッドのreturnかなんか

498 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 00:23:44 ]
ああ、そういうことね。thx

499 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 00:54:21 ]
カラムがクリックされた時にどのカラムがクリックされたのか取得したいのですがどうすればいいんでしょうか?
選択されたカラムの名前が取得できるといいのですが…。

500 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 00:57:27 ]
カラムって何?



501 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 01:02:55 ]
>>500
リストビューのColumnです。

502 名前:499 mailto:sage [2008/03/09(日) 01:27:52 ]
ColumnClickイベントで、e.Column.ToString()でとりあえず番号は取得できますが、
columnHeaderの名前自体は取得できないのですかね…?

503 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 01:38:32 ]
インデックスが手に入ってるんだからどうでもなるだろ

504 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 01:43:55 ]
例えばどうするんだよ

505 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 01:52:24 ]
listView1.Columns[index].Name;

こんなことも重いつかんのならプログラミングやめたほうがいい。
向いてないから。

506 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 01:59:34 ]
>>502これでおk?

507 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 02:03:45 ]
listView.Columns[e.Column]

508 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 02:15:40 ]
>>505
index??
それ動きませんよ。

>>507
カラムの名前じゃなくて、カラムのメンバ名を取得したいのです…。

509 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 02:19:52 ]
メンバ名とやらを手に入れる意味は無いから安心しろ

510 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 02:21:03 ]
>>509
お前に意味はなくても>>508にはあるんだよ



511 名前:505 mailto:sage [2008/03/09(日) 02:30:47 ]
>>508
string name = listView1.Columns[e.Column].Text;

お前の欲しいものはこれか?
最初っからTextって言えよ馬鹿。
本当に向いてないからやめておけ。
そして二度とくるな。



512 名前:499 mailto:sage [2008/03/09(日) 02:32:42 ]
インデックス番号だけしか取得できないとカラムが動的に追加・削除されたら困ると思うのですが…。
メンバ名を取得する方法はないってことですかね??

513 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 02:34:09 ]
>>511
さっきから釣りですか?
向いてないんじゃないですか?w

514 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 02:34:38 ]
>>511はチンコ剥いてろ。

515 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 02:39:48 ]
>>512
メンバ名ってprivate ColumnHeader hoge; の hoge だろ?
動的に追加削除したらメンバ名も何も無いじゃん

516 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 02:40:58 ]
>>512
>インデックス番号だけしか取得できないとカラムが動的に追加・削除されたら困ると思うのですが…。
困りません。

>メンバ名を取得する方法はないってことですかね??
日本語でおk

517 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 02:46:25 ]
死ね

518 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 02:48:10 ]
>>505=>>511
はチンコ剥いてプログラミングやめて2chもやめた方がいい。
人生だけはやめなくていいから。

519 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 02:52:59 ]
>>515-516
動的に追加・削除してインデックスがかぶってしまったら困ると思うのですが…。
例えばインデックス1を削除したあとに、新しく追加したカラムもインデックス1にしたら区別がつかなくなると思うのですが。

520 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 02:59:13 ]
>>518
悔しかったの?w



521 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:00:57 ]
>>519
削除したんならもうインデックス存在しないじゃん

522 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:04:21 ]
>>521
削除した方はもうないから新しい方と区別つかないじゃん。

523 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:06:41 ]
インデックスがわかればカラムのインスタンスそのものを取得できるのに、それ以上何を望む?

524 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:12:36 ]
>>523
まあそうですよね。
冗長でもインデックスとは別に取得出来るんじゃないかと思ってしまってました。
ありがとうございました。

525 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:23:00 ]
>>512>>519で区別できなくて困るのってどんな場合だろ
気になってしょうがないから、思いついた人おせーて

526 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:25:17 ]
ちょっと待て終わらせんなw
インスタンスそのものがわかってもインスタンス名が分からないと困る事あるだろ。

527 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:26:48 ]
インスタンス名ってなに?

528 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:27:16 ]
変数のことかな?

529 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:28:09 ]
カラムを動的に追加するときにNameプロパティをちゃんと設定しておけばOK。

530 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:29:58 ]
例えばあるカラムがstringで数字を表示している時にそのカラムを数値として扱いたくなった時など。
その列以外は数字でもstringで扱いたいのに、その列だけは数値として扱いたい。
そして動的に追加・削除されるものだとしたらインデックスよりインスタンス名が欲しいでしょ?



531 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:32:10 ]
で、インスタンス名ってなに?

532 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:35:57 ]
>>529
Nameプロパティが取得できないからこういう流れになってるんだろ

533 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:36:43 ]
>>505
>>511
>>527
>>528
>>531
もうちょっと勉強して来い

534 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:37:06 ]
>>533
死ね

535 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:40:06 ]
スクリプト脳の弊害ってホント恐ろしいな。

で、インスタンス名って何。

536 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:43:15 ]
スクリプト脳って?

537 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:43:46 ]
池沼はスルーしろよ

538 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:44:28 ]
出た、スルーw

539 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:56:26 ]
>>525
クリックされた列がある特定のデータ群だった時にだけ処理をしたい場合

540 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 03:59:42 ]
「クリックされた列がある特定のデータ群」ってなに?



541 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 04:01:21 ]
もう相手すんなよ

542 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 04:01:52 ]
名前なんて不安定な要素で判定しないなぁ

543 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 04:01:57 ]
出た、もう相手すんなよw

544 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 04:10:38 ]
ただの荒らしじゃねえか

545 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 04:13:52 ]
A B
1 1

AとBの列があったとして、Aの列(1)にだけ特定の処理をしたい場合困るんじゃね?

546 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 04:16:48 ]
何が困るのか全く分からない。

547 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 04:18:11 ]
break;

548 名前:545 mailto:sage [2008/03/09(日) 04:20:31 ]
>>546
俺に聞いてる?
じゃあ逆にAの列をどうやって特定する?
削除される可能性もあるからインデックスからは特定できないよ。
Aの名前も削除された後に追加されるかもしれないから名前でも特定できない。

549 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 04:34:54 ]
List<ColumnHeader>で管理するなりNumberColumnHeaderクラス作るなりどーとでも。

550 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 04:36:35 ]
>>548
ColumnClickアクションを拾って、e.Columnでインデックスが取れるよね。
で、アプリはどのカラムが何を意味してるか知ってるはずだよね?
知らないとしたら、それってどういう状況なの??



551 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 04:45:46 ]
ListViewからカラムを削除するのはアプリ。
ListViewにカラムを追加するのはアプリ。
何番目のカラムに何を格納するかを決めるのもアプリ。

インデックスが分かればカラムを特定できる。
カラムを特定できればあとはアプリが自由に操作できる。

何が困るのか全く分からない。

552 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 04:49:10 ]
>>548
Tag

単純な処理ならint,enumを入れておいてその値で処遇を決めるとか、
ソートするだけならtype(比較可能)を入れておいてキャスト時に使うというのも

複雑な処理をしたければ>>549-551

553 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 06:21:56 ]
>>548
削除された列のクリックイベントってどこから発生するの?
動的に追加削除されるカラムの中の特定のカラムに対して特定の処理をしたいってんなら、
そもそもクリックイベントでインデックスを取るまでもなく、そのカラムの変数名でアクセスすればいいだけ。
というよりも、削除されているであろうカラムのインデックスをクリックイベントで取る意味が分からん。

流れ分かってる?発端は>>499だよ

554 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 11:48:11 ]
タブコントロールでタブを下に配置した時にFlatButtonsにする方法はないのでしょうか?

555 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 12:52:16 ]
混乱させる忍術の稽古はよそでやれ

556 名前:デフォルトの名無しさん [2008/03/09(日) 13:10:38 ]
??columnのインスタンス名(??)の話の流れが全く読めないんだが
あるインスタンスを格納する変数名を取りたいってことか??
変数名なんて単なる箱なんだからスコープ違えば役に立たないと
おもうんだけど…それとは違うの?

557 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 14:19:01 ]
>>556
何いってるの

558 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 14:30:22 ]
釣りなのか思い込み野郎なのかは知らないけど、気にするな

559 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 14:59:37 ]
>>550-551
こういう場合はを想定ごらん。
例えばボタン1を押したらカラム追加、ボタン2を押したらカラム削除するとして、
プログラム上ははじめから配置されているある特定のひとつのカラムだけに操作する必要がある場合。
勿論削除されたら操作しないし、内容も他のカラムと見た目上判断できない。

560 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 15:01:10 ]
まあ削除するときに特定のカラムかどうかを判定すればいいんだけど、
>>550-551は状況を想定できないようなので言ってみた。



561 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 16:41:57 ]
>>559
カラムクリックイベントからインデックスを取るという状況の話をしているのに、
なんでボタンのクリックイベントで特定のカラムを操作する話になってんの?
もともとそんな状況の話なんかしてないんだからそんな想定は無意味だ。

562 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 17:05:24 ]
>>559-560
そんなもんプログラム上で如何様にもできるっての。

563 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 17:23:08 ]
>>561
なんでインデックスを取る話になるの?
インデックスじゃ区別つかないからインデックス以外の方法はないかって話題だろ?

>>562
如何様に出来てもインデックス以外の要素で一発で判断できるメンバがあれば楽って話だろ。
例えばエクスプローラでよくあるカラム上の▲▼マークだってオーナードロー駆使すれば如何様にも出来るけど
デザイナ上で一発で出来れば楽だろ。
それと同じ。

564 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 17:25:40 ]
>>561
それと、カラムクリックイベントからそのカラムを操作するのと
ボタンクリックから特定のカラムを操作するのとでは条件同じだろ。
どっちにしろ指定されたカラムが”ある特定のカラムか”判断する術はインデックスからは無理って話なんだけど理解できる?

565 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 17:35:37 ]
if (numberColumn == listView1.Columns[e.Column]) {
    ....
}
なにが無理なの?

566 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 17:39:16 ]
お触り禁止

567 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 17:41:13 ]
つまんないこというなよ

568 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 17:46:23 ]
>>564
>ボタンクリックから特定のカラムを操作するのとでは条件同じだろ。
イベント引数の中身が全然違う。ゆえに条件は同じとは言えない。

>どっちにしろ指定されたカラムが”ある特定のカラムか”判断する術はインデックスからは無理って話なんだけど理解できる?
何言ってんの?
"ある特定のカラム"というからにはそのカラムオブジェクトとインデックスから導かれたカラムの参照が
同じかどうか判定すればいいじゃん。お前もしかして"その特定のカラム"のインスタンスが分からないと
参照が同じかどうか判定できないとでも言いたいわけ?
比べる対象なんだからそんなもの分かっている前提に決まってるだろ。

お前が>>559で言っている状況の話を理解できないわけないだろうが。
>>559の内容がこの話の流れと全く違っていると言ってるのよ。
この話の発端となった>>499を百回声に出して読むんだな。
お前以外のやつは>>449のアホな質問に対する答えについてどうこう話しているはずだ。
お前だけ流れが読めてない。

569 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 18:00:01 ]
まあ元の質問を置いてきぼりにして話が膨らむのはよくあること。

570 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:36:28 ]
元の内容自体は>>499が(もう少しマクロな視点で)目的を言うか、
誰かが質問するかすれば、すぐにでも解決できそうなものなのにな



571 名前:499 mailto:sage [2008/03/09(日) 19:43:02 ]
まーまー^^

572 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:47:47 ]
>>568
そのカラムオブジェクトとインデックスから導かれたカラムの参照が同じかどうか判定
ってどうすればいいの?

573 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:49:06 ]
>>572
>>565

574 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:55:19 ]
必死すぎるやつがいるな

575 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:09:48 ]
そんなことよりGridLineをスクロールした時のバグは直ってないのか

576 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 08:04:41 ]
エクスプローラでドライブにメディアが入っていないときに表示される
「DVD-RAM ドライブ」 といった文字列を取得する方法は、
.NETのライブラリには用意されていないのでしょうか?
IShellFolder::GetDisplayNameOfを呼び出すよりも楽に取得する方法はありますか?

577 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 12:15:00 ]
ない。シェルをラップしたライブラリでも作れば商売になりそうな気がする。

578 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 13:40:18 ]
これをスマートに書くとどうなりますか?

private string GetSpecialFolder(string name)
{
Environment.SpecialFolder esf = new Environment.SpecialFolder();
if (name == "Desktop")
{
esf = Environment.SpecialFolder.Desktop;
}
else if (name == "MyDocuments")
{
esf = Environment.SpecialFolder.MyDocuments;
}
return Environment.GetFolderPath(esf) + @"\";
}

579 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 13:52:40 ]
>>578
Desktop,MyDocumentsをそこらじゅうで使うなら
class Desktop
class MyDocumentsと作って使うメソッドを定義
そこらじゅうで使わないならメソッド自体いらないと思う

580 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 14:48:37 ]
>>578
private string GetSpecialFolder(string name)
{
return (Environment.SpecialFolder)TypeDescriptor.GetConverter(typeof(Environment.SpecialFolder)).ConvertFromString(name);
}



581 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 14:53:38 ]
GetFolderPath忘れてた。
private string GetSpecialFolder(string name)
{
return Environment.GetFolderPath((Environment.SpecialFolder)TypeDescriptor.GetConverter(typeof(Environment.SpecialFolder)).ConvertFromString(name)) + @"\";
}

582 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 15:34:50 ]
>>579-581
ありがとうございます。

ループの中で使うだけなのでソース上で多用するわけではないので短くある必要は
ないのですが色々と勉強になります。

特にこんなものがあるなんて!。
TypeDescriptor.GetConverter(typeof(Environment.SpecialFolder)).ConvertFromString(name))

583 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 17:21:03 ]
何その裏技w

584 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 18:15:50 ]
スレ違いなのですがZIP32J.DLLで進行状況のウインドウを出さないようにするコマンドって何かわかりませんか?
HP巡回しても行き着かない・・・

585 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 18:45:15 ]
>>584
自己解凍しました

586 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:37:58 ]
物凄く初心者な疑問でごめんなさい。
メモリリークってアプリケーションを終了させてもメモリが開放されない状態を言うんですよね?
ガベージコレクタはそうならないように解放してくれるんですよね?
だとしたらOSにガベージコレクタを実装すればメモリリークなんてなくなるんじゃないでしょうか???

587 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:47:49 ]
プロセスが終了したら、そのプロセスが確保したメモリは全てOSが没収して別のプロセスが使えるようにする。

メモリリークってのは、プロセスが動いている間に不要になったメモリをOSに返還し忘れて、溜まっていく状態。

588 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:52:43 ]
>メモリリークってアプリケーションを終了させてもメモリが開放されない状態を言うんですよね?
それもメモリリークに入りますが、C#スレとしてはその定義は間違っています。
>ガベージコレクタはそうならないように解放してくれるんですよね?
違います。
>OSにガベージコレクタを実装すればメモリリークなんてなくなるんじゃないでしょうか???
そうかもしてませんが、現実的ではありません。

589 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 03:57:57 ]
C++なんかのガベージコレクタがない言語なんかは解放しないとプロセス終了後も残ってるよ。

590 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 04:07:48 ]
配列じゃなくてもいいのですが・・・。

2つの配列があってその配列には1〜9の数字が記録されています。
そこから、1〜9の数字のうち両方で使われていない数字を抽出したいと思います。

たとえば、
A が 1,2,3,4
B が 3,4,5,6
だったら、
C 7,8,9
という答えを得たいです。
配列でもコレクションでもかまわないのですが、
そういう比較を簡単にできる方法はないでしょうか?
現在は配列をforで回して比較しています。



591 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 04:20:21 ]
var Universe = Enumerable.Range(1, 9);
int[] A = { 1, 2, 3, 4 }, B = { 3, 4, 5, 6 };
var C = Universe.Except(A).Except(B);

592 名前:590 mailto:sage [2008/03/11(火) 05:36:03 ]
>>591
ありがとうございます。
LINQはなんとなく避けていたのですが、そろそろ本腰を入れて勉強しないといけないみたいですね。

593 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 06:55:05 ]
LINQは怖くないよ

594 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 09:38:49 ]
どこにLINQが出てきたの?

595 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 09:47:19 ]
Universe.Except(A).Except(B)はLINQのメソッド構文

596 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 12:20:45 ]
LINQのメソッド構文というかただの拡張メソッドだよな
拡張メソッドがLINQの本体
ごくまれにクエリ式を使った方がシンプルに書けることがあるけど
普通は拡張メソッドを使った方が早いし見やすいし楽だ

597 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 12:29:12 ]
拡張メソッドで書いてもクエリ式で書いてもLINQだよ
クエリを書けるようにする技術を総称してそう呼ぶだけで
別にC#にLINQっていう機能が付いてるわけじゃない

598 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 12:32:17 ]
>>589
本当かよそれw

599 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 12:50:44 ]
それが本当ならCでexit前のfree論争なんて起きるわけがない。

それどころか、WindowsもUnixもファイルハンドルとかの
OSに属するプロセス単位の資源はみんなプロセス終了時に片付けるぞ。

600 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 15:03:32 ]
e-words.jp/w/E383A1E383A2E383AAE383AAE383BCE382AF.html
システムを再起動する=プロセスを終了させても解放されない(?)



601 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 15:06:11 ]
「OSに属するプロセス単位の資源」でないものが時々問題になるわけだ。
OSの資源管理がタコだったりバグってたりするとその限りじゃなくなるわけだが。

602 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 15:42:13 ]
なるほど

603 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 15:47:59 ]
>>589
それは OS による。

>>596
LINQ =
 標準クエリ演算子(こういう(拡張)メソッドを用意しときなさいっていう規約)
 + クエリ式構文(C# / VB の言語拡張)

604 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 16:46:58 ]
>>600
OSがメモリリークしてたらその通り。

605 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 16:59:37 ]
アプリ終了時にメモリが解放されない場合はOSのバグであってプログラマに責任無しってことですか?

606 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 17:23:06 ]
マネージドな世界に限ればyes

607 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 18:25:13 ]
本当かよそれw
だとしたら「プロセス」ってそもそも何よw

608 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 20:10:05 ]
Windowsはプロセスが終了したら勝手に解放してくれてる。
COMとかの細かいことはよく知らない。

609 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 20:27:27 ]
アプリが終了しても、関連するプロセスが全て終了しているとは限らないのだ。
COMで起動したexcel.exeを終了してなくて、いつの間にか数十ものプロセスがメモリを占有してる、
という事例に出くわしたことがある。

610 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 20:30:32 ]
アウトプロセスサーバなんて糞喰らえ



611 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 21:29:27 ]
C# の場合でも一部イベントはちゃんとデタッチするように書いてあるね。たとえばこれとか。
msdn2.microsoft.com/ja-jp/library/microsoft.win32.systemevents.userpreferencechanged(VS.80).aspx

612 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 21:33:05 ]
それは別の話だよ
staticイベントにイベントハンドラを追加したまま放置すると
呼び出しターゲットのオブジェクトがGCの対象外になってメモリリークする

613 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 22:48:54 ]
9xはシステムリソース残り何%って、心配したなあ。
プログラムを起動すると減り、終了すると戻るが
プログラムによっては元の値まで戻らないと当時聞いていた。
これがリークしたからなんだろうなと今だから思える。

614 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 23:24:46 ]
String.Splitのオーバーロードを見てみると引数はChar[]かString[]でなければならない
みたいなんだけど、実際は

string str = "Hoge\tFuga\tFugo";
string[] val1 = str.Split('\t');
string[] val2 = str.Split(new char[]{ '\t' });

どちらも問題なくコンパイル及び実行が通ってしまうのだけどなんで?
また、どっちでも良いとなればみんなはどっちの書き方してる?

new char[]{ '\t' }を渡してやった方が良さそうかなとは思うんだけど、
str.Split('\t');と書く方がスマートにも見えてしまう。
まあどうでもいいことだと言われたらそれまでなんだが、どうも気になってしまう。

615 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 23:27:05 ]
params

616 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 01:13:23 ]
params char[]だと可変個の引数が許される
str.Split('a','b','c',...)でもいいし
配列を入れてもいい

617 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 02:45:15 ]
staticメソッドとそうでないメソッドはどう使い分けるものなのでしょうか?

public class Hoge{
 public int AddOne(int val) {
  return val + 1;
 }
}
のような引数の値を処理して返すだけのメソッドの場合は
staticにするのが普通なのでしょうか?

618 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 03:01:36 ]
>>616
なるほど。今までparamsの意味が分からなかったけどそういうことだったのね。
勉強になりました。サンクス。

619 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 03:10:33 ]
monthCalendarで方向キーで日付を移動しても選択したことにならないので
強制的にDateChangedイベントで
monthCalendar1_DateSelected(monthCalendar1, new DateRangeEventArgs(monthCalendar1.SelectionStart, monthCalendar1.SelectionEnd));
のようにDateSelectedを呼び出しました。
期待通りに、方向キーでの移動でもDateSelectedを呼び出せましたが、
方向キーで移動後にマウスで他の日付をクリックすると範囲選択になってしまいます。
期待する動作はドラッグ以外で範囲選択してほしくないのですが、上記の方法自体が間違っている(常套ではない)のでしょうか?
個人的には強制的にイベントを呼び出すのは良くないと思うのですが他に方法が思いつきません。

620 名前:619 mailto:sage [2008/03/12(水) 03:27:22 ]
問題提起箇所が複雑になってましたので整理させていただきます。
まず、方向キー入力後にマウスで日付をクリックすると範囲指定になるのはもともと仕様のようなので今回は質問から外します。
monthCalendar1_DateSelected(monthCalendar1, new DateRangeEventArgs(monthCalendar1.SelectionStart, monthCalendar1.SelectionEnd));
という強制的にイベントを呼び出す方法は正しいのでしょうか?という質問に絞らせてください。
過去ログを読んでみると>>363のような書き込みがあるのですが、
PerformClickのようなイベントをシミュレートするようなメソッドがどのイベントにも確実にあるのでしょうか?



621 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 08:26:16 ]
619に書いてあるような「壮大な勘違い」をするのはOOPとイベンドドリブンの意味が
全然わかってないから。

遠回りでもまずOOPを理解することを考えた方がいいんじゃないの?

「イベントを呼び出す」、なんて普通に書いてるけど、
揚げ足取りじゃなくて意味不明だよ。
まあ初心者にはありがちな「勘違い」の類ではあるけど。

622 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 09:33:11 ]
Guidやstringの場合は、まだ設定されていないという状態を
初期化のときに、Guid.Emptyなどを設定することによって
扱っているんですが、DateTimeのときはどうしたら良いのでしょうか?

DateTime.Emptyは無いですし‥‥
DateTime.MinValueを使っても良いもんでしょうか?

623 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 10:03:33 ]
DateTime?

624 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 10:16:22 ]
>>617
基本的にはそんな感じ。

double X = 3.14159265;

string str = X.ToString("F3"); //インスタンスメソッド
double newX = double.Parse(str); //staticメソッド

クラスのインスタンスにより異なる動作をさせたければインスタンスメソッドにする。
double.Parseメソッドがインスタンスメソッドだったらちょっと変でしょ?

625 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 10:22:09 ]
>>622
623も書いているけどnull許容型。

626 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 10:24:09 ]
>>619
OOPっていうかイベントはそんなに単純じゃないよ
君がやってるのはイベントハンドラ用のメソッドを呼び出してるだけ
別に問題ないけどイベントハンドラに直接処理を書かずに他のメソッドを作って
それをそれぞれのイベントハンドラから呼び出すようにした方が綺麗

627 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 10:56:22 ]
>>623
>>625

DateTimeってstructで値型だから、nullにはならないのではないでしょうか?

628 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 10:57:04 ]
null にならないから Nullable でラップするんだお

629 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 10:58:21 ]
int?とか書くとintまたはnullな型が出来る
DateTime?でnullになるDateTimeが出来る
値型じゃなくてclassだけど

630 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:01:13 ]
nullableは値が与えられているかどうかのフラグと値をもった値型だよ
==nullで比較できるのは構文糖衣



631 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:01:19 ]
>>627
msdn2.microsoft.com/ja-jp/library/1t3y8s4s(VS.80).aspx

>>629
Nullable<T>は構造体だから値型だぞ。

632 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:07:58 ]
VS2005で
uchukamen.com/Programming1/Menu/image2.gif
このようなメニューを作りたく思い、MenuStripを作り
RenderModeをSystemにしてみましたが出来ません。
VS2005では無理なのでしょうか?
よろしくお願いします。

633 名前:627 mailto:sage [2008/03/12(水) 11:09:15 ]
皆さんどうも有り難うございます。
nullableって、関数の引数でnullを許容するための構文だと思っていて、
何にでも使えるとは知りませんでした‥‥。びっくり。

どうも有り難うございました。

634 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:11:45 ]
>>632
何が出来ないんだよ。

635 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:22:52 ]
>>634
レス有り難うございます。
ttp://sakuratan.ddo.jp/uploader/source/date73737.png
こうなります。
uchukamen.com/Programming1/Menu/image2.gifより文字が大きいのでなんとかしたいです。

636 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:40:18 ]
ツールボックスを右クリック→アイテムの選択→MainMenu
お勧めしない

637 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:41:29 ]
>>635
そのサンプルはMenuStripじゃなくてMainMenuなんじゃね?
知らんけど。

MenuStripならToolStripSystemRenderer継承したクラス作って
好きなように描画するようにしたらいい


638 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:42:04 ]
VisualStyleを切ればいいよ

639 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:56:15 ]
>>636
ありがとうございました。
希望の動作を実現することが出来ました。
ところで、どうしてお勧めできないのですか?
>>638
menuStripにVisualStyleというプロパティはありませんでした。

640 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:58:49 ]
MenuStripに取って代わられたから
Obsolete来ても知らないよ



641 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 14:04:30 ]
拡張メソッドについての質問なんですが、

class Test

   static int GetDigit(this int num)
   {
       return (int)Math.Log(num, 10) + 1;
   }


という拡張メソッドがあったとき、C#3.0からはインスタンスメソッドとして使えますが、ライブラリにしてC#2.0から使うときは
インスタンスメソッドとして使えるのでしょうか?それとも、Testクラスのstaticメソッドとして使うことになるのでしょうか?

642 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 14:05:11 ]
当然後者

643 名前:デフォルトの名無しさん [2008/03/12(水) 15:23:22 ]
あるフォルダにあるファイルの一覧を取得した後に、
そのリストからワイルドカードで検索するにはどうしたら良いのでしょうか。

string[] fileListText = Directory.GetFiles(@"C:\Hoge\", "*.txt");

と同じことを、

string[] fileListAll = Directory.GetFiles(@"C:\Hoge\", "*");

とした後に、fileListAll の中から "*.txt" のファイル名のみ抽出して fileListTex を作成したいのです。


644 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 15:59:40 ]
fileListText = fileListAll.Where(s => Path.GetExtension(s.ToLower()) == ".txt").ToArray();

645 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 16:08:17 ]
string[] fileListText = Array.FindAll(fileListAll, item => System.IO.Path.GetExtension(item).ToLower() == ".txt");
でも良い

646 名前:619 mailto:sage [2008/03/12(水) 16:37:49 ]
>>621
はい、多分そうじゃないかと思ったのでヒントを頂きたく質問しました。

>>626
なるほど。
それだとごく簡単に共通の事が出来ますね。
PerformClickのようなものがあるので他のイベントにも同じような呼び出しでいいのかと思いました。
とすると共通の処理がないときでもイベントハンドラに直接処理を書くのは良くないのですか?
それとも共通の処理が必要になった時にメソッドを分ければいいのでしょうか??

647 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 17:10:58 ]
>>646
>とすると共通の処理がないときでもイベントハンドラに直接処理を書くのは良くないのですか?
いいえ。直接処理を書いて問題ないです。

>それとも共通の処理が必要になった時にメソッドを分ければいいのでしょうか??
メソッドを外に書いてそれを呼び出す方がスマートになる場合もあるし、
わざわざそんなことせんでも良い場合もある。そんなに気にしなくていいよ。
俺なんかはbutton1_Click(null, null)なんかで呼び出したりするのは別に汚いともなんとも思わんし。
if(result==false)と書くか、if(!result)と書くかみたいなもんで、ただの趣味の問題。
気にするだけ無駄だと思う。


648 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 17:16:30 ]
さすがにbutton2のイベントハンドラからbutton1_Clickを呼び出すのはちょっと…

649 名前:647 mailto:sage [2008/03/12(水) 17:45:59 ]
>>648
それも趣味の問題だと俺は思うぞ。
例えば、

void button2_Click(object sender, EventArgs e)
{ button1_Click(null, null); }
void button1_Click(object sender, EventArgs e)
{ /*処理*/ }

こういうように書くより、

void button2_Click(object sender, EventArgs e)
{ SampleMethod(); }
void button1_Click(object sender, EventArgs e)
{ SampleMethod(); }
void SampleMethod()
{ /*処理*/ }

こう書くべきってことを言いたいんだと思うが、
後者の書き方でもまだ汚いと思うやつ(例えば俺)もいるってことだ。

次に俺の書き方を示す。




650 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 17:52:30 ]
俺だったらこう書く。

public Form1()
{
InitializeComponent();

//イベント
button1.Click += new EventHandler(Button1or2_Click);
button2.Click += new EventHandler(Button1or2_Click);
}

void Button1or2_Click(object sender, EventArgs e)
{
//処理
}

つまり、処理を行うメソッドを外部に記述しても、それを呼び出すためだけのメソッドを記述している時点で
無駄があると感じる人間もいるんだわ。
処理を行うメソッドを直接イベントに紐付けて、デリゲートがメソッドを直接呼び出す方がスマートに感じるということ。

当然反論もあるかもしれん。イベント引数を扱いたいときなどはこの方法ではまずい場合もあり得る。
要するに俺が言いたいことは、最初から言っているとおり趣味の問題だってこと。
自分が綺麗で可読性があると思えるいうコードを書けばいいじゃんって言うだけの話。

コードはこう書くべきなんて他人がどうこう言うもんじゃない。



651 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:18:39 ]
>>647-650
ありがとうございます!
ということは>>620のような書き方でも問題ないということですか??

イベントの引数が違う時は>>650のようには出来ないので>>649のようになると思うのですが、
>>620でも趣味の範囲という解釈でいいんでしょうか。

652 名前:647 mailto:sage [2008/03/12(水) 18:25:17 ]
>>651
俺はそんなんでいいと思うけどね。

653 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:25:49 ]
>>652
ありがとうございました。

654 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:35:42 ]
>>642
ありがとうございます。

655 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:40:02 ]
>>651
ちなみに、強制的にイベントを発生させるということを厳密に行いたいのであれば、
monthCalendarを継承したカスタムクラスで、イベントデリゲートを呼び出してくれるようなメソッドを公開する。

public PerformDataSelected(object sender, DateRangeEventArgs e){
 if(this.DataSelected != null)
  this.DataSelected(sender, e);
}

ほんで外からそのメソッドを呼び出せばいい...と思う。
もしかしたら俺が何か勘違いしてるかもしれん。
興味あったら試してみて。

656 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:40:52 ]
>>655
OnDataSelectedを呼ぶべき

657 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:40:59 ]
最初は動けば良いのではないかと、そういうものは楽しさの中から築きあげて行けば良いし。

658 名前:655 mailto:sage [2008/03/12(水) 18:41:32 ]
さっそくミス発見。

public void PerformDataSelected(object sender, DateRangeEventArgs e){
 if(this.DataSelected != null)
  this.DataSelected(sender, e);
}

voidが抜けてたわ

659 名前:655 mailto:sage [2008/03/12(水) 18:42:43 ]
>>656
ほうほう。
実はmouthCalendarというものを使ったことがないもんでなw
勉強になりますw

>>651
だそうです。

660 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:47:04 ]
MonthCalendarとか関係なくイベントはクラス外から直接呼べない
だから派生クラスから呼び出す手段としてOn**メソッドを用意する



661 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:50:17 ]
>>650
趣味の問題、か。
議論の余地なく間違ってると思うよ。
こういう人は「抽象化」の意味と意義がわかってないんじゃないの。

662 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 19:00:45 ]
「状況に応じて適切に判断」かな
好みじゃなくて使い分けるもの

663 名前:655 mailto:sage [2008/03/12(水) 19:08:09 ]
>>660
あらま、やはり勘違いしてたみたいね。
派生クラスからでもイベントは呼べないのか。
失礼しました。
>>655はスルーして下され。

664 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 19:15:39 ]
そもそもイベントって「呼ぶ」ものじゃないでしょw
英語だとInvokeとかRaiseだから「起こす」とでも言うのが正解じゃないの?

665 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 19:19:08 ]
>>621 = >>661 だと思うけど反論あるなら具体例を示すべきだと思うよ

666 名前:643 mailto:sage [2008/03/12(水) 19:34:45 ]
>>644 >>645
そのままでは "=>" が上手く行かなかったのですが、

string[] fileListText = Array.FindAll(
fileListAll,
delegate (string item) { return ( System.IO.Path.GetExtension(item).ToLower() == ".txt" ); }
);

でいけました。

ありがとうございました。


667 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 19:43:21 ]
匿名メソッドほんとに冗長だな
設計時から経過措置として認識されてて,後で捨てても影響が出ないように
明示的すぎる書き方になってるのかな

668 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 19:46:02 ]
>>665
ええっと、反論ってのは具体例を挙げて行うものなんでしょうか?
それとも理由を添えろって言いたいの?

まあいいやまず>>661で言いたかったことをはっきりしておくと、要するに
>>649の前者のコードは議論の余地なく×で、これは趣味の問題なんかではないということ。

後者のコードは普通は△だが、確かにこのように書いた方がわかりやすい場合も
稀にあるかもしれないことは認める。

通常は>>650の書き方を選択すべき。

>>649の前者がダメなのは、
(1) button1_Click()が羊頭狗肉になってる。
(2) だからbutton2_Click()の処理内容が把握しづらい。

669 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 20:21:11 ]
>>668
シグネチャが違うイベントの場合を示せよ。

670 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 20:28:45 ]
だから,好みの問題じゃないってことだろ
判断基準は人それぞれとしても,場合によって適切に使い分けるもの



671 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 20:33:14 ]
なんだよ示せよって偉そうにw
なんでこういう日本語も満足に使えないたわけってのは例外なく口調が偉そうなのかね。

シグネチャが違うってどういうこと?
>>668に「通常は」と書いたつもりだけど。
EventHandler<T>と違うシグネチャのイベントを扱うのって通常かな。

672 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:02:39 ]
>>655>>663
OnDateSelected使えって指摘は既出の通りで、
引数として渡すイベントソース・データを外部から取るのはだめ
ソースはthis固定、データはコンストラクタの引数だけ外部から取って自前で生成
その例だとこんな感じ

public PerformDateSelected(DateTime start, DateTime end) {
  OnDateSelected(this, new DateRangeEventArgs(start,end));
}

673 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:50:08 ]
>>670
>判断基準は人それぞれとしても,場合によって適切に使い分けるもの

それこそが、まさしく好みとか趣味という言葉の指し示すものである。

674 名前:655 mailto:sage [2008/03/12(水) 23:08:50 ]
>>672
なるほど、勉強になった。Thx

675 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:15:51 ]
>>671
普通にあるでしょ。
例えばbutton1が押された時と、textbox1上でエンターキーが押された時に同じ処理をしたい時とか。
この場合は
private void button1_Click(object sender, EventArgs e)
{foo();}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{foo;}
}
のように>>649の後者の書き方になるんじゃない?

676 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:17:25 ]
あほ

677 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:30:09 ]
ばか

678 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:38:10 ]
分布図

679 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 11:59:03 ]
delegate int Hoge();
Hoge hoge;

hoge += foo1;
hoge += foo2;
hoge();

とするとfoo1, foo2と呼ばれfoo2の返り値だけが返りますが
hogeに登録されているものを個々に呼び出し
それらの返り値を得たいのですが、どうやるのでしょうか?

680 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 12:03:34 ]
>>679
GetInvocationListでDelegate[]を取得するとか。



681 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 12:09:24 ]
>>679
素直にrefまたはoutで渡せばいいじゃん。

682 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 12:28:19 ]
>>680
thx
Delegateクラスのメンバ一覧見てたのに全然気が付かなかった・・・

683 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 16:31:24 ]
属性の書き方なんですが、下記の2つに違いはあるのでしょうか?

[Description("ほげほげ"), DefaultValue(false)]
public bool HogeHoge {〜}

[Description("ほげほげ")]
[DefaultValue(false)]
public bool HogeHoge {〜}

684 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 16:42:07 ]
ない

685 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 01:14:17 ]
Hoge hoge = new Hoge(); // 1
hoge = new Hoge(); // 2
hoge = new Hoge(); // 3
hoge = new Hoge(); // 4
hoge = new Hoge(); // 5

とやったときに1~4までのインスタンス解放を気にする必要が無いってのが
ガーベジコレクト機能を持つ言語の利点という理解でよろしいでしょうか?


686 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 01:18:05 ]
YES

687 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 01:48:14 ]
>>671
早く答えろよ

688 名前:685 mailto:sage [2008/03/14(金) 01:53:09 ]
>>686
ありがとうございました。

689 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 02:19:53 ]
なんからのネイティブリソースを確保してたらアウトだけどね

690 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 04:06:28 ]
private void Performed(object sender, EventArgs e)
{
処理;
}
でいいじゃない。
やらないけど。




691 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 08:30:07 ]
あほ

692 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 08:32:10 ]
なんであほなのか詳しく

693 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 08:54:51 ]
テキストを画像に変換したいのですが、
どのように処理したらいいでしょうか?
また、変換後の画像の大きさ(高さ・幅)は取得できるでしょうか?

低レベルですみませんがよろしくお願い致します。

694 名前:デフォルトの名無しさん [2008/03/14(金) 09:06:28 ]
>>693
> テキストを画像に変換したいのですが、
意味がわからん

695 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 09:12:38 ]
GDI+

696 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 09:17:15 ]
>>694
例えば「abcde」と入力したら、
abcdeと書かれた画像を生成することです

697 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 09:22:29 ]
System.Drawing

698 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 09:24:50 ]
>>697
ありがとうございます
生成後のBitmapのサイズは取得できますか?

699 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 09:40:29 ]
お前には無理。

700 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 10:05:18 ]
>>698
TextRendere.MeasureTextとかで。



701 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 10:09:41 ]
>>700
ありがとうございます!
本当に助かりました!

702 名前:デフォルトの名無しさん [2008/03/14(金) 10:14:34 ]
マイクロソフトがC#用ネイティブコンパイラの製作を発表
これでC#は事実上最強言語になったわけだ
an.to/?microsoft01news

703 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 10:24:23 ]
皆さん、>>702はクリックしないようにね。

704 名前:デフォルトの名無しさん [2008/03/14(金) 10:27:37 ]
>>702
ただの釣り
開くとビルゲイツの若かりしころの写真が出てくるだけ

705 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 10:32:03 ]
ウィルスバスター2008役にたたねぇorz

706 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 10:36:19 ]
これって何?
ググってみたらan.to/?で始まるのがあちこちに張りまくられてるみたいだけど。

707 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 10:51:51 ]
>>704
写真が出てくるだけじゃないんだが、
telnetつかってごにょごにょっしようとする。

708 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 10:54:09 ]
>>706
「これ」が何を指しているのか分かりかねるが、
URLのことなら書いてる通りの転送サービスじゃないのか
内容のことなら見てないので知らない

709 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 11:29:51 ]
ProcessStartInfoのArgumentsにスペースを含むファイルを指定しようとしましたが出来ません...

710 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 11:54:44 ]
""で囲め



711 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 12:04:00 ]
どうもありがとうございました。

712 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 12:20:18 ]
GDI+で放射状にグラデーションをかける方法はありますか?
WPFのRadialGradientBrushみたいなことがしたいのですが

713 名前:712 mailto:sage [2008/03/14(金) 12:28:37 ]
自己解決
using (GraphicsPath path = new GraphicsPath()) {
 path.AddEllipse(0, 0, width, height);
 using (PathGradientBrush brush = new PathGradientBrush(path)) {
 brush.CenterColor = Color.White;
  brush.SurroundColors = new Color[] { Color.Red };
  g.FillEllipse(brush, 0, 0, width, height);
 }
}

714 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 12:50:20 ]
たびたびの質問申し訳ありません。
SendKeysでスペースキーを送信したいのですがどのようにすればよいのでしょうか。
よろしくお願いします。

715 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 13:08:58 ]
>>714
半角スペースをSendすればいい予感がしました

716 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 13:13:59 ]
>>715
10回連続で送信したく思い、
SendKeys.SendWait("{ 10}");
のそうにやってみたわけですが出来ないのでここに書き込みました。

717 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 13:18:52 ]
>>716
10回forを回すとか10個の半角スペースをSendすればいい予感がしました

718 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 13:19:33 ]
>>717
それ以外に方法が無いのならばそれでしますが...

719 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 13:24:04 ]
それ以外に方法がないんだが。

720 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 13:26:37 ]
どうもありがとうございました。



721 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 15:25:46 ]
このスレの流れを見てるとなんか面白い

722 名前:sage [2008/03/15(土) 00:46:41 ]
くだらない質問ですが、ゲームをつくりたいとおもって
とりあえずC#でゲームをつくりたいとおもうのですが、
どのようにして習得(勉強)したほうがよいのでしょうか?
ネットでしらべるとC#の手引きのようなものがのってますが、
そういうものでいいのでしょうか?
おしえてください。

723 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 00:48:38 ]
>>722
諦める マジオヌヌメ

724 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 00:50:25 ]
>>722
そういうものでいいのです。

725 名前:722 [2008/03/15(土) 01:56:50 ]
>>724
わかりました。とりあえずそこで勉強してみます。
一応参考までに聞きたいのですが皆さんはどうやってC#を習得したのですか?
できればおしえてください

726 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 02:08:48 ]
>>725
ふつーに本を読んで。

727 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 03:41:30 ]
すいません質問です。
現在forが入れ子で4段になっているのですが、
一番内側の場所から一気に1段目や2段目のforまでbreakするにはどうすればいいのでしょうか?


728 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 03:42:19 ]
goto

729 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 03:46:39 ]
あー!!
忘れてました、そうですね。C#には普通にありましたねgoto

730 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 03:59:29 ]
>>725
C# 入門 でググレ。
俺はそのサイトと@ITとMSDNとぐぐる大先生だけで独学で習得したぞ。
細かいところとかは.NET関連の質問スレとかをROMったりしても勉強になった。
本なんぞ別に買わんでもネットで十分OOPはマスターできる。



731 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 05:57:25 ]
本買うよりネットで勉強したほうが効率いいですか?

732 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 06:45:38 ]
ネットの長所・短所、書籍の長所・短所がわかってればおのずと答えは出るよね

733 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 07:49:39 ]
一度は本を通して読んだ方が近道だと思うが

734 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 07:57:59 ]
まあどっちにしても、C#とかオブジェクト指向とかの知識はどうにでもなるだろ。
どんなゲームを作りたいのかにもよるんだろうけど、
その先に「画面の描画」って大きなハードルがある気がするなあ。

735 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 09:02:37 ]
string.Format()で、文字列をn桁の左寄せで表示するにはどうすればいいでしょうか?
printf("%10s %s",first, second);
と同じようなことをしたいのです。

例えば、
aaa xxxxx
bbbbb yyyy
cc zzzzzzzzzzz
のような文字列を表示するときに、
左の項目を最低10文字分とるようにしたいのです
よろしくお願い致します。

736 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 09:20:34 ]
PadLeft

737 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 09:23:22 ]
>>735
string.Format("{0,-10} {1}", first, second)

738 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 09:28:22 ]
>>737
ありがとうございます
カンマで区切るのですか
MSDNにも載ってないので助かりました

739 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 09:33:18 ]
>>738
載ってるよ? 複合書式設定

740 名前:デフォルトの名無しさん [2008/03/15(土) 09:43:25 ]
複数のwavを繋げて1つにするプログラムを作りたいのですが、どうすればいいでしょうか?
何かライブラリDLLはあるでしょうか?よろしくお願いします。



741 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 09:46:14 ]
class TreeEx : TreeView {
public TreeEx() { this.Nodes.Add("ほげ"); }
}

こんなクラスをフォームに貼り付けて実行してみたら
"ほげ"というルートノードが2つ作られました。
おかしいと思ってInitializeComponent()を見てみたら
"ほげ"ノードを追加する処理が生成されてました。
勝手に追加されると困るのですが、これを止めることってできないんですか?

742 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 09:58:20 ]
>>741
デザイナが自動生成しないようにするやり方はわからないけど、
とりあえずDesignModeなら追加しないってやれば回避できると思う。
デザイナで見れなくなるけど。

743 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 10:06:53 ]
あと、試してないし出来るかどうかもわかんないけど、
Nodesプロパティをoverrideして、[Browsable(false)]つけてみるとか。

744 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 11:21:17 ]
ShouldSerializeなんたらだったかのメソッド書いたらいいんじゃね?

745 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 11:50:40 ]
ttp://dobon.net/vb/dotnet/control/lvitemsort.html にあるclass ListViewItemComparerを
引数をつけて呼び出して使おうとしているのですがエラーになったりちゃんと動作したりします。
エラーの内容から考えるとどうもe.Columnと_columnの数字が異なる事があるらしく
比較に失敗してしまうようなのですが、どうしてでしょうか?


746 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 11:55:59 ]
>>742-744
Browsable属性ではできなかったので

public bool ShouldSerializeNodes() { return false; }
public new TreeNodeCollection Nodes { get { return base.Nodes; } }

を書いたら望み通りになりました。
高機能なのはいいんだけどいろいろメンドクサイデスネ

747 名前:745 mailto:sage [2008/03/15(土) 12:09:07 ]
'4' の InvalidArgument=Value は 'index' に対して有効ではありません。
パラメータ名: index

だからインデックスではなくてそのlistviewitemのsubtime[4]が見つからないのですね。
でも、何で動いたり動かなかったりするのでしょう?。

748 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 12:11:54 ]
引数に渡ってきた値ぐらい確認しろよ

749 名前:745 mailto:sage [2008/03/15(土) 12:25:57 ]
サブアイテムは20以上あるのですが何故動いたり動かなかったりするのかわかりません。
IComparer.Compare(object x, object y)のオブジェクトは何処から来ているのでしょうか?。
e.Column から __column にインデックスが入ってそれを基準にオブジェクトが返ってきて
いるのだと思うのですがIComparer.Compareの内容はどうやったら見れますか?。


750 名前:745 mailto:sage [2008/03/15(土) 12:34:18 ]
あぁ、お騒がせしましたorz。たぶん、わかりました。
IDEって凄く便利ですね。デバッグ字に変数にカーソルを合わせると内容まで表示してくれるとは
今まで気付きませんでした。



751 名前:デフォルトの名無しさん [2008/03/15(土) 13:34:22 ]
このスレの住人なら知っていますね、あの糞開発ツールのことを

・自分のプログラムのバグなのかコンパイラのバグなのかわからない
・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している
・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている

糞だけど、政治的な理由で無理やり使わされているんですよね
もういい加減、我慢するのはやめませんか?

・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。
 上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。
・あの糞開発ツール提供会社には「糞開発ツールは話にならない」と突き放しましょう。
 バグレポートなどしてはいけません。改善要求などもってのほかです。
 あの会社はあなたたちのことをテスター/モルモットとしか思っていません。
・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」
 なんて話が出たら力強く机を叩き、会議室を出ましょう。
 あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。

糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。

752 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 13:47:19 ]
リッチテキストボックスまたはテキストボックスのオーナードローってできますか?

753 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 13:51:36 ]
俺ならできる

754 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 14:56:23 ]
>>753
君ならできる。やればできるさ!

755 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 16:33:15 ]
俺にもできる?

756 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 17:18:42 ]
無理

757 名前:デフォルトの名無しさん [2008/03/15(土) 17:24:14 ]
質問です。
Microsoft Visual C# 2008をつかっていいるのですが、
ビルドして実行すると一瞬だけ(入力まちがあるとき以外)表示されて
すぐにきえるのですが、どうすればきえなくなりますか?
おしえてください

758 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 17:25:37 ]
ブレークポイント

759 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 17:26:48 ]
消えないようにするオプションとかなかったっけ?

760 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 17:27:43 ]
無いらしい



761 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 17:34:57 ]
Console.ReadLine();でも入れれば

762 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 17:35:44 ]
それだったらブレイクポイントのほうが。

763 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 17:37:28 ]
#if DEBUGでいいじゃない

764 名前:デフォルトの名無しさん [2008/03/15(土) 19:01:46 ]
>>757
コマンドプロンプトからexeを起動しろ

765 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 19:10:31 ]
マルチスレッドのサンプルでは、よくマルチスレッドにするメソッドには
staticをつけてるけど、
ttp://msdn2.microsoft.com/ja-jp/library/ms171728.aspx
を見るとつけてない。
つけるのとつけないのとではどう違うの?

766 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 19:12:48 ]
マルチスレッドかどうかとstaticかどうかは関係ない

767 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 19:14:05 ]
static つけるとマルチスレッドでより扱いにくくなると思うんだが。

768 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 19:17:40 ]
>>767
そのメソッド自体を同時にひとつしか動かさないなら、別に変わらないと思うけど。

769 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 19:19:35 ]
オブジェクトの状態に依存しないメソッドを意識したらstaticが多くなるんじゃね

770 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 19:25:42 ]
>>757
キーアサイン変えてるからキーわからないけど、ステップオーバー押していって実行すれば?



771 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 19:26:10 ]
>>768
そういう保証が必要な時点で
扱いにくくなってるということだろう?

772 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 19:34:51 ]
>>757
VS上なら「デバッグ開始」じゃなくて「デバッグなしで開始」だと終了後にpauseしてくれる

773 名前:765 mailto:sage [2008/03/15(土) 19:35:47 ]
まあ別に気にしないでいいってことなんだな。
ありがとう。

774 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 21:39:03 ]
>>773
気にしないでいいというより気にするべきところが違うという話では。

775 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:19:41 ]
System.Windows.Forms.TextBoxを拡張して、
入力できる文字を制限したテキストボックスを作りたいのですが、
どのメソッドをオーバーライドするのが適切ですか?
TextChangedだとテキストが変わってから戻すことになりそうだし、
KeyPressだとコピペに対応できなさそうなイメージがあって、
msdnみてもよくわかりません。
教えて。

776 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:22:13 ]
>>775
俺も知りたい。
入力中に入力値を評価するのはどうやるんだろうな。

777 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:28:23 ]
>>775
wndproc

778 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:37:22 ]
>>775
コピペ対応はあきらめて(ShortcutsEnabled = falseと、コンテクストメニューにダミーをかます)
OnKeyPressで純粋にキー入力にだけ対応するのが一番簡単。

コピペにも対応させたいのならTextChanedで二重にチェックするのが一番簡単で確実じゃないかな。

779 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:51:55 ]
ペースト対応って難しいの?
onPasteあたりをオーバーライドすればいいんじゃないの?

780 名前:デフォルトの名無しさん [2008/03/16(日) 02:14:43 ]
Detail表示のListViewで、列ヘッダを押下したときにアイテムをソートさせたいです。
このとき、アイテム内文字列の比較モードを変更できますか?

具体的には、文字列"9"、"88"、"56"をソートした場合
"88","56","9"の順番にならんでほしいのですが、
"9","88","56"の順番になってしまいます。



781 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:18:33 ]
ListView.ListViewItemSorter プロパティ

782 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 10:31:14 ]
>>777
>>778
ありがとうございます。
早速実装してみます。

783 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 10:46:17 ]
継承Controlを作成するときに
Controlがフォーカスされたときのイベントってどこに書くんですか?

OnClickかとも思ったのですが、これだとTabキーで移動してきたときには動きませんし・・・

784 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 10:57:00 ]
Enter/OnEnter

785 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 11:06:56 ]
>>784
それかー。
ありがとーございます。

786 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 12:10:23 ]
もっと低レベルなのは
OnGotFocus/OnLostFocus

787 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 15:03:34 ]
PerlとかRubyでゆーWWW::MechanizeみたいなスクレイパってC#に存在する?
それとDB使ったツールを作って配布したいんだけど、PerlとかRubyだと一般ユーザに使ってもらえないので…

788 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 15:11:53 ]
rubyならexerbつかってexeにすりゃいいじゃん。
スレチだけど

789 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 15:39:20 ]
>>778
ここ2日くらいexerbとかrubyscript2exeやってみてたんだけどどうもうまくいかんのだ

790 名前:デフォルトの名無しさん [2008/03/16(日) 17:10:36 ]
質問です。以下のコードをビルドするとエラーがおきますが、原因がわかりません。
(bool型とdouble型が〜とでるのですが自分にはわかりませんでした。)
どなたかおしえてくださいませ。
using System;
class IfSample
{ public static void Main(){ Console.Write("身長(cm)を入力してください");
double n = double.Parse(Console.ReadLine());
Console.Write("体重を入力してください");
double m = double.Parse(Console.ReadLine());
Console.Write("BMIは{0}です", m / ((n / 100) * (n / 100)));
bool bmi = m / ((n / 100) * (n / 100));
switch(bmi)
{ case (bmi<19.8):
Console.Write("痩せ型です");
break;
case (19.8<=bmi<24.2):
Console.Write("普通です");
break;
case (24.2<=bmi<26.4):
Console.Write("やや肥満です");
break;
case (26.4<=bmi<35.0):
Console.Write("肥満です");
break;
default:
Console.Write("高度な肥満です");
break;
}
}
}




791 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 17:13:53 ]
エラーメッセージは完全な状態でこぴぺしろ

792 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 17:15:13 ]
>>790
> bool bmi = m / ((n / 100) * (n / 100)); 

ここかな?

double bmi = ・・・
みたいにしてみれば?


793 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 17:17:46 ]
caseには定数式以外は使えない

794 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 17:19:33 ]
if (bmi < 19.8) {
Console.Write("痩せ型です");
} else if (bmi < 24.2) {
Console.Write("普通です");
} else if (bmi < 26.4) {
Console.Write("やや肥満です");
} else if (bmi < 35.0) {
Console.Write("肥満です");
} else {
Console.Write("高度な肥満です");
}

795 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 21:04:38 ]
enum型の要素に自動的に割り当てられる値は、
[Flags]属性をつけようがつけまいが同じなのでしょうか?

どこかで0,1,2,4になるようなことを読んだような記憶があるのですが、それは勘違いで、
自分で明示的に割り当てなければいけない。というのが正解なのでしょうか?

796 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 21:07:23 ]
はい。勘違いです

797 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 21:55:31 ]
>>795
俺もそんな話をどっかで読んだな。
どういう属性をつけるかとか、ぜんぜん覚えてないけど。

798 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 21:57:17 ]
[Flags]付けるとビットフィールドになるんだろ。

799 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:00:40 ]

ビットフィールドには[Flags]を付ける「お約束」

800 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:20:11 ]
実際に試したほうが早いし正確なのに



801 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:22:13 ]
聞いた方が早い。

802 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:23:41 ]
ググってみたけど、Flagsでいいんじゃね?
www.melma.com/backnumber_120830_2325135/

↑C/C++の世界では、これは「ビットフィールド」とは言わんと思うけど。C#の世界では知らんけど。

803 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:25:49 ]
>>802 の続き
よく見たら、自動で割り当てるわけじゃなくて、自分で書かないといけないのか。


804 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:25:53 ]
そのページは大嘘過ぎるな

805 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:27:16 ]
[Flags]を付けないと、3とか5の値をとれない。

806 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:28:21 ]
ハァ?

807 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:32:49 ]
[Flags]
public enum ABC { Z = 0, A = 1, B = 2, C = 4}

[Flags]を付けないと
ABC ab = A|B;
でエラーになる。

808 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:00:19 ]
ならないよ
エラーになるような違いが出るんだったら属性じゃなくて言語に直接組み込まれてるだろ

809 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:09:29 ]
(ABC.A | ABC.B).ToString()で違いが出るね
やっぱりコンパイラの動作とは直接関係なくてMSとのお約束なんじゃね

810 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:17:53 ]
そもそもそのためのFlagsAttributeなんじゃないんでしょうかw



811 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:35:39 ]
どこが面白いのかわからない

812 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:40:54 ]
まあさすがに自動でビットフィールドにしてくれるんだったら
属性じゃなくて flags enum ABC { … } みたいにするわな

813 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 04:02:24 ]
Form1を閉じても、スレッド2が動いたままなので、
Form1を閉じたら、スレッド2を終了したいのですが、どのようにすれば良いのでしょうか?

814 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 04:32:05 ]
Form1を閉じる動作のときスレッド2を終わらせる

815 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 04:54:36 ]
>>814
それの書き方が分からないよ><

816 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 05:27:37 ]
>>815
Form のイベント全て試す

817 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 14:19:34 ]
スレッド2はループ中なんか?

818 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 14:35:03 ]
form1.Closed += (obj,e) => thread.Abort();
こんなんじゃないか?

819 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 16:09:07 ]
いちいちそんなんでラムダ式使うなカス

820 名前:デフォルトの名無しさん [2008/03/17(月) 16:16:57 ]
smallint型のデータをSqlDataReaderを使って取得し、
int型変数へ入れるにはどうすればよいですか?
List<int>へループで入れたいが 一部smallint型が
ある場合に上手く出来なくて困ってます。



821 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 16:52:46 ]
>>819
むしろそんなんだからラムダ式使うんじゃないかと。

822 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 17:59:52 ]
>>817
そうです。break;の条件を、Form1が閉じたときとやりたいのですが、うまく行きません。

static int close1 = 0;
public void Form1_Closed(object sender, System.EventArgs e)
{
close1 = 1;
}

while (close1 == 0)
{
//////////////時計
long tick = DateTime.Now.Ticks;
DateTime d = new DateTime(tick);
Console.WriteLine(d.ToString());
label8.Text = (d.ToString());
Thread.Sleep(1000);
}

823 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 18:33:40 ]
>>822
>label8.Text = (d.ToString()); 
GUIスレッド以外からフォームにアクセスしちゃダメ。
close1をvolatileにするか読み書き時にlockする。

BackgroundWorkerの使用をすすめる。

824 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 18:47:22 ]
そもそもTimerじゃいかんのかと思ってしまうサンプルだ

825 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 19:11:01 ]
>>821
ぶわぁか、こんなんでC#3.0にしてどうする。
せめて匿名メソッドだうんこ。

826 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 19:12:46 ]
>>825
匿名メソッドは面倒だよ。
なげーもん。ラムダ式使ったら2.0には戻れんね。

827 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 19:14:33 ]
C#やめてRuby(笑)でもやってろモルモン。

828 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 19:17:24 ]
言語の進化についていけない落伍者か
Cでもやってりゃいいのに

829 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 19:26:29 ]
C++から来てるとλ式とかは読みにくいな

830 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 19:40:15 ]
僕はくもん式上がりなのでλ式は余裕です。



831 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 19:43:04 ]
C++もそっちの方向でしょ

832 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 19:44:34 ]
C++にラムダ式が加えられても落伍者達はわからんわからんとぼやくんだろうな

833 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 19:59:52 ]
すみませんλって言いたいだけみたいなのですぐに回収します
λ......

834 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:01:55 ]
λ式は書けても高階関数は書けないんでしょ?

835 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:05:56 ]
書けるに決まってるだろ

836 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:08:03 ]
Enumerableクラスなんか高階関数のお花畑

837 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:28:33 ]
>>829
俺、C#よりC++をよく使うが、ラムダ式が羨ましくて仕方ないんだが。

838 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:37:26 ]
ここ1年ずっとC#使ってきたらC++書くのがきつくなった・・・

839 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:39:29 ]
すみません、質問いいですか?

FileSystemWatcherってありますよね?
あれ凄くイヴェントを取り逃がすような気がするんですけど皆さんどうですか?

使い方がおかしいんでしょうけど、どうおかしいのかすら判りません。

例えばDeletedイベントハンドラってPathで指定したディレクトリ内の
Filter指定したファイルが消されると発生するんですよね?

840 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:41:06 ]
っていうか、ラムダ式って所詮、匿名デリゲートの焼き直しなのに何をそんなに目くじらたてるんだろう。
おまけで式木に変換される機能がついたけど、普通に使う分には匿名デリゲートにしかならない。
今思えば匿名デリゲートの記法を delegate(...){...} にしたのが失敗で、
先にラムダ式を導入していたらこの記法は絶対導入しなかったって中の人も言ってるくらいなのに。



841 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:41:50 ]
イヴェント

842 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:45:54 ]
1.匿名メソッドを理解、使えるようになる
2.ラムダ式の便利さに気づく
3.ラムダ式は式木でも書けることに気づく
4.もっと複雑な式木を書きたくなる
5.某カッコだらけの言語の存在を知る
6.某カッコだらけの言語の奥深さを知る
7.某カッコだらけの言語で悟りを開く

843 名前:デフォルトの名無しさん [2008/03/17(月) 20:50:17 ]
C#である変数を宣言するときに、アドレスを指定するにはどうすれば
いいですか?
また、アドレスから値を得るにはどうすればいいですか?

844 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:55:07 ]
アドレスを指定するって何だよ
変数のエイリアスはつくれねえぞ

845 名前:デフォルトの名無しさん [2008/03/17(月) 20:58:40 ]
すいません。。。
質問しなおします。

ある変数Aのアドレスが分かっているとしたとき、アドレスから変数A
の値を取得するにはどうすればいいでしょうか?

846 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:59:40 ]
>>840
>>825

>>839
InternalBufferSizeを増やす。

847 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:25:22 ]
>>845
アドレスってどういう意味で言ってんの?
*(int*)address
まさかこういうことじゃないよね

848 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:27:32 ]
>>845
unsafeでぐぐれ

849 名前:845 [2008/03/17(月) 21:39:03 ]
>847-848
アドバイスありがとうございます。
変数につけられたメモリ上での番号のことを言っています。

簡単なコードを示していただけませんか?
例えば、メモリアドレス1000の値を取得したり、代入する場合など。。。

お願いします。

850 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:39:20 ]
>839
explorerでけすと、ごみ箱へのMoveだから見逃す、というオチじゃないの?



851 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:39:39 ]
unsafeつけるとCと変わらない書き方ができる

852 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:46:21 ]
>>849
int a = 123; int addr = (int)&a; int aValue = *(int*)addr;
こういうこと?
超危険なだけで何の意味もないからせめて普通にポインタ使えよ

853 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:57:22 ]
1つ値を読み取りたいだけなら、Mashal.Read*メソッドがお手軽かもしれない。

854 名前:845 [2008/03/17(月) 22:02:57 ]
>>852
アドバイスありがとうございます。

示していただいたコードで、変数のアドレスを取得することができました。
しかし、アドレス1000に対しての代入?についてはまだ疑問が残ります。。。

849の繰り返しになりますが、例えばメモリアドレス1000に格納されている
データを取得するにはどうすればいいでしょうか?
また、メモリアドレス1000に値を格納するにはどうすればいいでしょうか?

855 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:10:11 ]
釣りだろjk

そんなことをする必要はないし
する必要があるならC#を使うはずがない

856 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:11:06 ]
>>854
実際にこんなことやろうとしても、
割り当てられていないメモリを読み書きしようとしたとして、
OSに止められるだけだからな。
int* p = (int*)10000;
int x = *p;
*p = 666;

int x = Marshal.ReadInt32((IntPtr)10000);
Marshal.WriteInt32((IntPtr)10000, 666);


857 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:13:37 ]
どうせ構造体のポインタが欲しいだけとエスパー

858 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:16:57 ]
>>852見て>>856が思いつかないならポインタなんか触るべきじゃない

859 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:18:32 ]
つかC#でポインタ使うとこってどこ?

860 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:25:08 ]
Interopとか画像処理とか構造体の配列触るときによっぽどパフォーマンスが大事なときとか



861 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 23:56:57 ]
>>854
勘違いしてない?
ここはC♯(シーシャープ)という言語のスレだぞ。
もしかして学校の宿題なら、それは、CとかC++という言語じゃなかったか?

862 名前:822 mailto:sage [2008/03/18(火) 00:38:27 ]
>>818,823-824
レスサンクス
明日試してみる。

863 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:36:23 ]
多次元配列は使いそうだけど、ジャグ配列って使わないよな?
覚えるのめんどくさいんだが・・・

864 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:40:27 ]
>>863
Cから来たら無意識にジャグの方を使う。

865 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:42:29 ]
>>864
・・・まじかよ、じゃあ素直に勉強するわ
d

866 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:46:24 ]
いや勉強するもなにも
宣言と要素アクセスのやり方だけ知ってりゃいいんじゃん
ジャグのほうは単なる配列を要素とする配列ってだけの話だし

無意識に使われるジャグ配列って「ジャグ」じゃなくね?

867 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 03:09:39 ]
List<int[]> lst = new List<int[]>();
//動的に配列を追加していくループ
for(...){
lst.Add(....);
}
int[][] jag = lst.ToArray();

格納される配列の要素数が動的に変化するような場合とかもあるし、
ジャグのが柔軟。



868 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 03:56:09 ]
普通ジャグにしね?
ジャグじゃないとN次元配列が書けんし

869 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 04:30:05 ]
そんなことはない。

870 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 06:30:03 ]
ジャグ配列ってすごく使いにくいぞ



871 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 07:46:45 ]
パフォーマンスはジャグの方が全然良いけどな。

872 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 09:16:17 ]
使いにくさで言うと断然多次元配列だと思うけど
Sortメソッドも使えない

873 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 09:24:21 ]
多次元配列よりジャグの方が直感的なんだよな。気がついたらジャグで作ってることが多い気がする。
初期化するときも使用するときも、機械的にいつも似たようなfor文で処理できるし。

>>871
すごく初耳。

874 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 09:50:02 ]
>>873
rectangular の方は a[i, j] → *(a + i *WIDTH + j)
jagged の方は a[i][j] → *(*(a + i) + j)
相当で、一見 rectangular の方が早そう(間接参照よりは掛け算の方が軽い)だけど、
1次元配列の参照は IL が専用命令持ってるけど、
多次元配列参照命令がない関係で jagged の方が早いって聞く。


jagged 配列の方が柔軟だけど、new しまくらないといけないのが面倒なときもあるのよね。

875 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 11:40:01 ]
ジャグ配列の方が速いのは一番右の添え字が連続したアクセスの場合だけだったような

876 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 15:44:04 ]
メインフォームにおいて、文字キー T とか Y のkeyPressイベントを起こすにはどうしたらいいんですか?

private void MainForm_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{

}
の中に記述してもイベントそれ自体が発生しないんですが・・・

877 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 16:07:50 ]
フォーカスがないだけだろ

878 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 16:08:47 ]
>>876
そのイベントハンドラはちゃんとイベントにバインドしてあるのか

879 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 16:23:40 ]
KeyPreview

880 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 16:56:20 ]
get,setの利点が不明(C#2.0)
public string Hoge{ get{ return this.hoge; }}
こう書くと

public string getHoge{ return this.hoge; }
と書くのに比べて何が幸せなんだぜ?



881 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 17:12:21 ]
Console.WriteLine(Hoge);
Console.WriteLine(getHoge());
あと,リフレクションとの相性

882 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 17:14:58 ]
しりあらいず

883 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 17:22:10 ]
リフレクションというかコンポーネントモデルやな。PropertyDescriptor。
…ヘジは1.0からこの辺のものを第一言語要素にする点こそ重要って
言ってた気がするがスルーされっぷりが可哀想というか

884 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 17:26:51 ]
getHogeがメソッドでないから、きっと記述方法のことを言ってるんだとエスパー
括弧なしのgetHogeでHogeプロパティ作れと

プロパティとアスセサ(メソッド)の違いについてならそういう風に書くだろうし

885 名前:デフォルトの名無しさん [2008/03/18(火) 17:35:12 ]
iPod touchみたいな慣性付きスムーズスクロールはどうやるのでしょうか?
そもそも普通のスムーズスクロールはどうやるのでしょうか

886 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 17:40:07 ]
以下のプログラムから出力される数字を、
wavファイルにするにはどうすればいいでしょうか。

#include <iostream>
#include <math.h>
using namespace std;
const int rate=44100;

int p(double q, int f, int t)
{
const double pi=3.1415;
double x;
x=sin(2*pi*f/rate*q);
cout << int(x*127+128+0.4999);
cout << "\n";
if (f<t) p(q,f+1,t);
return 0;
}

int main(void)
{
p(440.0 , 0, rate);
return 0;
}

887 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 17:44:02 ]
ごめ。
c++スレかと思った・・忘れてください

888 名前:デフォルトの名無しさん [2008/03/18(火) 19:03:44 ]
PictureBoxを使って、

Font font = new Font(fontName, size);
g.DrawString(code, font, Brushes.White, 0, 0);

で、1文字描画します。

この時描画した文字の幅を求める手段を教えてください。


889 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 19:07:52 ]
MeasureString

890 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 21:09:56 ]
WebColorConverterのインスタンスを取得するにはどうするのが正しいの?
MSDNにはTypeConverterのインスタンスは直接作らずにTypeDescriptorを使えと書いてあるけど
TypeDesctiptor.GetConverter(typeof(Color))だとColorConverterが返ってきてしまう



891 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 22:07:38 ]
今でも>>886のことが忘れられない…

892 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 22:24:13 ]
宇宙仮面のC#プログラミングってサイトの、ED が点滅するボタンのページ
>次に、ツールバーのカスタマイズにより、コンパイルしたアセンブリーをツールバーに登録します。
ってどういうこと?
ツールバーのユーザー設定?
コンパイルしたアセンブリーって項目があるってこと?

893 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 22:33:46 ]
事故解決しましたごめんなさい

894 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 08:02:56 ]
class A<T> { ・・・ }
とあるとき、Tの型をAのクラスの外から調べて使っていく便利な方法があったら教えてください。
リフレクションを使えばなんでもできますが、できれば使用したくないです。
C++ では
class A<T> { typedef T ElementType ; }
とできたので話は簡単だったんですが・・・

#VBのLinq to XMLが便利すぎ〜〜〜〜ぐはぁぁぁぁ
#ヘジたぁぁぁん

895 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 08:05:32 ]
dateTimePickerをパースして1日追加して表示しようとしているのですがなりません
何か勘違いしているのでしょうか?

DateTime dt = DateTime.Parse(dateTimePicker.Text);
dt.AddDays(1);
lvi.SubItems.Add(dt.ToShortDateString());

896 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 08:11:38 ]
>>894
なにがしたいのかわからんけど

class A<T>
{
public Type ElementType = typeof(T);
}
こんなんじゃだめなの?

897 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 08:11:49 ]
>>895
勘違いでーす
DateTime dt = DateTime.Parse(dateTimePicker.Text);
dt=dt.AddDays(1);
lvi.SubItems.Add(dt.ToShortDateString());


898 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 08:13:29 ]
>>896
それだと、

A.ElementType inst = new A.ElementType();
とかできなくて不便なんですよ。

899 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 08:19:26 ]
>>898
じゃあ

void Method<T>(A<T> a) where T : new(){
T item = new T();
}

こうじゃねえの

900 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 08:24:16 ]
>>898
A<T>にこんなメソッド追加すれば
public T CreateElement()
{
return new T();
}




901 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 08:27:08 ]
>>899
それもちょっとなんですよね、全部のメソッドについてやらないといけなくて、場当たり感が・・・
C#に移ってみたもののC++とは勝手が違って難しいです、逆にC#では意外とあっさりできる物なども多いのですが。

902 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 08:28:39 ]
>>897
ありがとうございます。
盲目でした・・・。

903 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 08:48:06 ]
>>895
なんで
DateTime dt = dateTimePicker.Value.Date.AddDays(1);
じゃだめなの?

904 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 08:51:20 ]
どうでもいいところに反論したがる奴がいるなw

905 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 09:10:16 ]
903じゃないがどうでもいいかぁ?
カスタムフォーマットとかで元のコード落ちたりしないだろうか

906 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 09:15:29 ]
大体TをnewするよりA<T>を使う側がそのものずばりをnewする方がうまくいくと思うがなあ

907 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 09:16:47 ]
>>906
だよね
使う側はTがなにか知ってるんだし

908 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 09:31:56 ]
てか、いろんなA<T>に対して同様の処理をしたいなら
それこそ、その関数なりクラスなりをジェネリックにすべきだと思うが

909 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 09:37:48 ]
独り言キモイ

910 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 12:41:47 ]
馬鹿ってのはどうして自分のことばを自分に適用できないのかねw
統合失調なんじゃないのチミ



911 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 12:59:40 ]
>>910
因果関係が逆な気もするぞ。
そういう人間のことを馬鹿というのでは。

912 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 15:10:00 ]
VB.NET質問スレ(Part25)
pc11.2ch.net/test/read.cgi/tech/1203650042/294

294 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/14(金) 20:29:48
ふーん偉そうに他人を「偉そうだ」と言うのは偉そうじゃないんだ。
本当馬鹿ってのはどうしていつでも自分自身の言葉を自分に適用できないんざんしょ不思議。

まあ基本であることに全然異議はないんだけど、その基本すら理解できない御仁がいらっしゃるから
「偉そうに」貴殿はまちがっておられるぞよ、と進言差し上げたしだいなんでございますがね。

345 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/17(月) 21:08:14
多分「俺」に否定的な言葉を投げる奴はみんな「(また)お前」なんだよw
冗談抜きで最近こういう統合失調一歩手前って人間増えてる気がするね



またお前か。
ふらっとスレだけは荒らさないでくれよな。

913 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 15:38:20 ]
どう見てもビョーキだなwww

914 名前:デフォルトの名無しさん [2008/03/19(水) 16:04:07 ]
統合失調好きだなあ

915 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 19:03:12 ]
>>912
言ってるそばから自分棚上げかよw
本当馬鹿ってのはどうして自分自身の吐いてる言葉を自分に適用できんの?
それから「荒れて」いるのはスレじゃなくてお前さん自身の脆弱な心、でしょ?w

馬鹿で心が弱いお前さんの感情が刺激されること=スレが荒れること、ではないよ。

916 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 19:11:08 ]
マ板でやれ

917 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 00:39:48 ]
Webbrowserコントロールがjavascript周りでエラーを吐きまくるのでオフにしたいんですが、
サンプルコードが載ったページをご存じないですか?
いくつか類似のページはありますが(www.divakk.co.jp/aoyagi/csharp_tips_wbzone.html)、
旧.Net用でVS2005/2008では使用できませんでした。
ページを読み込む前にDLしたページキャッシュを読んで書き換えて無効化する方法も考えましたが、
読み込みをキャンセルさせる方法が分からず、汎用性もないため諦めました

918 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 03:00:45 ]
USBカメラを単純にプレビューするだけのサンプルってないですかね?
色々探してみたんだけど、どれも複雑で。。。

919 名前:デフォルトの名無しさん [2008/03/20(木) 03:01:04 ]
>>917
WebBrowser.ScriptErrorsSuppressed = true;

920 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 01:15:31 ]
なんでVBのサンプルがC#より上にあるんだよ



921 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 01:18:37 ]
アルファベット順だろうな

922 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 01:29:42 ]
じゃあCの方が上だろ

923 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 08:32:49 ]
ゲイツがBASIC世代だから?

924 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 09:06:52 ]
xmlでnode名とvalueを指定して
特定箇所のvalueを更新する方法は
ありますか?
ファイル丸ごと読み込んで書き出す方法しか
知らないので教えて下さい

925 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 10:06:39 ]
>>922
Visual BasicとVisual C#とVisual C++だったらVBが先だろ。

926 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 10:49:55 ]
>>924
1) 一気に読み込んで、DOMを使って編集する。
2) XmlReaderで少しずつ読みながら、XmlWriterで書き出す。

927 名前:デフォルトの名無しさん [2008/03/21(金) 14:02:14 ]
Linqを使い始めたら、yield を使った即席の IEnumerable ができると便利だと思ったのですが・・・
static System.Collections.Generic.IEnumerable<int> CreateInt100()
{
 for (int i = 0; i < 100; ++i) yield return i;
}
private void button2_Click(object sender, EventArgs e)
{
 System.Collections.Generic.IEnumerable<int> collection = CreateInt100();
 foreach (var element in collection) System.Console.WriteLine(element);
}
上のメソッド CreateInt100() を毎回作るのは面倒くさいですし、名前空間を汚すので匿名メソッドにしてみようかと考えました。
private void button2_Click(object sender, EventArgs e)
{
 System.Func<System.Collections.Generic.IEnumerable<int>> lanbda = () =>
 {
  for (int i = 0; i < 100; ++i) yield return i;
 };
 System.Collections.Generic.IEnumerable<int> collection = lanbda();
 foreach (var element in collection) System.Console.WriteLine(element);
}
残念ながらエラーになってしまうのですが、何か良い方法をご存知の方がおられましたら教えてください。

928 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 14:08:54 ]
Enumerable.Range

929 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 14:23:33 ]
>>928
すまみせん、int のシーケンスは例であって、int のシーケンスを作りたい訳ではないです。
手際よく yield を含むコードを書き下したいのです。

930 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 14:25:27 ]
できないなあ



931 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 14:32:03 ]
ツリーコンテナの列挙をするときには便利な機能と割り切ってそれ以上深く考える事をしなかったんですが・・・
yield 便利だね、なんでもかんでもコレで書いてしまいたくなる衝動に駆られます。

932 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 14:33:50 ]
それはするべきじゃないだろう

933 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 14:36:43 ]
Haskellの無限リストより書き方が直観的で良いです

934 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 14:53:32 ]
クラスの比較をするときに、比較したいメンバを片っ端から .Eulals 等で比較するメソッドを
片っ端から書きまくって、Eulals , GetHashCode …とこれまた片っ端から書きまくって
比較対照数×比較系メソッド数分の条件判断を書くという、ちょっと間違えれば書き損じ出まくりです
yield を使って列挙する側は、列挙する側、比較する側は比較する側とバシッと分けて書いてみると…なかなか気持ちいいです。

935 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 14:58:46 ]
>>934
よくわかんない
コードで頼む

936 名前:デフォルトの名無しさん [2008/03/21(金) 15:11:35 ]
余りに気持ちいいので、ちょっと紹介しておきます。
クラス C の Equals GetHashCode のオーバーライドが、メンバーの変更によって変更しなくても済みやすくなっています。
using System.Collections.Generic;
using System.Linq;
public class C
{
 public int Field1;
 public int Field2;
 public string Field3;
 public override bool Equals(object obj)
 {
  C tmp = obj as C;
  if (tmp == null) return false;
  IEnumerable<object> x = this.CreateFieldEnumerable();
  IEnumerable<object> y = tmp.CreateFieldEnumerable();
  return x.SequenceEqual(y);
 }
 public override int GetHashCode()
 {
  return CreateFieldEnumerable().Sum((a0) => a0.GetHashCode());
 }
 IEnumerable<object> CreateFieldEnumerable()
 {
  yield return Field1;
  yield return Field2;
  yield return Field3;
 }
};

937 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 15:23:32 ]
文字がアルファベットかどうか判定したいんだけど、
Char.IsLetter('あ'); の結果がtrueを返してくる。
ほかにいい方法ありますか?

938 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 15:34:09 ]
>>936
GetHashCode()に和を使うのはどうかと

939 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 15:35:08 ]
>>937
( ゚д゚)つ正規表現

940 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 15:36:15 ]
a<= x && x <= z || A <= x && x <= Z



941 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 15:36:35 ]
>>938
そんなの問題があるならテキトーに替えてくださいよ(汗

942 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 15:39:04 ]
>>937
「アルファベット」の定義は?

943 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 15:44:27 ]
HashCodeの作り方がよくわからんからEqualsのオーバーライドもあまりやりたくないな

944 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 16:10:50 ]
>>939 >>940 >>942
どうもです。普通にa-zA-Zで比較して判定します。
それにしてもMSDNのあの説明では日本人は勘違いしますね。
MSは苦労したとは思いますが。

945 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 16:30:12 ]
日本語のアルファベットはひらがな、カタカナ
英語のアルファベットはA〜Z
単にアルファベットと聞かれたらどちらか分からない。

946 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 16:37:49 ]
一般的な日本人はアルファベットと言われたらA-Zの26文字のことだと思う
ANK=Alphabet Numeric Kanaって単語だってあるのに。

947 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 16:44:07 ]
>>945
MessageBox.Show(char.IsLetter('山').ToString());

948 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 16:57:23 ]
>>944
ぼくは一般的じゃないんですかそうでつか><

949 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 17:05:24 ]
>>948
私は >>946 とは別人ですよ。あなたは人より教養があるんだと思います。

950 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 17:30:00 ]
ギリシャ文字はアルファベットの名前からしてもアルファベットだし、
ヘブライ人も彼らの文字をアレフベートって呼んでるし、
そう考えると、ヘブライ文字の親類のアラビア文字もアルファベットだし、



951 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 17:57:47 ]
>926
domとうい単語しらなかったです ありがとう

952 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 18:09:09 ]
もうとっくに結論でてますが・・・
昔と違って、アルファベットの概念が広がっているね
int 山 = 5 ;
とか、コンパイル通るし、UTF8 で便利になった反面混乱も多々あり。
ja.wikipedia.org/wiki/Unicode
あえてライブラリを使うなら、基本ラテン文字 (ASCII互換)、かつアルファベットを調べるとなると
Char.IsLetter('あ') && 'あ' <= 0x7f
アホ臭いから、直接文字コードを調べるのが良さそうな気がしますね。そしてせっかくの新機能があるので拡張してみた。
static public class CharExt {
 public static bool IsBasicLatin( this char c) { return c <= 0x7f; }
}
class MyClass {
 void func() {
  bool isBasicLatin = 'A'.IsBasicLatin(); // (笑
  System.Console.WriteLine(isBasicLatin);
 }
}

953 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 22:52:21 ]
>>951
xsd.exe .net で検索してみな

954 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 12:04:31 ]
なになら最近できたというらしい WPF を使ってみた。
Xamlとか一切使わずに、フルにC#でコーディングしてみたんだけど、System.Drawing.Graphics + Pain イベントと比べて断然楽だね
Linqに引き続き、説明がさっぱり分らんのは相変わらずで、なんとかしてくれよマイクロソフト・・・
簡単説明サイトをだれか作ってくれないかな・・・自分で作れってかorz

955 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 12:08:41 ]
XAML使わないと添付プロパティとか物凄く面倒だぞ

956 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 13:32:49 ]
むしろWPFはコーディングしたら負けだろ

957 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 14:29:50 ]
固定デザイン固定アニメーションならコーディング無しでもいいが
プログラマブルに動かしたければ、やはりコーディングするしかないよ
いやできなくは無いが、逆に面倒になるだけという意味で。

958 名前:954 mailto:sage [2008/03/22(土) 14:54:20 ]
とりあえず棒グラフとか折れ線グラフとか作ってます、描画クリッピングの処理とか
つまらない処理にも関わらず、工数の取られる作業がプロパティーの設定とGrid親子構造の作り方一つで
簡単対処できるのには驚愕しています、最後に印刷処理を作りたいのですが、どうするんだ・・・

959 名前:954 mailto:sage [2008/03/22(土) 14:58:45 ]
それと、デタラメに描画が速いね、これにはタマゲタ
さすがDirectX使っているだけの事はある、描画範囲外に大量にLineを配置しても全然速度低下がない。
これが System.Drawing.Graphics ベースだと、Pain 処理はややこしくなるし
手抜きして全部描画しようものならガックンガックンになるし。

960 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 18:42:46 ]
今C#のCUIを勉強してるんだが、練習問題ってどっかないかな?
探してみても、本とか講座とかしか出てこないんだがー



961 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 18:44:43 ]
CUIって勉強するようなことあるのか?

962 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 18:49:35 ]
>>961
プログラミング自体が初めてだからさ、一応勉強しとかないとと

963 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 18:53:20 ]
ConsoleクラスちょっといじればCUI限定の問題はクリアと考えていい

964 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 18:54:54 ]
>>959
Pain処理ってある意味間違ってないよなw

>>962
unixコマンドのリファレンス引っ張ってきて実装すれば
catとかtelnetとか

965 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 18:58:08 ]
>>963
そんなもんですか、やっぱ基本的にGUI弄るってことかな
ありがとうございます^

>>964
ググってみます^

966 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 18:58:10 ]
CUIをやらなきゃいけない理由でもあんの?
初めてなら逆に手を出す必要はないと思うんだが。

967 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 19:02:13 ]
>>966
いやー、やっぱ基本的なことは知っといた方が良いのかなと

968 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 19:02:51 ]
CUIとかGUIなんてどうユーザとやり取りするかって話でしかない
本当にやりたいのはその先だろ?

>>966
"言語の"勉強にはCUIのほうがいいと思う

969 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 19:02:58 ]
言語仕様からきっちり解説するような本だとだいたいコンソールからだよ

970 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 19:14:39 ]
てことは、コンソールが必要になったら、その都度調べる程度で平気ってことですかね
どうもです、頑張ります^



971 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 19:16:01 ]
GUI を根本からサポートしている言語を除けば、
GUI まで教え始めるとページ数多くなるからな。

972 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 19:36:12 ]
GUIだとはじめに必要な「おまじない」が多いし
入出力がまどろっこしいから言語仕様の解説には不向き

973 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 20:11:32 ]
>>972
C#だと、それほどでも無いだろ、Windowクラス生成して以上終了だし。
Win32使うと、激しいことになるけど

初代VS.NETには、CUIベースのわかりやすいサンプルが多かったんですけどね。
クイックスタートのサンプルもう一度復活させてもいいと思うんだけど・・・

974 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 20:13:39 ]
>GUI を根本からサポートしている言語を除けば、
だからな。
C# は GUI に力要れてるから問題ない。

975 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 20:20:50 ]
言語の勉強する場合、色んなロジックを書いて
その処理結果を簡単に出力出来るという点では、
コンソールの方が簡単でいいよね。

GUIだと、そもそものイベントドリブンの仕組みから
色んなコントロールの説明とかしなくちゃならないから。
いきなり、言語の学習の次のステップからになってしまう。

976 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 20:21:32 ]
下手な入門本でGUIだとすぐVSでポトペタだからなぁ。

977 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 20:24:32 ]
言語の勉強なら文字の入出力ができれば別になんでもいいわけで
一番手軽なのがコンソールっていうだけ
使う話とはまた別だ

978 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 20:39:27 ]
つまり言語の入門にはTcl/Tkが最も優れているということですね

979 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 20:41:44 ]
WinFormsなら初心者でも簡単だけど
WPFになるとXAML覚える方が大変なんじゃないか?w

980 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 20:59:23 ]
>>975
C#の場合それは問題多いだろ、開発環境が無ければ何故その機能があるのか、そうなっているのか理解できないものが大量にあるし。
たとえば、カスタムアトリビュートしかり、深いネームスペースしかりで。



981 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 21:57:09 ]
>>980
その反論の意味が全く分からないんだが。
では、GUIの方が入門者にとって、C♯"言語"の学習をし易いのか?

982 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 22:14:14 ]
つか、今の初心者つったら、CUI? command.com? 何ソレ?
だろ、そこから使用方法と説明が必要だ。

983 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 22:18:29 ]
いまどきの新人にパイプの説明したら一週間考え込まれた事があるw
そんなオレは、もうロートル入りだorz

984 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 22:24:29 ]
>>982
今の初心者はcmd.exeだからな

985 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 22:59:38 ]
.NET学習的にもPowerShellがvista標準じゃなかったのは痛いなぁ

986 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 23:06:46 ]
プログラミング Microsoft Visual C# 2005 言語編 (マイクロソフト公式解説書)
プログラミングC#―C#2.0/.NET2.0/Visual Studio2005対応(オライリー)

読むならどっち?

987 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 23:08:20 ]
オライリーの方。
Googleブック検索でないよう少し見てみたらよかったし「初めてのC#」もよかったから。

988 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 23:10:30 ]
そういえばC#使ってるけど未だに解説書の類を読んだ事がないな。
もう何でもpublicで作ってるしその内問題に遭ったりするんだろうか

989 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 23:16:40 ]
まだ俺2.0止まりでXAMLとか分からないんだけど、ASP.NETとかでやってるみたく
FormベースでXML使ってコントロールとか定義できる物ってことなの?

990 名前:954 mailto:sage [2008/03/22(土) 23:33:53 ]
>>989
使い始めて間もないのですが・・・簡単に説明すると
フラッシュみたいな物、htmlでいえば、imagタグとか適当にホームページ作成ツールで作って
それに名前を付けておいて、サイズや位置情報を、プログラム側からいじくれるという仕掛け。
各種タグで表示するオブジェクトには名前がつけられて、

その名前.アトリビュート名 = 適当な値

とすると、値が書き換えられて、表示が変化します。
Gridというタグがあって、これは各種オブジェクトを格納(子タグが作れる)、ここに自分で生成したオブジェクトを追加する事もできます。
基本的な要素には、LineとかPolyLineとか、DirectXで良く見られるプリミティブ要素のようなものがあって、ページ中に線やポリゴンなども書けます。
これに座標変換行列を効果させて、回転・拡大縮小・平行移動・平行四辺形的な変形といった事ができます。
最終的にはDirectXで描画されるらしく異様に高速。
大半はデザイナでデザインしておいて、必要な所だけをコードしてしまえます。
Paintイベントで再描画のコードは書く必要なしです。



991 名前:954 mailto:sage [2008/03/22(土) 23:41:12 ]
逆にDirectXが分るなら、メッシュの中にボタンやらラベルやらといったプリミティブがあるイメージかな?


992 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 23:47:13 ]
thx。そろそろ俺も3.0始めねば・・・。






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

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

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