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

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

前スレ

ふらっとC#,C♯,C#(初心者用) Part24
http://pc11.2ch.net/test/read.cgi/tech/1202028267/
2デフォルトの名無しさん:2008/02/27(水) 18:27:47
C#, C♯, C#相談室 Part45
http://pc11.2ch.net/test/read.cgi/tech/1200911737/

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

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

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

初心者のためのプログラミング言語ガイド Part7
http://pc11.2ch.net/test/read.cgi/tech/1200807067/
3デフォルトの名無しさん:2008/02/27(水) 18:30:26
>>950を踏んだ人は新スレを立てて下さい。
>>950が無理な場合、話し合って新スレ立てる人を決めて下さい。


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

4前962:2008/02/27(水) 18:43:58
>>前967
ありがとうございます。
どうしても同じスコープにするのは難しそうです、現状は大雑把なキャンセルということで満足しておくことにします
5デフォルトの名無しさん:2008/02/27(水) 18:45:13
>>1 乙。

>>前スレ998
わざわざ匿名メソッドとか使うまでもなく
OwnerForm.Invoke(new Action(OwnerForm.Show));
6前スレ998:2008/02/27(水) 18:59:49
>>5
たしかにその通りですねw
おかげでコードがシンプルになりました。
ありがとうございます。
7デフォルトの名無しさん:2008/02/27(水) 19:00:52
パネルのどこでダブルクリックをしても同じ動作をしたいのですが、
FlowLayoutPanel.MouseDoubleClickイベントは上に何も乗っていない場所でしか起きないようです。
上に載せたコントロール全てに同じイベントを設定してあげなければいけないのでしょうか?
それとも何かワザがあるのでしょうか?
8デフォルトの名無しさん:2008/02/27(水) 19:17:32
>>7
俺はそのワザというのがちょっと思いつかんけど、
俺だったらPanelの子コントロールコレクションをForeachでループして
一行イベント追加の構文書いて実現するね。
3行でいけるっしょ。

9デフォルトの名無しさん:2008/02/27(水) 19:21:06
>>8
!=7ですが面白い手ですね、自分は諦めてました
107:2008/02/27(水) 19:35:42
>>8
ありがとうございます。踏ん切りが付きました。
11デフォルトの名無しさん: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デフォルトの名無しさん:2008/02/27(水) 20:01:17
>>11
パフォーマンスの点ではstaticをつければ、パーマネント領域に移ってガベージコレクト対象から外れるのでいいかもね。
汎用性をとるなら、普通にメンバにしておいたほうがいいんじゃないかな。
自分は "クラス名.メソッド()" と書くとコードがシンプルになるらな迷わずstaticを選ぶね。
エントリーポイントは時に変更が必要不可欠になる事がある、そのときのために触らなくて済む限り触らない、綺麗なままにしておく。
1311:2008/02/27(水) 20:04:56
>>12
ありがとうございます。
主要処理部分をとりあえずstaticにしておくことにしました。
エントリポイントについては把握しました。
自分の場合Form1クラスを中心に他を操作するような感じでいけばいいわけですね
14デフォルトの名無しさん:2008/02/27(水) 20:28:00
staticにするとコントロールに触れないよ?
だからってコントロールもstaticにするとかアホなことするくらいなら迷わずインスタンスメソッドにする
1511:2008/02/27(水) 20:31:59
コントロールをstaticにすると何か問題があるのでしょうか?
まず最初にコントロールをstaticにしてましたorz
一応色々調整してうまく動いています
16デフォルトの名無しさん:2008/02/27(水) 20:40:21
デストラクタで全コントロールをDispose()すればいいんじゃね、と初心者が行ってみる
17デフォルトの名無しさん:2008/02/27(水) 20:48:41
>>15
>何か問題
コードの読み手(一ヵ月後の自分だってそうだ)を無意味に惑わすのが問題。

普通の能力の読み手なら「あえて」staticにしているのには何か意味があるはずだ、
と考えると思うんだが、実際には何の意味もない(あったら教えてくれ)ってのは
大問題でしょ。
18デフォルトの名無しさん:2008/02/27(水) 20:59:27
エスパーするとステータスバーだけpublic staticにするといい
19デフォルトの名無しさん:2008/02/27(水) 21:10:04
どう「いい」のかねw
20デフォルトの名無しさん:2008/02/27(水) 21:11:39
エスパーするとって書いてあるんだから馬鹿にするんだからどうエスパーしたかわかってるんだろうな、すごいなw
21デフォルトの名無しさん:2008/02/27(水) 21:16:28
>>16
コントロールをstaticにしてたらGCの対象から外れるからデストラクタが呼ばれない
22デフォルトの名無しさん:2008/02/27(水) 22:15:23
>前スレ992
2秒差で無茶ゆうなよw
23デフォルトの名無しさん:2008/02/27(水) 22:25:41
>前スレ992
こ れ は ひ ど い
24デフォルトの名無しさん:2008/02/27(水) 23:10:29
>>21
呼ばれるよ、アプリが終了する時までには。
実行中はガベコレの対象にならないというだけで、他にもこのパーマネント領域にはクラスのTypeのオブジェクト等がいる。
25デフォルトの名無しさん: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デフォルトの名無しさん:2008/02/27(水) 23:47:25
エクスプローラの左側みたいなデスクトップがルートのツリービューを作りたいんだけど
そういうコントロールって無いの?
TreeView使って自分で項目追加するしかないのかなあ。
27デフォルトの名無しさん:2008/02/28(木) 00:01:46
>>26
Microsoft.VisualBasic.Compatibility.VB6.DirListBoxとか、使った事無いけどそれっぽいの出るよ。
28デフォルトの名無しさん:2008/02/28(木) 00:09:57
>>25
var list = new[] {
new { Col1 = 10 , Col2 = "あ" } ,
new { Col1 = 20 , Col2 = "い" } ,
new { Col1 = 30 , Col2 = "う" } ,
}.ToList();

これでいいんじゃない?
29デフォルトの名無しさん:2008/02/28(木) 00:19:37
ひさびさにツールボックスの追加項目色々ながめてみたら結構色々よさげなの多いね
言語の壁を越えられるライブラリはすばらしい
30デフォルトの名無しさん:2008/02/28(木) 00:44:49
C/C++で言うところのstatic修飾されたローカル変数と同様の動作をするローカル変数を定義することはできないのでしょうか?
3126:2008/02/28(木) 00:45:25
>>27
うーん、見た目がなんか古臭いし、デスクトップがルートじゃないのも…
自分で作るしかないか。
シェルネームスペース関連のクラスって無いですよね?
その辺も整備しないといかんのか…
32デフォルトの名無しさん:2008/02/28(木) 00:46:31
>>30
静的メンバ変数じゃあかんのか?
33デフォルトの名無しさん:2008/02/28(木) 00:52:53
>>31
Com側も探してみたら、なんか色々あるよ。
もっともComインターフェイス系のクラスは、どれも表示できても使い勝手悪そうだけど……
34デフォルトの名無しさん:2008/02/28(木) 00:53:45
>>32
それでも実装できるんですが、一つのメソッドでしか使用しない変数なので他のメソッドにもスコープを広げるのはどうかと思いまして・・・
35デフォルトの名無しさん:2008/02/28(木) 00:57:56
>>34
privateしかないですね、C#は、というか.NETはリフレクションという機能があって、
自分自身のコードをプログラムから覗く機能があって、スコープ概念は実質ないというか使えません。
たとえば、あるクラスにどんな変数や関数があるのかプログラム中で一覧を列挙できるんですよ。
この機能はC++では、templateメタプログラミングで代用ですね。
36デフォルトの名無しさん:2008/02/28(木) 01:00:42
>>35
細かい解説ありがとうございます。privateメンバで実装したいと思います
37デフォルトの名無しさん:2008/02/28(木) 01:20:30
C++でもtemplateが絡むと static ローカル変数は怖いんだよ
Microsoft じゃない方の M の付く会社で作っている、なんとかリャーとかいうコンパイラは
型が違うなら別々のインスタンスにすべき所を纏めて一つだけとって重複バグをやらかしたりその反対やらかしたりと・・・
38デフォルトの名無しさん:2008/02/28(木) 09:10:50
エビフリャー?
39デフォルトの名無しさん:2008/02/28(木) 10:18:30
おんどりゃー!
40デフォルトの名無しさん:2008/02/28(木) 11:33:31
クロージャ使えばそれっぽいことできるよ
実質メソッドごとに内部クラス定義してるのと一緒だけど
41デフォルトの名無しさん:2008/02/28(木) 12:19:21
こう書くとwhileのループに捕まってしまう事があるのですが何か良い方法はありませんでしょうか?

WebBrowser wb = new WebBrowser();
wb.Navigate(uri);
while (wb.Url == null)
{
Thread.Sleep(1000);
Application.DoEvents();
}
42デフォルトの名無しさん:2008/02/28(木) 12:25:20
Navigated イベントとか使えよ
43デフォルトの名無しさん:2008/02/28(木) 12:31:58
今はイベントでやっているのですがイベント無しだと無理なのですね。
44デフォルトの名無しさん:2008/02/28(木) 12:35:39
イベント前提のフレームワークなんだから
45デフォルトの名無しさん:2008/02/28(木) 22:33:45
int a = 0;
a = a++;

ってやるとaの値が0のままなんだけど、これはどういう理屈?
C++だとインクリメントされた値になるんだが
46デフォルトの名無しさん:2008/02/28(木) 22:41:03
a = ++a;なら1になるのでは?
47デフォルトの名無しさん:2008/02/28(木) 22:44:32
馬鹿は黙っててください
48デフォルトの名無しさん:2008/02/28(木) 22:53:38
仕様に逆らって喜んでいる基地外に言われたくない
49デフォルトの名無しさん:2008/02/28(木) 22:59:55
は?
50デフォルトの名無しさん:2008/02/28(木) 23:04:04
a = a++;
右辺から評価されていく。
aをインクリメントし、式としてはインクリメントする前の値を返す。
すなわち
a = 0;
51デフォルトの名無しさん:2008/02/28(木) 23:06:54
今時こんなバカな話がでるとは
52デフォルトの名無しさん:2008/02/28(木) 23:31:31
C++とC#で挙動が違うって言うのはちょっと面白い。
53デフォルトの名無しさん:2008/02/28(木) 23:34:08
C++だと未定義で動作は処理系依存じゃなかったっけ?
54デフォルトの名無しさん:2008/02/29(金) 00:10:03
>>53
代入演算ですらそんな挙動するっけ?

確かに、x = f(a) + g(b) みたいなのは、f と g のどっちが先に呼ばれるか
未定義・処理系依存だったと思うけど。
C++ は思った以上に処理系依存動作多いもんなぁ。
55デフォルトの名無しさん:2008/02/29(金) 00:34:33
>>45
int a=0;
a++;

a=1
になるんですよ、クソガキ
56デフォルトの名無しさん: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デフォルトの名無しさん:2008/02/29(金) 08:10:41
>>57
そのスレッドはUIスレッドなのか?
そうじゃないならプライオリティを下げるのが常套。
60デフォルトの名無しさん:2008/02/29(金) 08:16:15
>>59
くわしく
61デフォルトの名無しさん: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デフォルトの名無しさん:2008/02/29(金) 11:33:56
参照
64デフォルトの名無しさん:2008/02/29(金) 11:36:01
構造体じゃなくてクラスを使う
65デフォルトの名無しさん:2008/02/29(金) 14:09:49
ListViewの背景をいろいろ描写したいと思って
OnPaintBackgroundを継承したのですが、
背景は描写されましたがアイテムが描写されません。
背景以外は普通に描画したいのですが。
6665: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);
}
}
6765: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デフォルトの名無しさん:2008/02/29(金) 14:23:36
>>65
OwnerDrawのときは
OnDrawItemやOnDrawSubItemで自前描画しないと駄目よ
base.OnDrawItem等を呼んでもなにもしてくれないよ
7065:2008/02/29(金) 14:35:03
>>69
そうなんだ。
e.DrawBackground()とかすればいいんですね。

となるとDrawDefaultはどういうときに使うんでしょう。
ネットに転がってるサンプルだとOwnerDraw = trueでも
e.DrawDefalt = trueしてそのままになってる。
71デフォルトの名無しさん:2008/02/29(金) 14:40:06
>>68
よくわかんないけど、ブルースクリーンになるのはディバイスドライバの障害だよ
どこかのドライバがバグっている。
72デフォルトの名無しさん:2008/02/29(金) 14:41:30
このListWiewを使うと、グラフィックソフトにレイヤー機能を持たせるのが簡単になりますか?
いまグラフィックソフトを作ってますが、レイヤーごとにGraphicオブジェクトを用意してそこへ描画してるんだけど、
管理が複雑になってしまって。
73デフォルトの名無しさん:2008/02/29(金) 15:02:23
>>72
フォトショップのレイヤーみたいなもの?
もしそれなら、自前で作ったほうが無難な予感がするな。
未来志向ならWPFという手もあるかもしれない、使った事無いけど。(←ぉぃぉぃ)
74デフォルトの名無しさん:2008/02/29(金) 15:04:20
(←ぉぃぉぃ)って何?
75デフォルトの名無しさん:2008/02/29(金) 15:04:53
Paint.NETのソースコードをパクれば
76デフォルトの名無しさん:2008/02/29(金) 15:05:15
自己突っ込みでつ
77デフォルトの名無しさん:2008/02/29(金) 15:15:03
http://pc11.2ch.net/test/read.cgi/tech/1162950198/l50
WPFあんまり流行ってないですね、チュートリアルビデオとかみるとスイスイ完成して気持ち良さそうなんですけど
リファクタリングが対応してくれればもうちょっとは使い勝手もましになりそうですが、次のVSに期待ですね。
78デフォルトの名無しさん:2008/02/29(金) 15:40:50
その辺よりデザイナを色々なんとかしてくれ。XAML養成ギブスとか
言われないぐらいには。

コード書いたら負けかなと思えるぐらいに柔軟なのはわかったから
79デフォルトの名無しさん:2008/02/29(金) 15:45:20
MS「ないものは自分で作ればいいお」
80デフォルトの名無しさん:2008/02/29(金) 15:55:37
listview.Items.Add("text").Name = "";
listview.Items[""].Selected = true;

これだとエラーになるのですね。
81デフォルトの名無しさん:2008/02/29(金) 23:36:22
Visual Studio2005の話なのですが、プロパティを作成すると
フォームのプロパティに表示されるものとされないものがあります。
表示されるものとされないものの違いがよくわからないので教えてもらえないでしょうか
82デフォルトの名無しさん:2008/02/29(金) 23:43:00
プロパティーの前に[BrowsableAttribute(false)]と書く
他にもいろいろあります、リンクの先へどうぞ。
http://www.microsoft.com/japan/msdn/net/general/pdc_vsdescmp.aspx
83デフォルトの名無しさん:2008/03/01(土) 02:14:19
>>82
悩んでいたのは操作方法ではなく追加方法なのですが、自己解決しました。
恥ずかしいことに継承せずにプロパティを追加するだけでプロパティブラウザに追加できると勘違いしておりました。
リンク先の内容を役立てることができそうです。ありがとうございました。
84デフォルトの名無しさん:2008/03/01(土) 17:30:13
C#3.0になってから var キーワードができましたが、ぱっと見た目で型がわからないので、不便なんですが・・・
コーディング中に簡単に型を知る便利なテクニックとかないですかね?

var instance = object.Method() ;
   ↑
   ここにマウスカーソルを置いたら型が分るとかだったら便利なんですけど・・・出ない
85デフォルトの名無しさん:2008/03/01(土) 17:31:05
>>84
VS 使ってるならそれで型分かるよ。

あと、個人的には右辺値から型が分かりにくいときはあんまり var 使いたくないなぁ。
86デフォルトの名無しさん:2008/03/01(土) 17:32:36
>>84
varの上
87デフォルトの名無しさん:2008/03/01(土) 17:39:45
>>86
しまった気付かなかった、そんな所に
88デフォルトの名無しさん:2008/03/01(土) 19:03:19
using System.IO;

DirectoryInfo info = new DirectoryInfo( @"C:\");
info.  ← ここで候補が出てこないのは何故?
89デフォルトの名無しさん:2008/03/01(土) 19:05:08
メソッド内じゃないからじゃね?
90デフォルトの名無しさん:2008/03/01(土) 19:16:14
>>89
お恥ずかしい・・・
91デフォルトの名無しさん:2008/03/01(土) 21:35:46
コンソールでベーマガ風のテキストベースのゲーム作ろうと思ったら
どういうクラス、API使えばいいの?
80x25の配列を用意して適当に着色して■Ωとか配置してキー入力を受け付けられればいいんだけど。
92デフォルトの名無しさん:2008/03/01(土) 21:40:52
Console
93デフォルトの名無しさん:2008/03/01(土) 21:49:38
いい加減静的型言語の悪癖から抜けろよ
varで分からなくなるってどんな変数名つけてんだよ
94デフォルトの名無しさん:2008/03/01(土) 23:07:21
クラスのFieldに番号を付けて、その番号のFieldを呼び出すってことがしたいのですが、
属性を作成してその属性に番号を格納してってことをしてみたところで、
属性の内容からFieldを取得する方法が分からず挫折してしまいました。

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

>>91
そりゃもう System.Drawing.Graphics を使って直書きしかないね、
普通に印刷したらプロポーショナルに美しく表示されてしまいますからw
詳しい説明いるかい?
必要なら追記しましょう。
96デフォルトの名無しさん:2008/03/01(土) 23:17:28
>>94
フィールド列挙してそれぞれの属性調べてく

でも属性でやる必要あるの?
インデックスを引数にとるメソッド一つ用意すればよくない?
97デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/01(土) 23:30:47
>>98
>>97 の GetField を GetFields にして、あとはアトリビュート検索して、所望のものがあったらそのフィールドに代入してくださいな。
フィールド名から代入方法が分らないなら、また書く。
100デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/01(土) 23:46:26
>>101
パフォーマンスはswitchの方が圧倒的に高いよ。
やり方しだいじゃありますが・・・
104デフォルトの名無しさん:2008/03/01(土) 23:47:30
フィールド100オーバーなクラスって・・・
105デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/01(土) 23:49:50
>>104
C#3.0になってから普通に作れそうだけどねwww
匿名クラス楽でいいわ
107デフォルトの名無しさん:2008/03/01(土) 23:57:54
>>102
すみません、よく理解できませんでしたのでswitch文にします。

>>104
>>105
すみません、フィールドの種類・名前は先に与えられていて、
そこはいじれないもので。
108デフォルトの名無しさん:2008/03/02(日) 00:00:03
とりあえず

field.SetValue(instance, value);

探してるのはこれじゃないの?
109102:2008/03/02(日) 00:00:55
>>107
ゆっり憶えればよろしい、まずは今できる方法じゃ
110デフォルトの名無しさん:2008/03/02(日) 00:01:48
100オーバーのフィールドに属性つけてく方が大変だしな
111102:2008/03/02(日) 00:02:42
>>110
100オーバーのスイッチ文とか考えたくも無いけどなwww
112デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/02(日) 00:13:45
>>112
GetFieldsの返す順を信頼できるあなたが素敵☆
114デフォルトの名無しさん:2008/03/02(日) 00:14:41
俺が試した限りではフィールドの宣言順は保持されてたけど
よく知らんな
115デフォルトの名無しさん:2008/03/02(日) 00:15:43
保障されているものじゃないから利用すべきじゃないな
116デフォルトの名無しさん:2008/03/02(日) 00:16:10
まぁ無保証だろうな、変わることもなさそうに思えるけど。
117デフォルトの名無しさん:2008/03/02(日) 00:16:19
で、Releaseビルドで裏切られるとw
118デフォルトの名無しさん:2008/03/02(日) 00:16:54
しかし一個一個属性つけるくらいならswitchも何も使わずに直接代入してった方が早いぞ
119デフォルトの名無しさん:2008/03/02(日) 00:17:42
※このソースをReleaseビルドするのはやめてください
120デフォルトの名無しさん:2008/03/02(日) 00:19:50
>>118
エクセルで一覧作っといて、あとで叩き込むとか結構俺は便利につかってるぞ
せっかくC#がJavaとの差別化として実装した自慢の機能なんだから利用してやらにゃ損
121デフォルトの名無しさん:2008/03/02(日) 00:21:46
>>108
それがわかっただけでも聞いてみたかいがありました。
ありがとうございます。

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


他のみなさまも親身な回答をありがとうございました。
また詰まったら頼らせてください。
122デフォルトの名無しさん:2008/03/02(日) 00:22:48
フィールドが100オーバーだろ
ソースコード生成するのが早いか、手作業でやるのが早いか悩むところだな
123デフォルトの名無しさん:2008/03/02(日) 00:26:52
>>122
そこでCodeDOMですよ、自己生成自己コンパイル自己実行www
124デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/02(日) 00:35:33
>>125
VBとか、その他で省略能力のある言語との連携があるなら
使う側で対処する
func( out Type.Missing , ref data ) ;
といった感じ、Type.Missingが省略の意味。
C#オンリーなら素直にメソッド分けよう。
127デフォルトの名無しさん:2008/03/02(日) 00:36:30
あっ、いかんこのケースでは使えんかった
128デフォルトの名無しさん:2008/03/02(日) 00:37:31
あっ、いかんこのケースでは使えんかった、は 126 の事。
129デフォルトの名無しさん:2008/03/02(日) 00:42:27
あれ、安価みすっとる 126 のアンカは >>124 ね、
130デフォルトの名無しさん:2008/03/02(日) 00:45:37
class Result
{
public int A;
public hoge hoge;
}

Result func(ref int b)
Result func()

こうかな
131124:2008/03/02(日) 01:00:40
メソッド名変えた方が良さそうですね。
ありがとうございました。
132102: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>();
133102: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];
  }
134102: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("指定のインデックスの設定されたフィールドが存在しなかった");
    }
  }
}
135102:2008/03/02(日) 02:43:17
public class FieldIndexerAttribute : System.Attribute
{
  public int Index { get;set;}
  public FieldIndexerAttribute(int index) { Index = index; }
};
ここまでで、ライブラリ化する。
136102: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デフォルトの名無しさん:2008/03/02(日) 10:37:00
プロジェクトフォルダを見てみたらコンパイルの中間ファイルのようなものが見あたりません
コンパイルの度にプロジェクトに含まれる全ての.csをコンパイルしているのでしょうか?
それともどこか別の場所に置いてあるのでしょうか?

プロジェクトが大きくなってきてコンパイル時間が気になり始めたので
もし全てリコンパイルしているならdllに分割しようかと思っています。
138デフォルトの名無しさん:2008/03/02(日) 10:40:51
中間ファイルなんて基本存在しない
ので適切にDLLに分ける
139デフォルトの名無しさん:2008/03/02(日) 10:41:43
Generic使えばもっとシンプルになりそうだな。
ディクショナリじゃなくて配列で十分そうだな。
あとほんとはハンドルだけ保持しとくほうがいいかもな。

140デフォルトの名無しさん:2008/03/02(日) 10:55:10
中間ファイルはどっかにあるだろ
知らんけど
dll分けると余計に時間がかかる
しかし設計としてはどんどん分けた方がいい
依存関係が強制されinternalが有効に使える
141デフォルトの名無しさん:2008/03/02(日) 11:03:27
>>139
おっと、インデックスが好きに付けられるなら配列はやっぱまずいか…
142デフォルトの名無しさん:2008/03/02(日) 11:09:12
>>102さん
ありがとうございます。
ぜひ使わせていただきます。
143デフォルトの名無しさん:2008/03/02(日) 11:15:31
>>140
ソースファイルには無い リソースやxamlにはあるけど
/obj/xxxにも直接アセンブリが作られる
もちろんソースその他に変更の無いアセンブリはコンパイル対象にならない
144デフォルトの名無しさん:2008/03/02(日) 12:13:00
全部をコンパイルしなおすなんてそんな馬鹿なことをするわけがないだろう
中間ファイルが見当たらないことからそんな結論が導かれるわけがない
145デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/02(日) 13:32:28
構造体にまとめといてunsafeでbyte[]から無理矢理代入すればいいんじゃね
147デフォルトの名無しさん:2008/03/02(日) 13:49:11
C#ってなんでビットフィールドないの?
148デフォルトの名無しさん:2008/03/02(日) 13:50:44
BitArrayで我慢してください
つかいらんだろあんなの
149デフォルトの名無しさん:2008/03/02(日) 13:52:22
あとBitVector32
150デフォルトの名無しさん:2008/03/02(日) 13:54:50
ビットフィールドと共用体便利だったのになー
151デフォルトの名無しさん:2008/03/02(日) 13:58:27
>>147 >>150
プロセッサ非依存の.NETでは避けた方がいい、ビッグエンディアンで大変な事態に陥るから。
安易な実装事故の元
152デフォルトの名無しさん:2008/03/02(日) 14:00:40
初心者なんですが実際のソフトウェア開発なんかでビット単位で何かを扱うなんてことあるんですか?
どんな場合に使うかちょっと想像できないでいます
153デフォルトの名無しさん:2008/03/02(日) 14:05:02
>>152
いろいろある、データ圧縮では定番のテクニックの一つ
154152:2008/03/02(日) 14:06:40
データ圧縮ですか…ということは限定的なソフトウェアに限る、のかな
155デフォルトの名無しさん:2008/03/02(日) 14:07:10
アーカイバならC#で作らんだろう
156デフォルトの名無しさん:2008/03/02(日) 14:08:59
>>155
#ZipLibを馬鹿にしたな!?
157デフォルトの名無しさん:2008/03/02(日) 14:13:48
DGCAが気になってる最近
158デフォルトの名無しさん:2008/03/02(日) 14:14:17
でも、MSIL上でビット単位の処理できても嬉しくないよね
消費リソースを抑えたいなら、結局はそこだけnativeにする形になるし
159デフォルトの名無しさん:2008/03/02(日) 14:14:48
>>152
ネットワークプログラミングやバイナリファイルの読み込みではビットオーダーに気をつけないといけないね。
160デフォルトの名無しさん:2008/03/02(日) 14:15:43
自分で作ったクラスライブラリのファイルを複数のプロジェクトで利用する事は出来ないのでしょうか?。
プロジェクト毎にコピーされるのではなく1つのクラスライブラリファイルを複数のプロジェクトで共有したい。
161デフォルトの名無しさん:2008/03/02(日) 14:17:42
>>158
環境非依存ビットストリームライブラリは欲しいと思うけど、なおnativeは今後の事を考えると問題を引き起こす可能性が高いから止めるべき。
そもそもCom相互運用では処理速度が低下してかえって良くない状態に陥る。
162デフォルトの名無しさん:2008/03/02(日) 14:19:27
>>160
普通にできるよ、追加のところのメニューをくまなく探す
163デフォルトの名無しさん:2008/03/02(日) 14:25:39
>>160
聞く前に検索くらいしろよ。一発で出てきたぞ
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/596vssharelinkfile/vssharelinkfile.html
164デフォルトの名無しさん:2008/03/02(日) 14:37:00
>>162-163
ありがとうございます。追加ボタンの横にある矢印に気付きませんでした。
165デフォルトの名無しさん:2008/03/02(日) 14:37:05
まあ、新興の言語だとビットフィールドを採用しない傾向にあるからね。
intrinsicなビット操作命令は持ってたりするけど。
166デフォルトの名無しさん:2008/03/02(日) 15:03:15
自作板のAHCIスレから来ました。

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

何か書き換えるためのプログラムが必要なんでしょうか。
167デフォルトの名無しさん:2008/03/02(日) 15:06:54
スレ違いだコマンドラインでググれ低能
168デフォルトの名無しさん:2008/03/02(日) 15:08:17
>>152
GUIの設定(ラジオボタン)とかはよくビットでデータ持つよ
169デフォルトの名無しさん:2008/03/02(日) 15:09:57
>>168
あー、チェックが入ってるか否かを0と1でって感じでしょうか?
bool型とかにしてもそんな問題ない気はするけど実際はそういう話でもないのかな
170デフォルトの名無しさん:2008/03/02(日) 15:13:18
>>169
boolで一つ一つ持つよりも、ビットでまとめて
マスク処理とかした方が分岐させやすい
171デフォルトの名無しさん:2008/03/02(日) 15:16:14
>>167
コマンドラインですか><
了解しますた。
172デフォルトの名無しさん:2008/03/02(日) 15:33:45
iata75_cd.exeでぐぐるとあら不思議w
173デフォルトの名無しさん:2008/03/02(日) 15:34:23
盛大なマルチだな
174102: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; }
};
175102: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);
      }
    }
  }
176102: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デフォルトの名無しさん:2008/03/03(月) 07:10:05
マルチスレッド云々ならば性的コンストラクタ使えばいいじゃん
178デフォルトの名無しさん:2008/03/03(月) 10:24:34
>>170
どんな手順か教えてちょ
179デフォルトの名無しさん:2008/03/03(月) 11:35:54
C#ってswitch文でbreakかかなくてもだーっと全部実行されないの?
180デフォルトの名無しさん:2008/03/03(月) 11:43:27
関数ポインタ使えないだけですごい構文崩れるなぁ
181デフォルトの名無しさん:2008/03/03(月) 11:53:38
>>179
そもそもコンパイルエラー
182デフォルトの名無しさん:2008/03/03(月) 11:53:55
>>179
フォールスルーしたいなら明示的にgoto
caseラベル間が空白でない場合は、break/return/gotoが必要
183デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/03(月) 13:12:48
おまえら、そんなにC#でビットマスク使いたいなら、すなおに System.FlagsAttribute を適用した enum 使えゴラー
http://msdn2.microsoft.com/ja-jp/library/sbbt4032(VS.80).aspx
186デフォルトの名無しさん:2008/03/03(月) 13:38:10
>>184
なんで148?
187デフォルトの名無しさん:2008/03/03(月) 13:44:28
LINQのある今、ビット操作類もここに統合すると便利かもしれないな
bitvector.All() 指定のビットすべてについて true なら true
bitvector.Any() 指定のビットのなかに true なものがあれば true
はるかに柔軟性があるし。
188デフォルトの名無しさん:2008/03/03(月) 13:45:06
そんくらい自分で
189デフォルトの名無しさん:2008/03/03(月) 13:49:22
>>186
2進数だろカス
190デフォルトの名無しさん:2008/03/03(月) 14:03:49
>>187
BitArrayならOfType<bool>通せば可能だよ
列挙体やBitVectorにも拡張メソッド付けて
flag.ToEnumerable().Anyとかできるようにしたら面白いかもね
191デフォルトの名無しさん:2008/03/03(月) 16:43:20
ひとつのクラスで何行以上はよろしくないみたいなのはありますか?
192デフォルトの名無しさん:2008/03/03(月) 16:48:08
>>191
ない
193デフォルトの名無しさん:2008/03/03(月) 16:56:34
なるほど、ないんですかー
今色々試してみてるところで、ちょこっと場当たり的に作ってみたのですが
1つのクラスは2000行ほどなのに対してもうひとつが200行弱ほどで、その2つのみなのでどうも不自然に感じていたようです
194デフォルトの名無しさん:2008/03/03(月) 17:02:30
あんまり長いのは常識的によろしくないから気になるんだったら切ればいい
195デフォルトの名無しさん:2008/03/03(月) 17:05:43
切るっていうのはpartialってことではないですよね

主要処理部分のswitchが厄介だしここを別クラスにすべきっぽいかな…
ありがとうございました
196102:2008/03/03(月) 17:20:58
適当に長そうなところを、マウスでにるにるっと選択して
右クリック→リファクタ→メソッドの抽出
ってやればいいんだよ
197デフォルトの名無しさん:2008/03/03(月) 17:22:20
その機能はしってるんだけれども抽出してどうするんだろう
198デフォルトの名無しさん:2008/03/03(月) 17:24:04
最近namespaceを
namespace ソリューション名.Properties
にしているんですが
namespace ソリューション名
と違いはあるんでしょうか、普通にやると下になってそれがデフォルトのようですが
199102:2008/03/03(月) 17:25:39
>>198
こらー、何処にいれちょるかー
そこは、アプリケーションプロパティーの居るべき場所じゃー
200デフォルトの名無しさん:2008/03/03(月) 17:26:27
まあ名前空間はほんとにただの名前だからどうでもいいといえばどうでもいい
201198:2008/03/03(月) 17:30:31
最初はソリューション名だけだったけどなぜか途中から切り替えました
たしかコードか何か新規項目を追加したときかな

で、今戻したらエラーが、Propertiesでいいや
202デフォルトの名無しさん:2008/03/03(月) 20:22:54
Enum.GetValuesで得られる値の配列と,
Enum.GetNamesで得られる名前の配列の
要素の順番の対応は保障されてるの?
203デフォルトの名無しさん:2008/03/03(月) 20:38:06
されてるって書かれてなかったっけ?
204デフォルトの名無しさん:2008/03/03(月) 21:43:45
されないよ
同値異名が可能なことを考えれば明らか
205デフォルトの名無しさん:2008/03/03(月) 21:48:21
>>203
謎の日本語だけれど、期待するなと書かれているように受け止められますな

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


206デフォルトの名無しさん:2008/03/03(月) 22:07:43
保障も何もどういう順序づけしていいかわかんないだろ
207デフォルトの名無しさん:2008/03/03(月) 22:51:40
enum Hoge
{
A = 4,
B = 3
}

こんなん書けたよな
208デフォルトの名無しさん: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への書き込みを行ってるのですが、
http://jeanne.wankuma.com/tips/programing/releasecom.html
このソースコードでExcelの解放が出来たのですが、書き込みをする為に

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

この上記の一行を入れたら解放されなくなりました。
何が原因なのでしょうか??
もしくは上記以外でExcelに書き込んで保存する方法はあるのでしょうか?
211デフォルトの名無しさん:2008/03/03(月) 23:11:11
210です!
問題解決しました!!!!!
212デフォルトの名無しさん:2008/03/03(月) 23:11:35
CellsもCOMオブジェクト返すんじゃなかったっけ
213デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/03(月) 23:35:33
もう、GC.Collect(); GC.WaitForPendingFinalizers();でいいよ
218デフォルトの名無しさん:2008/03/03(月) 23:41:22
なんで同じロジックで解放したりしなかったりするんだろうか・・・
219デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/04(火) 00:00:21
a1も漏れる気がするけど?
225デフォルトの名無しさん:2008/03/04(火) 00:01:27
a1はRangeでa2もRange。
226デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/04(火) 00:33:15
COMラッパの開放漏れをなくすのには限度があるから、諦めれ
229デフォルトの名無しさん:2008/03/04(火) 00:33:27
ws.Cellsと言った時点でリファレンスカウントが1進むんじゃないの?
だからReleaseComObject(ws.Cells)は、増やして減らして意味ない
文かなーと思ったけど
230デフォルトの名無しさん:2008/03/04(火) 00:35:44
>>229
RCWの参照とCOMの参照カウンタは別。
RCW、つまりマネージ参照をいくらコピーしてもCOMの参照カウンタは増えない。
231デフォルトの名無しさん:2008/03/04(火) 00:38:41
ReleaseComObject(ws.Cells)
は新しいCOMオブジェクトを取ってきてそれを開放するから意味がないだろ。
232デフォルトの名無しさん:2008/03/04(火) 00:39:39
ws.Cellsは同じオブジェクトを返してくれるの?
ExcelのCOMを経由して、あたらしいオブジェクトが2つ、3つとできるんでなくて?
233デフォルトの名無しさん:2008/03/04(火) 00:41:12
234デフォルトの名無しさん:2008/03/04(火) 00:45:36
ExcelのCOMインターフェイスはExcelマクロ(VBAやそれに準じるDLLなど)のための機能で
外部の独立したプロセスからExcelを操作することを意図して作られていない。
VSTOもそういう設計思想。
235デフォルトの名無しさん:2008/03/04(火) 00:50:06
というより単に.NETとCOMの相性が悪い点が見事に現れただけではないの?
236デフォルトの名無しさん:2008/03/04(火) 00:54:02
デストラクタでReleaseComObjectするラッパ被せてusing使うと大分ましにはなるけど、それでも汚いな
237デフォルトの名無しさん:2008/03/04(火) 00:55:07
Office.Netマダー?
238デフォルトの名無しさん:2008/03/04(火) 00:59:00
ふつーのGCみたいに消極追跡(使われていないかを調査)じゃなくて
積極追跡(Excel.Applicationから生み出されたRCWすべてのweakrefリストとか)して
まとめてあぼーん、みたいにはできないものかね?
 まあ、COM一般を対象にするならイマイチつかえない、Office用途な使い方になるけど。
239デフォルトの名無しさん:2008/03/04(火) 01:05:53
タイプライブラリから生成されるアセンブリに手を加えれば出来ると思うよ。
240デフォルトの名無しさん:2008/03/04(火) 02:41:38
こんなコード書くくらいならGCにやってもらう方を選ぶね
241デフォルトの名無しさん:2008/03/04(火) 07:36:08
Comが入り込む場合は、出来る限り開放したら、あとはガベージコレクタを無難なタイミングで起動して解放するほうがいいような気がします。
自分はなんとなく全部書ききってしまってますけど・・・
242デフォルトの名無しさん:2008/03/04(火) 07:38:03
243デフォルトの名無しさん:2008/03/04(火) 08:26:26
なあに?
244デフォルトの名無しさん:2008/03/04(火) 08:30:22
>>174
フィールドハンドルを保持しといて、必要になった時点で
フィールドインフォを取得するやり方のこと。
まあ必ずしもやる必要はないし、
単純な速度的にはやらない方が有利だけどね。
245デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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で

今の処理.やること()

みたいにすればすっきりするんじゃね?
252247: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デフォルトの名無しさん:2008/03/04(火) 11:16:16
明示的にcatch{}ってしなくていんじゃないの、その例なら
254デフォルトの名無しさん:2008/03/04(火) 11:26:18
catch{}はしなきゃだめだっての
continueはいらんっちゃいらんけど
255デフォルトの名無しさん:2008/03/04(火) 11:28:46
まあcontinueって書いてても悪くないと思うけどな
256デフォルトの名無しさん:2008/03/04(火) 11:36:53
MSDNに書いてある例外くらいは事前にチェックして発生させないようにしとくべきだろ
キャッチはどっちみち必要だけど
257デフォルトの名無しさん: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に
とんでっちゃうわけで…。
262102:2008/03/04(火) 18:54:07
>>244
すみません、後学のために教えていただけますでしょうか、フィールドハンドルって何ですか?
知らない知識がまだまだあるみたいです……
263デフォルトの名無しさん:2008/03/04(火) 18:56:19
>>258
なんでそういう解釈されたか意味不明
264デフォルトの名無しさん:2008/03/04(火) 18:59:05
>>263
ちゃんとレス辿ってないだけでしょ、彼が
265デフォルトの名無しさん:2008/03/04(火) 21:30:42
すみません、プログラミング自体の経験は過去にDelphiを少し触って挫折したような者です。
しかし、ひとつ作ってみたいプログラムのアイディアが浮かんだので、
これからC#で作ろうかと思っているのですが、なかなか指針すら立ちません。
どのような設計をすればよいのかアドバイスをお願いいたします。

何を作るのかというと、睡眠日誌というものがあるのですが・・・↓
ttp://www.kaimin.info/part/pdf/nisshi.pdf
これを実現するようなアプリを作りたいのです。どうすればよいでしょうか?
266デフォルトの名無しさん:2008/03/04(火) 21:42:03
睡眠障害のある俺にぴったりじゃないか。
作るかな。
ネタ提供サンクス。
267デフォルトの名無しさん:2008/03/04(火) 22:00:08
>>265
まず書いて動かすこと
動かせる範囲のものを書くこと
はじめからちゃんとしたものを作ろうとしないで一部分だけでいいからちゃんと動かす
うまく行かなくなったら何度も書き直す
それがうまくやるコツ
268265:2008/03/04(火) 22:02:27
>>266
なんとありがたい!
あまり突っ込むとスレ違いになりますが、私自身過眠症で必要に迫られてのことで。ぜひともお願いいたします。
後学のため、よろしければどのような感じで作るかの指針をお教えいただけませんでしょうか?
269265:2008/03/04(火) 22:06:56
>>267
なるほど。一度イメージするUIを紙に書いて、
自分なりにどの部位からコード化していけそうか考えてみます。
アドバイスありがとうございます。
270デフォルトの名無しさん:2008/03/04(火) 22:37:48
>>264

いや、逆にcontinue書かなきゃいけない理由が知りたいですけど
271デフォルトの名無しさん:2008/03/04(火) 22:44:54
>>270
むしろ後に何か書き加える場合にcontinueがないとぶっ壊れるだろ
形としてはここにcontinueがあるべきで、今必要ないからといって
削除しなきゃならないというものでもない
272デフォルトの名無しさん:2008/03/04(火) 22:46:10
public bool IsMarked(object obj)
{
// この部分
}

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

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

みたいなことができれば満足です。
詳しい方がたくさんおられるようなので、宜しくお願い致します。
273デフォルトの名無しさん:2008/03/04(火) 22:47:45
過眠症なんて病気があるんだw
なんか最近の医者って新しい病気作るのに必死だよな。
274デフォルトの名無しさん:2008/03/04(火) 22:48:30
>>272
それは属性の使い方が間違ってる
275デフォルトの名無しさん:2008/03/04(火) 22:59:11
属性はインスタンスには付かないぜ
276デフォルトの名無しさん:2008/03/04(火) 23:11:27
>>274
>>275
ありがとうございます。
納得しました。
277デフォルトの名無しさん:2008/03/05(水) 00:28:15
>>271
> むしろ後に何か書き加える場合にcontinueがないとぶっ壊れるだろ
追加実装の場合は、単なるコーディングミスだろ・・・

> 形としてはここにcontinueがあるべきで
ないべき。
使用しない、意味の無いコードは書いてあっても利益にならない。
なんで使わない変数とかが警告出るか考えろよ。
278デフォルトの名無しさん:2008/03/05(水) 00:29:56
じゃあifの中が一行しかないのに{}でくくってあったら消すのか?
279デフォルトの名無しさん:2008/03/05(水) 00:35:35
>>278
ちゃんとレス読んでから書け、読んでてそれなら半年ROMれ。
>>247だとfor文の最終行にcontinueつけてんのと同じ事。
280デフォルトの名無しさん:2008/03/05(水) 00:44:46
>>279
同じことだろうが
実行結果に関わらない、単に無駄なだけのコードだ
それに意味があると考えるか考えないかはお前の主観でしかない
ifを{}にいれておくのが望ましいといわれるのは、そこに何か追加することがあるからだ
あのコードは下に追加される可能性が大いにある
その意味ではあのcontinueには意味がある
elseがいらなくてもelseと書いた方が分かりやすいこともある
ケースバイケースだ

それはそれとしてC#ではfor文の最後にcontinueを書かなきゃならなくなることもよくあるぞ
281デフォルトの名無しさん:2008/03/05(水) 00:47:14
>それはそれとしてC#ではfor文の最後にcontinueを書かなきゃならなくなることもよくあるぞ
いいえ
282デフォルトの名無しさん:2008/03/05(水) 00:48:41
静的コンストラクタが呼ばれるのは

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

と書いてありますが、複数スレッドから同時にアクセスした場合でも正常に動作するのでしょうか?
283デフォルトの名無しさん:2008/03/05(水) 00:49:32
gotoのラベルがfor文の最後に来る場合、ラベルの下にcontinueを書く必要がある
なんでそうなってるのかといえばラベルがforの最後にあるより、その下にcontinueがあったほうが
意味がはっきりするからだろう
284デフォルトの名無しさん:2008/03/05(水) 00:52:24
>>280
bool flg = false;
if (flg) {
} else {
 ・・・
}
こんなコード書いちゃう人?
285デフォルトの名無しさん:2008/03/05(水) 00:54:13
>>284
それはわかりにくいだろう
if(flg == false)
と俺は書くな
286デフォルトの名無しさん:2008/03/05(水) 01:11:51
俺なら
if ( ! flg ) {
//・・・
}
って書くぜ。
っていうかたまに flg == false とか flg == true って書き方みるけど変じゃね?
287デフォルトの名無しさん:2008/03/05(水) 01:18:00
if(flg == false)は
普通に左から読んでいけば
もしフラグがfalseならば、
と読める
!flgは頭の中で変換しなきゃならない
flgがよっぽど何のことか分からない名前でなければ==trueとも書かないな
しかし変数名がflgだったら==trueと書くかもしれない
288デフォルトの名無しさん:2008/03/05(水) 01:32:30
!flg程度で頭動かさなきゃならんのは駄目だろ
289デフォルトの名無しさん:2008/03/05(水) 02:21:11
>>271

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

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

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

だと思ってましたが、違いましたっけ?
290デフォルトの名無しさん:2008/03/05(水) 02:30:41
>>289
何を言っているのか分からないが
後に書き加えた何かは、例外で失敗した後には実行されないものだ
そしてそれはtryブロックの後ろに配置されるべきものだ
全部をtryで囲んで全てをキャッチするというのは悪いコーディングだ
291デフォルトの名無しさん:2008/03/05(水) 02:32:26
>>289
もう相手すんな
292デフォルトの名無しさん:2008/03/05(水) 02:48:52
>>283
}の直前など、対応するコードの無い部分にラベル付けられないからだろ
どうしてもラベル付けたいなら、普通は空ステートメントを書く

>>284-288
if(flg == true)と書くやつは、何故if((flg == true) == true)あるいは
if((((flg == true) == true) == true) == true)と書かないのか
という指摘を見たことがあるな
293デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/05(水) 03:02:52
flgっつう名前が悪いだろ

bool isHogehoge
なら

if( isHogehoge )

と書いても違和感はない
296デフォルトの名無しさん:2008/03/05(水) 03:09:48
>>294
それでは例外で失敗しなかった後に実行された文で起こった例外まで無差別にキャッチする
それはバグを握りつぶしてしまう
よくないコーディングだ
297デフォルトの名無しさん:2008/03/05(水) 03:35:54
continue より flg の話が気になるな
まず flg という名前が論外で、if ... の ... に配置して意味が通るような名前を付けて、flg==true だの flg==false だのは今すぐ止めるべきと思うな
それが「プログラムにとって大事なのは意味が伝わりやすいこと」になるんだと思うよ。
298293:2008/03/05(水) 03:39:42
>>297
全く同感だ
299デフォルトの名無しさん:2008/03/05(水) 03:40:54
>プログラムにとって大事なのは意味が伝わりやすいことであり
>文の量が最小になることではない
まったくもって同感だが、ロジックの複雑さは最小にすべきだ。
300292:2008/03/05(水) 04:36:35
>>293
continueを書くかどうかは好みの問題だから議論する気はないが、
「continueと書かせるため」というのは誤解を招くので

ラベルの後にステートメントが必須なのはC++からで、
一応、仕様ではlabeled statementということになっている
単にラベル単独では存在し得ないというだけのこと
301デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/05(水) 06:48:34
ifでの条件文の書き方についてのノウハウはCとC#で違うから混同すると議論が噛み合わない。
C++には論理型があるがCとの互換のために穴だらけだから結局Cと同じになる。
一方C#のifには条件文しかかけないし、論理型は単独で条件文たりえる。
304デフォルトの名無しさん:2008/03/05(水) 07:05:06
>>302
EditingControlShowing とか
305デフォルトの名無しさん:2008/03/05(水) 07:49:18
文字列をデータとしてファイルに保存してあとで読み込みたいと思っています。
文字列の構成は、9つの行と、行数不定の項目です。
その構成を一つのかたまりとしてたくさん扱いたいのですが、どうしたらいいんでしょうか?
306デフォルトの名無しさん:2008/03/05(水) 08:23:00
C#というのはどういった場面で使われるんでしょうか?Windows環境で動くソフトウェア全般だとは思うのですが
実際本職の方達はC/C++ベースで作ってそうですし

いまいちピンとこないです
307デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/05(水) 09:40:47
>>262
RuntimeFieldHandle
フィールドを一意に識別出来るハンドル。
識別という意味では、FieldInfoに1対1で対応している。
RuntimeFieldHandleとFieldInfoは相互に取り出すことが出来る。

FieldInfoなどのオブジェクトはサイズが大きいため、
常に使い続ける必要がないものはRuntimeFieldHandleで保持しておき、
実際に必要になった時点でRuntimeFieldHandleからFieldInfoを取得する。
こうするとFieldInfoがGC対象となり、頻繁に使われないものはメモリを占有しなくなる。
310デフォルトの名無しさん:2008/03/05(水) 10:25:56
>>306
いやいや、中小企業で使ってる業務システムには、VisualBasicが多いよ
Cで組んだシステムの方が珍しい。
大企業みたく開発費をかけたくないし、開発期間も短くしたいし、保守性を容易にしたいし、
負荷も少ないしリアルタイム性も求められない用途は多いから。
C#はVisualBasicよりいいし、そういう方面にも使われる
311デフォルトの名無しさん:2008/03/05(水) 10:34:38
>>307
>>310
なるほど…
来年度から就職でして、使うのかなぁといった感じで質問しました。
C/C++をやりつつC#に手出してて最近はWinAPI関連の本買って手出し始めたので
ちょっと気になりました、ありがとう

312デフォルトの名無しさん:2008/03/05(水) 10:35:48
どんな分野?それによるからなぁ、逆に低級言語ばっか使うとこもあるし
313デフォルトの名無しさん:2008/03/05(水) 10:38:04
>>312
そこら辺が明確に教えてもらえてなくって(使う言語とか)
一応エンジニア業と営業のそれを両方出来る人材を…って感じで募集されてて
会社自体は自動車会社のシステム部門です
314デフォルトの名無しさん:2008/03/05(水) 10:39:17
お前らそういう話大好きだな
315デフォルトの名無しさん:2008/03/05(水) 10:53:19
>>313
だったら、営業の顧客管理表をC#でちゃちゃっと作ったり
(たいてい、個人が自分の机のPCでエクセルでちまちまやってるから、
活用するときに面倒だったり、顧客表の流出する可能性があったり、
各営業間で共有が出来てなかったり等々。システムを作れば、
顧客の誕生日一週間前にポップアップさせてみたり、
車検前や12ヶ月点検前にポップアップさせてみたり、いろんな活用も出来る)。
また、営業所とエンジニア部門とをLANで結んだ連絡システムを作ったりにも使えるだろ。
stand-aloneなシステムを手早く作るのにも、
離れた部門をLAN経由で結んだシステムにも、C#は向いているし。
316デフォルトの名無しさん:2008/03/05(水) 11:02:40
文字列に指定の引用符を付けたり(Quote)、外したりする(Dequote)メソッドはないでしょうか?
317デフォルトの名無しさん:2008/03/05(水) 11:11:46
>>316
ごめ質問が理解できないので具体例をあげて

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

319デフォルトの名無しさん:2008/03/05(水) 11:25:02
class = new class();
このclassに後から変数を追加するなんて暴挙はできないでしょうか?。
320デフォルトの名無しさん:2008/03/05(水) 11:33:26
>>318
それくらい自分で作れば

>>319
無理
classのオブジェクトをキーにしたDictionary使うとか
321デフォルトの名無しさん:2008/03/05(水) 11:57:01
初めまして。
C# 2008 Expressを使ってます。
OpenFileDialogで、画像を選択した際にdialogのウィンドーにプレビュー画像を表示したいのですが、
いったいどうすればいいのでしょうか。
322デフォルトの名無しさん: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);

としてもシールドアイコンが表示されません。
何か間違ってるのでしょうか?
324321:2008/03/05(水) 12:05:32
追加でごめんなさい。
↑の件ですが、「縮小版」ではなく、クリックしたときにパッと表示してほしいんです。

あと、openFileDialogには大きさのプロパティがありませんが、
実行時にはマウスでドラッグして大きさが変えられますよね。
プログラム上で自動で変更できるんでしょうか。
325デフォルトの名無しさん:2008/03/05(水) 13:10:17
>>307
ありがとうございます。
XmlSerializeでなんとか出来そうです。
326デフォルトの名無しさん:2008/03/05(水) 13:29:52
>>321>>324
つまり、OpenFileDialogを拡張したいということだろ
結論から言うと、Win32API使わないと無理
cf. ttp://msdn2.microsoft.com/en-us/library/ms996463.aspx
327デフォルトの名無しさん:2008/03/05(水) 13:34:58
試しに>>174をDynamicMethodでif…else if…相当のコードを生成して
毎回リフレクションを使わないようにしてみたら10倍くらい速くなった
もっと速くなると思ったんだけどなあ
328321:2008/03/05(水) 13:43:14
>>326
ありがとうございます。
敷居が高そうですね・・。もう少し慣れてから挑戦してみます。
329デフォルトの名無しさん:2008/03/05(水) 14:59:10
>>327
if else は、フィールドの数が増えると遅くなるんじゃねえの、使うならswitchだろ。
330デフォルトの名無しさん:2008/03/05(水) 15:19:44
どっちもJITコンパイルされれば同じだと思うのだが
331デフォルトの名無しさん:2008/03/05(水) 15:45:36
switchは遅くならないのかよっ
332デフォルトの名無しさん:2008/03/05(水) 15:50:58
>>331
若干最適化は効きやすいとされる。
333デフォルトの名無しさん:2008/03/05(水) 16:13:40
>>330-332
おまいら今すぐC言語のスレで、コンピュータの基礎を勉強しやがれ
334デフォルトの名無しさん:2008/03/05(水) 16:27:33
この場合アセンブラだろ
お前も基礎を勉強しやがれ
335デフォルトの名無しさん:2008/03/05(水) 16:29:17
>>334
違うだろ、テーブルルックアップ式 goto label の勉強だ
336デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/05(水) 16:34:21
switchを逆アセンブルしてみると、if,elseとgo,labelの組み合わせだよ
338デフォルトの名無しさん:2008/03/05(水) 16:39:46
値が連続したところは>>336の言うように纏められるよ
あれ手でやるのは面倒
339デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/05(水) 16:55:09
まあ、間違いもあるだろうからそんなわざわざ相手逆なでするような言い方する必要はないと思うけど。

結局、IL レベルで switch 命令ありで、
JIT 時に if-else 式かテーブルルックアップ式かで最適な方選択ってこと?
343デフォルトの名無しさん:2008/03/05(水) 16:57:31
間違いっつーか、これプログラマなら常識だろ?
344デフォルトの名無しさん:2008/03/05(水) 17:04:55
自分の常識を人に押し付けるもんじゃないけど、
その常識ってのは、
MSIL が switch 命令を持ってるってのの方か、
一般に switch はルックアップテーブル使って高速化可能って話の方か、どっち?
345デフォルトの名無しさん:2008/03/05(水) 17:07:01
そんな複雑な事は聞かないし、普通に学校で教えてもらえるだろ、switchの使い方。
346デフォルトの名無しさん:2008/03/05(水) 17:15:14
CILのswitch命令はJavaバイトコードでいうところのtableswitch命令相当かな。
Javaバイトコードにはもう1つlookupswitchって命令もあって、CILにはこれに相当するものがない。
これがないせいでgotoだらけのコードができることもあるかもね。

あと、C#のswitch caseには文字列を突っ込むこともできて、このときはもはやswitch命令は関係なくなる。
MSのC#コンパイラは、分岐数増えてきたらDictionary<string,int>を裏で作るって実装になってたかと。
347346:2008/03/05(水) 17:21:07
>このときはもはやswitch命令は関係なくなる。
すまん、これは言い過ぎか。

Dictionary<string,int>を使って無理矢理switch命令用のインデックスを作り出す。
が正しい。
348デフォルトの名無しさん:2008/03/05(水) 17:26:34
今、色々 IL Disasm して遊んでみてるけど、switch のコンパイル結果、そんな単純でもなさそう。

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

だった。
349デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/05(水) 17:30:38
コンパイラの出力にあわせてチューンはすべきじゃないよ
高速化したいなら、コンパイラにキチンと意図の伝わる形でコードすべき
前から準にシーケンシャルに比較をする事を伝えたいなら if else if で
一括比較したいなら switch で、将来のJITのチューンにあやかれるようにね。
351デフォルトの名無しさん:2008/03/05(水) 17:33:02
Cのswitchの実装は処理系依存だろ。常識って何だよ。
352デフォルトの名無しさん:2008/03/05(水) 17:34:24
>>351
常識っていうのは、プログラマ間で意思疎通をするのに最低限必要な知識だよ
353デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/05(水) 17:38:13
>常識っていうのは、プログラマ間で意思疎通をするのに最低限必要な知識
これはどこに書いてありますか?
355デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/05(水) 18:19:16
こういう議論て、ふらっとスレで行われることが多いのはなんで?
357デフォルトの名無しさん:2008/03/05(水) 18:49:10
前からずっみみてきたが、誰か約一名、ウソを本当のように自信たっぷり書くアンポンタンが居ついているんだよ
コイツ以前マ板にもマルチレスで同僚がswitch文を使って if をごまかしたとか書きまくっていた奴じゃねぇかな
こういうキチガイはいっぺん地獄へ落ちればいいんだよ
358デフォルトの名無しさん:2008/03/05(水) 18:54:31
>>356
一旦的外れな方向に話が行った方が議論が盛り上がるからとか?

>>357
そういう発言はキチガイをよりいっそう近づけるから、
キチガイがいやなら逆に抑えた方がいいよ。
359デフォルトの名無しさん:2008/03/05(水) 20:11:27
paintイベントを発生させるにはRefresh()だったりを使ってイベントを発生させるけど、
任意のイベントを発生させるにはどうすればいいんでしょうか?

たとえば、textbox1でKeyPressが発生した時に、そのキーがエンターキーだった場合、
button1.Clickを発生させるときなどです。
360デフォルトの名無しさん:2008/03/05(水) 20:19:00
>>359
button1.Click(button1,new MouseEventArgs());

こんな感じか?
361デフォルトの名無しさん:2008/03/05(水) 20:23:20
クリックをエミュレートするのはPerformClickだな
362デフォルトの名無しさん:2008/03/05(水) 20:57:58
>>360
上手く動かなかったのでbutton_Clickメソッドを直接呼び出してみました。
button_Click(button1,new MouseEventArgs());
一応意図したとおりに動きましたが他のクラスからだと呼び出せないと思うので常套手段ではなさそうですね…。
363デフォルトの名無しさん:2008/03/05(水) 21:36:37
>>359
イベントは特定条件がそろった時に内部から発生するものだから、
その条件を無理やりそろえるためのメソッドがないものは基本的に無理

通常はイベントを発生させなくても、イベントハンドラで実行される処理と
同じ処理が実行されれば十分なはず
その例だとPerformClickでもいい
364デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/05(水) 22:23:51
>>368
それはつまりsenderがButtonにキャストできるということ。
371デフォルトの名無しさん:2008/03/05(水) 22:27:07
IDとButtonの関係がさっぱり見えない
372デフォルトの名無しさん:2008/03/05(水) 23:20:43
>>368
的外れな話かもですが、
そのコントロールの定義?のところに書いてある、senderなんちゃらを使ってみるというのは?


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


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

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

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

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

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

>>373
これまじお勧め。
全部入り。
http://www.microsoft.com/japan/msdn/vstudio/express/maninstall/2008/default.aspx
375デフォルトの名無しさん:2008/03/06(木) 01:08:13
ListViewのColumnHeaderコレクションエディタでColumnを追加した後、
メンバの順序を↑↓で変更しても反映されないのはバグ??
376デフォルトの名無しさん:2008/03/06(木) 01:49:03
逆引き本を探しているんですが、オススメないでしょうか。
どれも似たり寄ったりでしょうか?
ペイントブラシのようなものに挑戦しているので、グラフィック関係が書かれていると助かります。
377デフォルトの名無しさん:2008/03/06(木) 02:13:57
>>374
いつのまにか全部入りのExpress Edition出てたのか
単品よりいいね
378323:2008/03/06(木) 09:45:15
自己解決しました。
ボタンのFlatStyleをSystemにしたら適用されるようになりました。
379デフォルトの名無しさん:2008/03/06(木) 15:37:43
C#使うなって言われそうだけど、
C#でWin32ネイティブアプリ作れます?
380デフォルトの名無しさん:2008/03/06(木) 15:57:57
そもそもコンパイラがネイティブコードを吐けないはず。
VC#以外のコンパイラはしらね。
381デフォルトの名無しさん:2008/03/06(木) 17:45:30
だれか>>375を試してみてください。
ListViewのViewプロパティをDetailsにして、Columnsのコレクションをいくつか追加して、
コレクションエディタの↑↓で位置を変えても反映されません。
(DisplayIndexが変更されない?)
382デフォルトの名無しさん:2008/03/06(木) 19:08:52
>>381
DisplayIndexってわかってるなら自分で直せばいいじゃん。
位置を変えたときに変わらないのは仕様なのかもしれないし。
383382:2008/03/06(木) 19:20:46
うん。やっばり仕様だと思う。
コレクションエディタの順番は単にListViewItem.SubItemsの順番で、
DisplayIndexが表示の順番なんだと思う。
で、それらは必ずしも一致せず、
ListViewItemを作る部分のコードは変えずに表示の順番を変えることも出来るようになってると。

#実は俺も前に同じように順番が変わらず悩んだことがある。
そのときは.Designer.csにDisplayIndexの指定があるのを見つけて、
なんじゃこりゃと思いつつ手作業で削除した。
384デフォルトの名無しさん:2008/03/06(木) 20:17:33
MySqlで日本語をインサートしようとすると文字化けするのでSET NAMESでutfやsjisを
投げてみたのですが直らず。どうしたら良いのでしょうか?。
385デフォルトの名無しさん:2008/03/06(木) 20:25:29
>>384
自己レス、接続時にcharsetを投げたら上手く行きました。
他の言語ではnamesを投げて上手く行っていたのですがc#ではだめなのですね。
386デフォルトの名無しさん:2008/03/06(木) 21:48:21
そんなに投げちゃいかん
387デフォルトの名無しさん:2008/03/06(木) 22:21:04
>>383
そうなのね。ありがと。
でもコレクションエディタで順番変えてOK押した一瞬だけ順番が変わってすぐに戻るのがデザイナ上で見えるからバグっぽく見える…
388デフォルトの名無しさん:2008/03/06(木) 22:37:24
あるクラスを作って、そのインスタンスを複数作ったとき、
それぞれのインスタンスを区別するにはどうしたらいいのですか?
たとえばこんなクラスです。

public void 猫()
{
 string kainushi
 public 猫(string, ka)
 {
  this.kainushi = ka
 }
 public 好きな遊び{ get; set;}
}
389デフォルトの名無しさん:2008/03/06(木) 22:41:45
クラスってclassで定義するんじゃないの?
390デフォルトの名無しさん:2008/03/06(木) 23:01:41
区別してどうするの?
391デフォルトの名無しさん:2008/03/06(木) 23:04:34
区別しない方が難しいだろ。
392デフォルトの名無しさん:2008/03/06(木) 23:05:36
そんなこと自分で考える前に基本的な文法を勉強した方が
393デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/06(木) 23:16:16
>>393
インスタンスの区別じゃないの??
395デフォルトの名無しさん:2008/03/06(木) 23:17:20
猫 → クラス
cats[0] → インスタンス
cats[1] → インスタンス
cats[2] → インスタンス
cats[3] → インスタンス
cats[4] → インスタンス
396デフォルトの名無しさん:2008/03/06(木) 23:22:54
>>393
そのまま動かしたら全部trueになっちゃうw
397デフォルトの名無しさん:2008/03/06(木) 23:59:33
398デフォルトの名無しさん:2008/03/07(金) 00:02:36
cats[0] → null
cats[1] → null
cats[2] → null
cats[3] → null
cats[4] → null
399デフォルトの名無しさん:2008/03/07(金) 00:12:27
cats[0]がインスタンスと聞いて
400デフォルトの名無しさん:2008/03/07(金) 00:26:15
ぬる猫がいると聞いて
401デフォルトの名無しさん:2008/03/07(金) 00:31:44
402デフォルトの名無しさん:2008/03/07(金) 00:54:49
何で配列にしようと思ったのやら
403デフォルトの名無しさん:2008/03/07(金) 00:59:17
classの規定の==はそれぞれのインスタンスを区別する
中身が全く同じでもインスタンスが違えば==はfalseになる
404デフォルトの名無しさん:2008/03/07(金) 01:24:40
>>387
5分くらいで適当に考えた対策だけど多分おk

全選択してDisplayIndexを 列数-1 で並び順になる (0だと逆順)
405デフォルトの名無しさん:2008/03/07(金) 01:52:53
>>404
何その裏技っぽいのwすごw
でもそれでいけるね!
0指定すると逆順になるけどコレクションエディタと同期してないから同じ事だけど。
406デフォルトの名無しさん:2008/03/07(金) 02:25:26
最近C#使ってみようと思ってるんですが、
C#3.0ってもうリリースしてるんでしょうか?

どうせなら3.0から勉強したいなと・・・^^;
407デフォルトの名無しさん:2008/03/07(金) 02:26:47
とっくの昔にリリースしとる
408デフォルトの名無しさん:2008/03/07(金) 02:30:41
>>407
そうでしたか・・・アホな質問してすいません(__)
Wikipediaは見たんですが、言語仕様しか書いてなくて^^;

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

ActionScript3.0がSocketが扱えて同期通信できるようになるって言ってたんですが
当分先そうなんでFlex2からC#に浮気してみようかなと・・・^ω^;
409デフォルトの名無しさん:2008/03/07(金) 02:32:33
「C#」「P2P」「ページ」の関連性について。
410デフォルトの名無しさん:2008/03/07(金) 02:36:08
お勧めのページといったらタウンページかMSDNしかないだろう
411デフォルトの名無しさん:2008/03/07(金) 02:39:20
Wikipediaにも最新リリース: C# 3.0とはっきり書いてある。
412406:2008/03/07(金) 02:40:14
>>410
でwwwすwwwよwwwねwww

まぁ進捗Blogとか貼ってくれたら儲けもんぐらいに思ってただけなんで、
適当にググッてみますわwwww
413デフォルトの名無しさん:2008/03/07(金) 02:41:43
>>411
あー・・・右上の表見落としてた・・・
まじすまそ・・・あほすぎ。
414デフォルトの名無しさん:2008/03/07(金) 04:08:06
なんか覚えたての単語並べてみましたって感じ?
415デフォルトの名無しさん:2008/03/07(金) 11:22:30
c#からmysqlにinsert set name=val にする時にvalをエスケープしないといけないのですが
mysql側に専用のエスケープ関数などあるのでしょうか?。
416デフォルトの名無しさん:2008/03/07(金) 12:55:07
それはあれだ、C#のソースコード上の文字列をエスケープする関数を探すようなものだな
例えば、文字列リテラルで \" とエスケープせずに、 " と書いて関数でエスケープしたいと
417デフォルトの名無しさん:2008/03/07(金) 13:25:23
>>416
いじわる!!笑
@の他は正規表現でいちいち書き換えないとだめなのでしょうか?
418デフォルトの名無しさん:2008/03/07(金) 14:03:44
意地悪ではない。処理のレイヤーが違うから無理と暗にいってる

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

当たり前すぎて確認してなかったけど、
valは文字列リテラルでエスケープというのは ' => '' とかのことだよな
419デフォルトの名無しさん:2008/03/07(金) 14:04:50
>>417
そんなことより株取引がんばってください
420デフォルトの名無しさん:2008/03/07(金) 14:21:10
>>418
言われて見て思ったのでちょっと試したのですがこういう事ですよね。
sqlでインサートできないから安易にエスケープと考えてしまったのですが問題は別にあると
認識し試行錯誤します。

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

>>419
おうよ!。みずほが下がってる><
421デフォルトの名無しさん:2008/03/07(金) 18:00:24
2008を使ってますが、2002年に出たC#の本を買っても問題ないでしょうか?
『C#によるプログラミングWindows』上下Charles Petzold (著)が気になっています。
422デフォルトの名無しさん:2008/03/07(金) 18:33:20
せめてC#2.0(VC#2005)に対応したのにしとけ
423デフォルトの名無しさん:2008/03/07(金) 18:47:21
PictureBoxに画像+αを表示したいのでPictureBoxのPaintデリゲートに指定した関数の中で
描画処理を行わせるようにしたのですが、その際にPaintEventArgs.Graphicsを利用して描画すると意図通り動くのに対して
それを利用せずに関数内でPictureBox.CreateGraphics()により取得したGraphicsオブジェクトを利用して描画した場合には
他のウインドウの影に隠れた場合等に再描画が正常に行われないのですが何故なのでしょうか?
424デフォルトの名無しさん:2008/03/07(金) 19:22:06
お前さんが再描画してないんだから当然
てか、そのためのPaintイベントじゃないか
425デフォルトの名無しさん:2008/03/07(金) 19:31:44
>>424
どちらの場合も処理してる関数自体はPictureBox.Paintに登録しているのでクライアント領域が無効化された場合には
再描画のルーチンが実行されると思ったのですが違うのでしょうか?
426デフォルトの名無しさん:2008/03/07(金) 20:10:49
クリッピングというものがあってな
427デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/07(金) 20:33:44
MySqlDataReader.read()って一番最後の行を読んだ時点でfalseになりません?

while(MySqlDataReader.read()){
List<string>.Add(val)//これだと一番最後の行が追加されない
}
429デフォルトの名無しさん:2008/03/07(金) 21:51:04
System.Web.WebProxyクラスに設定した、プロキシサーバーが生存中かを
楽に確認する方法ってないでしょうか。
プロキシサーバーにpingを打って、100ms以内に応答がなけれ
ば無効と判断するコードの、簡単な書きかたってないでしょうか?
430デフォルトの名無しさん:2008/03/07(金) 23:27:15
Pingクラスがあるよ
431デフォルトの名無しさん:2008/03/08(土) 00:17:09
>>428
サードパーティ製ライブラリについて質問するのに、ライブラリの名称もバージョンも書かないとか
どんだけ
432デフォルトの名無しさん:2008/03/08(土) 00:52:32
街の仲間たちにぬっ殺されろ
433デフォルトの名無しさん:2008/03/08(土) 01:32:31
>>428
read()の時点で1レコード呼ばれてるってオチだろ
434デフォルトの名無しさん:2008/03/08(土) 03:04:25
C#初心者でございます。
C#もJAVAのように数学の関数などを
Math.Sin(); 
等とクラス名を書かなければいけないようですが
クラス名を省略することは可能なのでしょうか。
435デフォルトの名無しさん:2008/03/08(土) 03:05:09
using
436デフォルトの名無しさん:2008/03/08(土) 03:26:02
Java には static import が付いたけど
C# には似たようなものってあったっけ
437デフォルトの名無しさん:2008/03/08(土) 03:27:34
using
438デフォルトの名無しさん:2008/03/08(土) 04:41:44
ハッシュテーブルのことC#では何言うんだっけ?
439デフォルトの名無しさん:2008/03/08(土) 04:44:48
ハッシュテーブルだろ
440デフォルトの名無しさん:2008/03/08(土) 04:49:07
Hashtable
Dictionary
441デフォルトの名無しさん:2008/03/08(土) 07:38:26
おはようございます
string[] str = (string[]) List<string>をみたいに簡単に変換する方法はないでしょうか?
442デフォルトの名無しさん:2008/03/08(土) 07:40:20
ToList
443デフォルトの名無しさん:2008/03/08(土) 07:41:05
じゃなかったToArray
444デフォルトの名無しさん:2008/03/08(土) 07:49:23
>>443
こんな便利なものがあったのですね
ありがとうございます
445デフォルトの名無しさん:2008/03/08(土) 10:37:58
>>434
いきなりSin()とか書かれても面食らうだけだからやめてくれ
446デフォルトの名無しさん:2008/03/08(土) 10:58:30
お答えいただき有難うございます。

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

>>445
そうですか?
数学をやるとき「数学の積分(R*数学のSIN(π + θ))」なんて
いちいち書くのは冗長ですよね・・・と思っていたのですが、
sin ,cosと来たら三角関数、というのはもはや非常識なのでしょうかね。
447デフォルトの名無しさん:2008/03/08(土) 11:08:59
>>446
確かに数値計算系のプログラムではいちいちMathつけると読みにくいというのには同意。
自クラスに
static double sin(double x) { return Math.Sin(x); }
なんて定義するのはダメ?
クラス毎に定義しなきゃいけないのが面倒だが。
448デフォルトの名無しさん:2008/03/08(土) 11:41:55
VBのモジュール感覚で濫用するアホが出てくるからだろ
449デフォルトの名無しさん:2008/03/08(土) 11:46:26
doubleの拡張メソッドにしたら
450デフォルトの名無しさん:2008/03/08(土) 11:55:12
でも確かにDelphiのwith相当のことをやりたいことはたまにあるな。
451デフォルトの名無しさん:2008/03/08(土) 11:58:39
>>450
VB使えよ
452デフォルトの名無しさん:2008/03/08(土) 12:17:05
ヘジは早くプリプロセッサを追加しろよ。
453デフォルトの名無しさん:2008/03/08(土) 12:17:22
with最凶
454デフォルトの名無しさん:2008/03/08(土) 12:38:28
>>446
現状で最もましな方法はpartialクラスで>>447だと思う
てか、モドキじゃないMix-inが使えればいいのにな
455デフォルトの名無しさん:2008/03/08(土) 12:55:40
ListViewの詳細をクリックするとアイテムが選択されますが、
プログラムから選択させることって出来ますか?
listView1.Items[0].Selected = true;
こんな感じにしてみたのですが選択はされていると思うのですが見た目上選択されたようにはなっていません。
見た目も選択されているようにするにはどうしたらいいんでしょうか?
456デフォルトの名無しさん:2008/03/08(土) 13:16:41
>>454
違うと思うよ。
もっとも「マシ」な方法は、"Mathがうっとうしい"などという感覚を矯正すること。

要するにただの慣れの問題でしょ。
まあ慣れすぎて自分のクラスの静的メソッドでもクラス名つけたくなってくるのも
それはそれで難儀だとは思うけど
457デフォルトの名無しさん:2008/03/08(土) 13:25:23
あとVBのWithってブロック内のインスタンスの表記を省略できるだけなんだよね。
458466:2008/03/08(土) 13:40:33

クラス名の省略はとりあえずできない、というのがわかって助かりました。
ありがとうございました。
459デフォルトの名無しさん:2008/03/08(土) 14:07:05
>>455
HideSelectionがTrueのままになってて、フォーカスが他にあるってオチじゃないよね?
460デフォルトの名無しさん:2008/03/08(土) 14:09:48
>>455

listview.Focus()してもだめ?
461455:2008/03/08(土) 14:15:32
listView1.Select();
で解決しました。
462デフォルトの名無しさん:2008/03/08(土) 14:17:31
>>459
違うみたいです。
>>460
だめでした。。
463デフォルトの名無しさん:2008/03/08(土) 16:47:12
"続行するには何かキーを押してください . . ."ってどうやるの?
464デフォルトの名無しさん:2008/03/08(土) 16:54:03
>>463
pause
465デフォルトの名無しさん:2008/03/08(土) 17:09:11
Visualstudioでクラスの名前を変更する時、
ジェネリッククラスだとファイルとクラスの名前が連動しないのは仕様ですかね?
466デフォルトの名無しさん:2008/03/08(土) 17:12:52
ファイル名に<>使えない
467デフォルトの名無しさん:2008/03/08(土) 17:13:04
>>464
ごめん。質問の仕方が悪かった。
僕が言いたいのは以下のようなプログラムの場合、
using System;
namespace HelloWorld
{
  class Program
  {
    static void Main()
    {
      Console.WriteLine("Hello World");
    }
  }
}
実行すると一瞬コンソールが現れて消えてしまうんだけど「Visual Studio」とかで実行したら
"続行するには何かキーを押してください . . ."って出て終了しないよね?
それでそのようなことをするコマンドプロンプトのオプションがあるのかなあって調べたら無かったからどうやるのかなあってこと。
468デフォルトの名無しさん:2008/03/08(土) 17:15:26
>>467
Console.Write("続行するには何かキーを押してください . . .");
Console.ReadKey();
469デフォルトの名無しさん:2008/03/08(土) 17:32:04
>>468
レスどうもありがとう。
でもその方法は知っているんだ。
Visual Studioはいちいちそれを加えてからコンパイルして実行しているの?
違うよね。FileMonitorで監視してみたけど「Console.ReadKey();」が付加されている
exeファイルは見つけることが出来なかった。
僕は今C#用のエディタを作っているんだけどどうしても、
よく見る"続行するには何かキーを押してください . . ."が出来ない。

教えてください。よろしくお願いします。
470デフォルトの名無しさん:2008/03/08(土) 17:33:43
だから、pause
もしくは、コマンドプロンプトから実行すればいい
471デフォルトの名無しさん:2008/03/08(土) 17:35:24
そして、そのpauseコマンドはC#で作られているわけではない。
472デフォルトの名無しさん:2008/03/08(土) 17:40:39
インターフェイスの利用価値がわからないんだが、インターフェイスってよく使うもんなのか?
473デフォルトの名無しさん:2008/03/08(土) 17:50:37
多分知らないうちに一番お世話になってるのはIEnumerableとIEnumerator
デリゲートもインターフェイスみたいなもんだな
474デフォルトの名無しさん:2008/03/08(土) 17:55:05
>>470
出来ました。ありがとうございました。
475デフォルトの名無しさん:2008/03/08(土) 18:08:10
>>473
んじゃあ、自分でインターフェイスを作る事はそんなに無い感じなのかな?
ありがとう^
476デフォルトの名無しさん:2008/03/08(土) 18:29:56
>>475
ライブラリつくるときとか
プラグインぽいのつくるときとか
477デフォルトの名無しさん:2008/03/08(土) 19:54:38
>>476
じゃあ俺にはまだ必要ないな
ありがと^
478デフォルトの名無しさん:2008/03/08(土) 22:42:48
>>467に便乗だけど、
Visual C#でコンソールアプリケーションを作成してデバグするときに
ウィンドウが消えないように、Visual C#のオプション設定でできないの?
>>468のようにソースはいじらないで。)
479デフォルトの名無しさん:2008/03/08(土) 22:47:55
#if DEBUG
(>>468)
#endif
でいいだろもう
480デフォルトの名無しさん:2008/03/08(土) 22:51:53
他の方法ではなく、できるかできないかを聞いている。
481デフォルトの名無しさん:2008/03/08(土) 23:00:23
>>480
オプションではできないんじゃね?
ってか回答者は機械じゃねぇぞ。
482デフォルトの名無しさん:2008/03/08(土) 23:02:03
できないならできないと答えろ。
483デフォルトの名無しさん:2008/03/08(土) 23:02:41
できますん。
484デフォルトの名無しさん:2008/03/08(土) 23:03:11
そんなきき方じゃできたとしても誰も教えないってなるだけじゃね?
485デフォルトの名無しさん:2008/03/08(土) 23:04:30
答えられる奴が答えればいい。

>>478に回答できる奴いないの?
486デフォルトの名無しさん:2008/03/08(土) 23:05:14
できるよ。やりかたは自分で探してね☆
487デフォルトの名無しさん:2008/03/08(土) 23:06:17
できるかできないかでいえばできるな。
488デフォルトの名無しさん:2008/03/08(土) 23:07:00
>>486
おk。

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

以上。
489デフォルトの名無しさん:2008/03/08(土) 23:07:56
POST送信をデバッグするよい方法ってないですかね?
いまのとこ、HttpWebResponseの結果をテキストにしてるのですが、
これじゃPOSTに成功したのかどうかさっぱり・・・。
IEに簡単に表示とか出来ないものでしょうか?
490デフォルトの名無しさん:2008/03/08(土) 23:08:24
出来ない。
491デフォルトの名無しさん:2008/03/08(土) 23:09:58
Wiresharkでも眺めてろよとかそーゆーの駄目?
492デフォルトの名無しさん:2008/03/08(土) 23:12:17
>491
申し訳ない、プロトコルレベルでの通信は成功してます。
チェックしたいのは、掲示板に書き込んだときあとの、
「名前を入力してください」
とかの類です。POSTの送信データが抜けなく遅れてるのかをチェックしたいのです。
493デフォルトの名無しさん:2008/03/08(土) 23:27:49
正常に送られてるか検証するためには送らないことが必要である
494デフォルトの名無しさん:2008/03/08(土) 23:29:47
そこはTCPの保証範囲でないの。
495デフォルトの名無しさん:2008/03/09(日) 00:21:03
ウインドウが消えないようにするには、returnのところでF9を押す
496デフォルトの名無しさん:2008/03/09(日) 00:22:02
returnのところって何?
497デフォルトの名無しさん:2008/03/09(日) 00:22:57
Mainメソッドのreturnかなんか
498デフォルトの名無しさん:2008/03/09(日) 00:23:44
ああ、そういうことね。thx
499デフォルトの名無しさん:2008/03/09(日) 00:54:21
カラムがクリックされた時にどのカラムがクリックされたのか取得したいのですがどうすればいいんでしょうか?
選択されたカラムの名前が取得できるといいのですが…。
500デフォルトの名無しさん:2008/03/09(日) 00:57:27
カラムって何?
501デフォルトの名無しさん:2008/03/09(日) 01:02:55
>>500
リストビューのColumnです。
502499:2008/03/09(日) 01:27:52
ColumnClickイベントで、e.Column.ToString()でとりあえず番号は取得できますが、
columnHeaderの名前自体は取得できないのですかね…?
503デフォルトの名無しさん:2008/03/09(日) 01:38:32
インデックスが手に入ってるんだからどうでもなるだろ
504デフォルトの名無しさん:2008/03/09(日) 01:43:55
例えばどうするんだよ
505デフォルトの名無しさん:2008/03/09(日) 01:52:24
listView1.Columns[index].Name;

こんなことも重いつかんのならプログラミングやめたほうがいい。
向いてないから。
506デフォルトの名無しさん:2008/03/09(日) 01:59:34
>>502これでおk?
507デフォルトの名無しさん:2008/03/09(日) 02:03:45
listView.Columns[e.Column]
508デフォルトの名無しさん:2008/03/09(日) 02:15:40
>>505
index??
それ動きませんよ。

>>507
カラムの名前じゃなくて、カラムのメンバ名を取得したいのです…。
509デフォルトの名無しさん:2008/03/09(日) 02:19:52
メンバ名とやらを手に入れる意味は無いから安心しろ
510デフォルトの名無しさん:2008/03/09(日) 02:21:03
>>509
お前に意味はなくても>>508にはあるんだよ
511505:2008/03/09(日) 02:30:47
>>508
string name = listView1.Columns[e.Column].Text;

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

512499:2008/03/09(日) 02:32:42
インデックス番号だけしか取得できないとカラムが動的に追加・削除されたら困ると思うのですが…。
メンバ名を取得する方法はないってことですかね??
513デフォルトの名無しさん:2008/03/09(日) 02:34:09
>>511
さっきから釣りですか?
向いてないんじゃないですか?w
514デフォルトの名無しさん:2008/03/09(日) 02:34:38
>>511はチンコ剥いてろ。
515デフォルトの名無しさん:2008/03/09(日) 02:39:48
>>512
メンバ名ってprivate ColumnHeader hoge; の hoge だろ?
動的に追加削除したらメンバ名も何も無いじゃん
516デフォルトの名無しさん:2008/03/09(日) 02:40:58
>>512
>インデックス番号だけしか取得できないとカラムが動的に追加・削除されたら困ると思うのですが…。
困りません。

>メンバ名を取得する方法はないってことですかね??
日本語でおk
517デフォルトの名無しさん:2008/03/09(日) 02:46:25
死ね
518デフォルトの名無しさん:2008/03/09(日) 02:48:10
>>505=>>511
はチンコ剥いてプログラミングやめて2chもやめた方がいい。
人生だけはやめなくていいから。
519デフォルトの名無しさん:2008/03/09(日) 02:52:59
>>515-516
動的に追加・削除してインデックスがかぶってしまったら困ると思うのですが…。
例えばインデックス1を削除したあとに、新しく追加したカラムもインデックス1にしたら区別がつかなくなると思うのですが。
520デフォルトの名無しさん:2008/03/09(日) 02:59:13
>>518
悔しかったの?w
521デフォルトの名無しさん:2008/03/09(日) 03:00:57
>>519
削除したんならもうインデックス存在しないじゃん
522デフォルトの名無しさん:2008/03/09(日) 03:04:21
>>521
削除した方はもうないから新しい方と区別つかないじゃん。
523デフォルトの名無しさん:2008/03/09(日) 03:06:41
インデックスがわかればカラムのインスタンスそのものを取得できるのに、それ以上何を望む?
524デフォルトの名無しさん:2008/03/09(日) 03:12:36
>>523
まあそうですよね。
冗長でもインデックスとは別に取得出来るんじゃないかと思ってしまってました。
ありがとうございました。
525デフォルトの名無しさん:2008/03/09(日) 03:23:00
>>512>>519で区別できなくて困るのってどんな場合だろ
気になってしょうがないから、思いついた人おせーて
526デフォルトの名無しさん:2008/03/09(日) 03:25:17
ちょっと待て終わらせんなw
インスタンスそのものがわかってもインスタンス名が分からないと困る事あるだろ。
527デフォルトの名無しさん:2008/03/09(日) 03:26:48
インスタンス名ってなに?
528デフォルトの名無しさん:2008/03/09(日) 03:27:16
変数のことかな?
529デフォルトの名無しさん:2008/03/09(日) 03:28:09
カラムを動的に追加するときにNameプロパティをちゃんと設定しておけばOK。
530デフォルトの名無しさん:2008/03/09(日) 03:29:58
例えばあるカラムがstringで数字を表示している時にそのカラムを数値として扱いたくなった時など。
その列以外は数字でもstringで扱いたいのに、その列だけは数値として扱いたい。
そして動的に追加・削除されるものだとしたらインデックスよりインスタンス名が欲しいでしょ?
531デフォルトの名無しさん:2008/03/09(日) 03:32:10
で、インスタンス名ってなに?
532デフォルトの名無しさん:2008/03/09(日) 03:35:57
>>529
Nameプロパティが取得できないからこういう流れになってるんだろ
533デフォルトの名無しさん:2008/03/09(日) 03:36:43
>>505
>>511
>>527
>>528
>>531
もうちょっと勉強して来い
534デフォルトの名無しさん:2008/03/09(日) 03:37:06
>>533
死ね
535デフォルトの名無しさん:2008/03/09(日) 03:40:06
スクリプト脳の弊害ってホント恐ろしいな。

で、インスタンス名って何。
536デフォルトの名無しさん:2008/03/09(日) 03:43:15
スクリプト脳って?
537デフォルトの名無しさん:2008/03/09(日) 03:43:46
池沼はスルーしろよ
538デフォルトの名無しさん:2008/03/09(日) 03:44:28
出た、スルーw
539デフォルトの名無しさん:2008/03/09(日) 03:56:26
>>525
クリックされた列がある特定のデータ群だった時にだけ処理をしたい場合
540デフォルトの名無しさん:2008/03/09(日) 03:59:42
「クリックされた列がある特定のデータ群」ってなに?
541デフォルトの名無しさん:2008/03/09(日) 04:01:21
もう相手すんなよ
542デフォルトの名無しさん:2008/03/09(日) 04:01:52
名前なんて不安定な要素で判定しないなぁ
543デフォルトの名無しさん:2008/03/09(日) 04:01:57
出た、もう相手すんなよw
544デフォルトの名無しさん:2008/03/09(日) 04:10:38
ただの荒らしじゃねえか
545デフォルトの名無しさん:2008/03/09(日) 04:13:52
A B
1 1

AとBの列があったとして、Aの列(1)にだけ特定の処理をしたい場合困るんじゃね?
546デフォルトの名無しさん:2008/03/09(日) 04:16:48
何が困るのか全く分からない。
547デフォルトの名無しさん:2008/03/09(日) 04:18:11
break;
548545:2008/03/09(日) 04:20:31
>>546
俺に聞いてる?
じゃあ逆にAの列をどうやって特定する?
削除される可能性もあるからインデックスからは特定できないよ。
Aの名前も削除された後に追加されるかもしれないから名前でも特定できない。
549デフォルトの名無しさん:2008/03/09(日) 04:34:54
List<ColumnHeader>で管理するなりNumberColumnHeaderクラス作るなりどーとでも。
550デフォルトの名無しさん:2008/03/09(日) 04:36:35
>>548
ColumnClickアクションを拾って、e.Columnでインデックスが取れるよね。
で、アプリはどのカラムが何を意味してるか知ってるはずだよね?
知らないとしたら、それってどういう状況なの??
551デフォルトの名無しさん:2008/03/09(日) 04:45:46
ListViewからカラムを削除するのはアプリ。
ListViewにカラムを追加するのはアプリ。
何番目のカラムに何を格納するかを決めるのもアプリ。

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

何が困るのか全く分からない。
552デフォルトの名無しさん:2008/03/09(日) 04:49:10
>>548
Tag

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

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

流れ分かってる?発端は>>499だよ
554デフォルトの名無しさん:2008/03/09(日) 11:48:11
タブコントロールでタブを下に配置した時にFlatButtonsにする方法はないのでしょうか?
555デフォルトの名無しさん:2008/03/09(日) 12:52:16
混乱させる忍術の稽古はよそでやれ
556デフォルトの名無しさん:2008/03/09(日) 13:10:38
??columnのインスタンス名(??)の話の流れが全く読めないんだが
あるインスタンスを格納する変数名を取りたいってことか??
変数名なんて単なる箱なんだからスコープ違えば役に立たないと
おもうんだけど…それとは違うの?
557デフォルトの名無しさん:2008/03/09(日) 14:19:01
>>556
何いってるの
558デフォルトの名無しさん:2008/03/09(日) 14:30:22
釣りなのか思い込み野郎なのかは知らないけど、気にするな
559デフォルトの名無しさん:2008/03/09(日) 14:59:37
>>550-551
こういう場合はを想定ごらん。
例えばボタン1を押したらカラム追加、ボタン2を押したらカラム削除するとして、
プログラム上ははじめから配置されているある特定のひとつのカラムだけに操作する必要がある場合。
勿論削除されたら操作しないし、内容も他のカラムと見た目上判断できない。
560デフォルトの名無しさん:2008/03/09(日) 15:01:10
まあ削除するときに特定のカラムかどうかを判定すればいいんだけど、
>>550-551は状況を想定できないようなので言ってみた。
561デフォルトの名無しさん:2008/03/09(日) 16:41:57
>>559
カラムクリックイベントからインデックスを取るという状況の話をしているのに、
なんでボタンのクリックイベントで特定のカラムを操作する話になってんの?
もともとそんな状況の話なんかしてないんだからそんな想定は無意味だ。
562デフォルトの名無しさん:2008/03/09(日) 17:05:24
>>559-560
そんなもんプログラム上で如何様にもできるっての。
563デフォルトの名無しさん:2008/03/09(日) 17:23:08
>>561
なんでインデックスを取る話になるの?
インデックスじゃ区別つかないからインデックス以外の方法はないかって話題だろ?

>>562
如何様に出来てもインデックス以外の要素で一発で判断できるメンバがあれば楽って話だろ。
例えばエクスプローラでよくあるカラム上の▲▼マークだってオーナードロー駆使すれば如何様にも出来るけど
デザイナ上で一発で出来れば楽だろ。
それと同じ。
564デフォルトの名無しさん:2008/03/09(日) 17:25:40
>>561
それと、カラムクリックイベントからそのカラムを操作するのと
ボタンクリックから特定のカラムを操作するのとでは条件同じだろ。
どっちにしろ指定されたカラムが”ある特定のカラムか”判断する術はインデックスからは無理って話なんだけど理解できる?
565デフォルトの名無しさん:2008/03/09(日) 17:35:37
if (numberColumn == listView1.Columns[e.Column]) {
    ....
}
なにが無理なの?
566デフォルトの名無しさん:2008/03/09(日) 17:39:16
お触り禁止
567デフォルトの名無しさん:2008/03/09(日) 17:41:13
つまんないこというなよ
568デフォルトの名無しさん:2008/03/09(日) 17:46:23
>>564
>ボタンクリックから特定のカラムを操作するのとでは条件同じだろ。
イベント引数の中身が全然違う。ゆえに条件は同じとは言えない。

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

お前が>>559で言っている状況の話を理解できないわけないだろうが。
>>559の内容がこの話の流れと全く違っていると言ってるのよ。
この話の発端となった>>499を百回声に出して読むんだな。
お前以外のやつは>>449のアホな質問に対する答えについてどうこう話しているはずだ。
お前だけ流れが読めてない。
569デフォルトの名無しさん:2008/03/09(日) 18:00:01
まあ元の質問を置いてきぼりにして話が膨らむのはよくあること。
570デフォルトの名無しさん:2008/03/09(日) 19:36:28
元の内容自体は>>499が(もう少しマクロな視点で)目的を言うか、
誰かが質問するかすれば、すぐにでも解決できそうなものなのにな
571499:2008/03/09(日) 19:43:02
まーまー^^
572デフォルトの名無しさん:2008/03/09(日) 19:47:47
>>568
そのカラムオブジェクトとインデックスから導かれたカラムの参照が同じかどうか判定
ってどうすればいいの?
573デフォルトの名無しさん:2008/03/09(日) 19:49:06
574デフォルトの名無しさん:2008/03/09(日) 19:55:19
必死すぎるやつがいるな
575デフォルトの名無しさん:2008/03/09(日) 21:09:48
そんなことよりGridLineをスクロールした時のバグは直ってないのか
576デフォルトの名無しさん:2008/03/10(月) 08:04:41
エクスプローラでドライブにメディアが入っていないときに表示される
「DVD-RAM ドライブ」 といった文字列を取得する方法は、
.NETのライブラリには用意されていないのでしょうか?
IShellFolder::GetDisplayNameOfを呼び出すよりも楽に取得する方法はありますか?
577デフォルトの名無しさん:2008/03/10(月) 12:15:00
ない。シェルをラップしたライブラリでも作れば商売になりそうな気がする。
578デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/10(月) 13:52:40
>>578
Desktop,MyDocumentsをそこらじゅうで使うなら
class Desktop
class MyDocumentsと作って使うメソッドを定義
そこらじゅうで使わないならメソッド自体いらないと思う
580デフォルトの名無しさん:2008/03/10(月) 14:48:37
>>578
private string GetSpecialFolder(string name)
{
return (Environment.SpecialFolder)TypeDescriptor.GetConverter(typeof(Environment.SpecialFolder)).ConvertFromString(name);
}
581デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/10(月) 15:34:50
>>579-581
ありがとうございます。

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

特にこんなものがあるなんて!。
TypeDescriptor.GetConverter(typeof(Environment.SpecialFolder)).ConvertFromString(name))
583デフォルトの名無しさん:2008/03/10(月) 17:21:03
何その裏技w
584デフォルトの名無しさん:2008/03/10(月) 18:15:50
スレ違いなのですがZIP32J.DLLで進行状況のウインドウを出さないようにするコマンドって何かわかりませんか?
HP巡回しても行き着かない・・・
585デフォルトの名無しさん:2008/03/10(月) 18:45:15
>>584
自己解凍しました
586デフォルトの名無しさん:2008/03/11(火) 00:37:58
物凄く初心者な疑問でごめんなさい。
メモリリークってアプリケーションを終了させてもメモリが開放されない状態を言うんですよね?
ガベージコレクタはそうならないように解放してくれるんですよね?
だとしたらOSにガベージコレクタを実装すればメモリリークなんてなくなるんじゃないでしょうか???
587デフォルトの名無しさん:2008/03/11(火) 00:47:49
プロセスが終了したら、そのプロセスが確保したメモリは全てOSが没収して別のプロセスが使えるようにする。

メモリリークってのは、プロセスが動いている間に不要になったメモリをOSに返還し忘れて、溜まっていく状態。
588デフォルトの名無しさん:2008/03/11(火) 00:52:43
>メモリリークってアプリケーションを終了させてもメモリが開放されない状態を言うんですよね?
それもメモリリークに入りますが、C#スレとしてはその定義は間違っています。
>ガベージコレクタはそうならないように解放してくれるんですよね?
違います。
>OSにガベージコレクタを実装すればメモリリークなんてなくなるんじゃないでしょうか???
そうかもしてませんが、現実的ではありません。
589デフォルトの名無しさん:2008/03/11(火) 03:57:57
C++なんかのガベージコレクタがない言語なんかは解放しないとプロセス終了後も残ってるよ。
590デフォルトの名無しさん: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デフォルトの名無しさん: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);
592590:2008/03/11(火) 05:36:03
>>591
ありがとうございます。
LINQはなんとなく避けていたのですが、そろそろ本腰を入れて勉強しないといけないみたいですね。
593デフォルトの名無しさん:2008/03/11(火) 06:55:05
LINQは怖くないよ
594デフォルトの名無しさん:2008/03/11(火) 09:38:49
どこにLINQが出てきたの?
595デフォルトの名無しさん:2008/03/11(火) 09:47:19
Universe.Except(A).Except(B)はLINQのメソッド構文
596デフォルトの名無しさん:2008/03/11(火) 12:20:45
LINQのメソッド構文というかただの拡張メソッドだよな
拡張メソッドがLINQの本体
ごくまれにクエリ式を使った方がシンプルに書けることがあるけど
普通は拡張メソッドを使った方が早いし見やすいし楽だ
597デフォルトの名無しさん:2008/03/11(火) 12:29:12
拡張メソッドで書いてもクエリ式で書いてもLINQだよ
クエリを書けるようにする技術を総称してそう呼ぶだけで
別にC#にLINQっていう機能が付いてるわけじゃない
598デフォルトの名無しさん:2008/03/11(火) 12:32:17
>>589
本当かよそれw
599デフォルトの名無しさん:2008/03/11(火) 12:50:44
それが本当ならCでexit前のfree論争なんて起きるわけがない。

それどころか、WindowsもUnixもファイルハンドルとかの
OSに属するプロセス単位の資源はみんなプロセス終了時に片付けるぞ。
600デフォルトの名無しさん:2008/03/11(火) 15:03:32
http://e-words.jp/w/E383A1E383A2E383AAE383AAE383BCE382AF.html
システムを再起動する=プロセスを終了させても解放されない(?)
601デフォルトの名無しさん:2008/03/11(火) 15:06:11
「OSに属するプロセス単位の資源」でないものが時々問題になるわけだ。
OSの資源管理がタコだったりバグってたりするとその限りじゃなくなるわけだが。
602デフォルトの名無しさん:2008/03/11(火) 15:42:13
なるほど
603デフォルトの名無しさん:2008/03/11(火) 15:47:59
>>589
それは OS による。

>>596
LINQ =
 標準クエリ演算子(こういう(拡張)メソッドを用意しときなさいっていう規約)
 + クエリ式構文(C# / VB の言語拡張)
604デフォルトの名無しさん:2008/03/11(火) 16:46:58
>>600
OSがメモリリークしてたらその通り。
605デフォルトの名無しさん:2008/03/11(火) 16:59:37
アプリ終了時にメモリが解放されない場合はOSのバグであってプログラマに責任無しってことですか?
606デフォルトの名無しさん:2008/03/11(火) 17:23:06
マネージドな世界に限ればyes
607デフォルトの名無しさん:2008/03/11(火) 18:25:13
本当かよそれw
だとしたら「プロセス」ってそもそも何よw
608デフォルトの名無しさん:2008/03/11(火) 20:10:05
Windowsはプロセスが終了したら勝手に解放してくれてる。
COMとかの細かいことはよく知らない。
609デフォルトの名無しさん:2008/03/11(火) 20:27:27
アプリが終了しても、関連するプロセスが全て終了しているとは限らないのだ。
COMで起動したexcel.exeを終了してなくて、いつの間にか数十ものプロセスがメモリを占有してる、
という事例に出くわしたことがある。
610デフォルトの名無しさん:2008/03/11(火) 20:30:32
アウトプロセスサーバなんて糞喰らえ
611デフォルトの名無しさん:2008/03/11(火) 21:29:27
C# の場合でも一部イベントはちゃんとデタッチするように書いてあるね。たとえばこれとか。
http://msdn2.microsoft.com/ja-jp/library/microsoft.win32.systemevents.userpreferencechanged(VS.80).aspx
612デフォルトの名無しさん:2008/03/11(火) 21:33:05
それは別の話だよ
staticイベントにイベントハンドラを追加したまま放置すると
呼び出しターゲットのオブジェクトがGCの対象外になってメモリリークする
613デフォルトの名無しさん:2008/03/11(火) 22:48:54
9xはシステムリソース残り何%って、心配したなあ。
プログラムを起動すると減り、終了すると戻るが
プログラムによっては元の値まで戻らないと当時聞いていた。
これがリークしたからなんだろうなと今だから思える。
614デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/11(火) 23:27:05
params
616デフォルトの名無しさん:2008/03/12(水) 01:13:23
params char[]だと可変個の引数が許される
str.Split('a','b','c',...)でもいいし
配列を入れてもいい
617デフォルトの名無しさん:2008/03/12(水) 02:45:15
staticメソッドとそうでないメソッドはどう使い分けるものなのでしょうか?

public class Hoge{
 public int AddOne(int val) {
  return val + 1;
 }
}
のような引数の値を処理して返すだけのメソッドの場合は
staticにするのが普通なのでしょうか?
618デフォルトの名無しさん:2008/03/12(水) 03:01:36
>>616
なるほど。今までparamsの意味が分からなかったけどそういうことだったのね。
勉強になりました。サンクス。
619デフォルトの名無しさん:2008/03/12(水) 03:10:33
monthCalendarで方向キーで日付を移動しても選択したことにならないので
強制的にDateChangedイベントで
monthCalendar1_DateSelected(monthCalendar1, new DateRangeEventArgs(monthCalendar1.SelectionStart, monthCalendar1.SelectionEnd));
のようにDateSelectedを呼び出しました。
期待通りに、方向キーでの移動でもDateSelectedを呼び出せましたが、
方向キーで移動後にマウスで他の日付をクリックすると範囲選択になってしまいます。
期待する動作はドラッグ以外で範囲選択してほしくないのですが、上記の方法自体が間違っている(常套ではない)のでしょうか?
個人的には強制的にイベントを呼び出すのは良くないと思うのですが他に方法が思いつきません。
620619:2008/03/12(水) 03:27:22
問題提起箇所が複雑になってましたので整理させていただきます。
まず、方向キー入力後にマウスで日付をクリックすると範囲指定になるのはもともと仕様のようなので今回は質問から外します。
monthCalendar1_DateSelected(monthCalendar1, new DateRangeEventArgs(monthCalendar1.SelectionStart, monthCalendar1.SelectionEnd));
という強制的にイベントを呼び出す方法は正しいのでしょうか?という質問に絞らせてください。
過去ログを読んでみると>>363のような書き込みがあるのですが、
PerformClickのようなイベントをシミュレートするようなメソッドがどのイベントにも確実にあるのでしょうか?
621デフォルトの名無しさん:2008/03/12(水) 08:26:16
619に書いてあるような「壮大な勘違い」をするのはOOPとイベンドドリブンの意味が
全然わかってないから。

遠回りでもまずOOPを理解することを考えた方がいいんじゃないの?

「イベントを呼び出す」、なんて普通に書いてるけど、
揚げ足取りじゃなくて意味不明だよ。
まあ初心者にはありがちな「勘違い」の類ではあるけど。
622デフォルトの名無しさん:2008/03/12(水) 09:33:11
Guidやstringの場合は、まだ設定されていないという状態を
初期化のときに、Guid.Emptyなどを設定することによって
扱っているんですが、DateTimeのときはどうしたら良いのでしょうか?

DateTime.Emptyは無いですし‥‥
DateTime.MinValueを使っても良いもんでしょうか?
623デフォルトの名無しさん:2008/03/12(水) 10:03:33
DateTime?
624デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/12(水) 10:22:09
>>622
623も書いているけどnull許容型。
626デフォルトの名無しさん:2008/03/12(水) 10:24:09
>>619
OOPっていうかイベントはそんなに単純じゃないよ
君がやってるのはイベントハンドラ用のメソッドを呼び出してるだけ
別に問題ないけどイベントハンドラに直接処理を書かずに他のメソッドを作って
それをそれぞれのイベントハンドラから呼び出すようにした方が綺麗
627デフォルトの名無しさん:2008/03/12(水) 10:56:22
>>623
>>625

DateTimeってstructで値型だから、nullにはならないのではないでしょうか?
628デフォルトの名無しさん:2008/03/12(水) 10:57:04
null にならないから Nullable でラップするんだお
629デフォルトの名無しさん:2008/03/12(水) 10:58:21
int?とか書くとintまたはnullな型が出来る
DateTime?でnullになるDateTimeが出来る
値型じゃなくてclassだけど
630デフォルトの名無しさん:2008/03/12(水) 11:01:13
nullableは値が与えられているかどうかのフラグと値をもった値型だよ
==nullで比較できるのは構文糖衣
631デフォルトの名無しさん:2008/03/12(水) 11:01:19
>>627
http://msdn2.microsoft.com/ja-jp/library/1t3y8s4s(VS.80).aspx

>>629
Nullable<T>は構造体だから値型だぞ。
632デフォルトの名無しさん:2008/03/12(水) 11:07:58
VS2005で
http://uchukamen.com/Programming1/Menu/image2.gif
このようなメニューを作りたく思い、MenuStripを作り
RenderModeをSystemにしてみましたが出来ません。
VS2005では無理なのでしょうか?
よろしくお願いします。
633627:2008/03/12(水) 11:09:15
皆さんどうも有り難うございます。
nullableって、関数の引数でnullを許容するための構文だと思っていて、
何にでも使えるとは知りませんでした‥‥。びっくり。

どうも有り難うございました。
634デフォルトの名無しさん:2008/03/12(水) 11:11:45
>>632
何が出来ないんだよ。
635デフォルトの名無しさん:2008/03/12(水) 11:22:52
636デフォルトの名無しさん:2008/03/12(水) 11:40:18
ツールボックスを右クリック→アイテムの選択→MainMenu
お勧めしない
637デフォルトの名無しさん:2008/03/12(水) 11:41:29
>>635
そのサンプルはMenuStripじゃなくてMainMenuなんじゃね?
知らんけど。

MenuStripならToolStripSystemRenderer継承したクラス作って
好きなように描画するようにしたらいい
638デフォルトの名無しさん:2008/03/12(水) 11:42:04
VisualStyleを切ればいいよ
639デフォルトの名無しさん:2008/03/12(水) 11:56:15
>>636
ありがとうございました。
希望の動作を実現することが出来ました。
ところで、どうしてお勧めできないのですか?
>>638
menuStripにVisualStyleというプロパティはありませんでした。
640デフォルトの名無しさん:2008/03/12(水) 11:58:49
MenuStripに取って代わられたから
Obsolete来ても知らないよ
641デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/12(水) 15:59:40
fileListText = fileListAll.Where(s => Path.GetExtension(s.ToLower()) == ".txt").ToArray();
645デフォルトの名無しさん:2008/03/12(水) 16:08:17
string[] fileListText = Array.FindAll(fileListAll, item => System.IO.Path.GetExtension(item).ToLower() == ".txt");
でも良い
646619:2008/03/12(水) 16:37:49
>>621
はい、多分そうじゃないかと思ったのでヒントを頂きたく質問しました。

>>626
なるほど。
それだとごく簡単に共通の事が出来ますね。
PerformClickのようなものがあるので他のイベントにも同じような呼び出しでいいのかと思いました。
とすると共通の処理がないときでもイベントハンドラに直接処理を書くのは良くないのですか?
それとも共通の処理が必要になった時にメソッドを分ければいいのでしょうか??
647デフォルトの名無しさん:2008/03/12(水) 17:10:58
>>646
>とすると共通の処理がないときでもイベントハンドラに直接処理を書くのは良くないのですか?
いいえ。直接処理を書いて問題ないです。

>それとも共通の処理が必要になった時にメソッドを分ければいいのでしょうか??
メソッドを外に書いてそれを呼び出す方がスマートになる場合もあるし、
わざわざそんなことせんでも良い場合もある。そんなに気にしなくていいよ。
俺なんかはbutton1_Click(null, null)なんかで呼び出したりするのは別に汚いともなんとも思わんし。
if(result==false)と書くか、if(!result)と書くかみたいなもんで、ただの趣味の問題。
気にするだけ無駄だと思う。
648デフォルトの名無しさん:2008/03/12(水) 17:16:30
さすがにbutton2のイベントハンドラからbutton1_Clickを呼び出すのはちょっと…
649647: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デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/12(水) 18:18:39
>>647-650
ありがとうございます!
ということは>>620のような書き方でも問題ないということですか??

イベントの引数が違う時は>>650のようには出来ないので>>649のようになると思うのですが、
>>620でも趣味の範囲という解釈でいいんでしょうか。
652647:2008/03/12(水) 18:25:17
>>651
俺はそんなんでいいと思うけどね。
653デフォルトの名無しさん:2008/03/12(水) 18:25:49
>>652
ありがとうございました。
654デフォルトの名無しさん:2008/03/12(水) 18:35:42
>>642
ありがとうございます。
655デフォルトの名無しさん:2008/03/12(水) 18:40:02
>>651
ちなみに、強制的にイベントを発生させるということを厳密に行いたいのであれば、
monthCalendarを継承したカスタムクラスで、イベントデリゲートを呼び出してくれるようなメソッドを公開する。

public PerformDataSelected(object sender, DateRangeEventArgs e){
 if(this.DataSelected != null)
  this.DataSelected(sender, e);
}

ほんで外からそのメソッドを呼び出せばいい...と思う。
もしかしたら俺が何か勘違いしてるかもしれん。
興味あったら試してみて。
656デフォルトの名無しさん:2008/03/12(水) 18:40:52
>>655
OnDataSelectedを呼ぶべき
657デフォルトの名無しさん:2008/03/12(水) 18:40:59
最初は動けば良いのではないかと、そういうものは楽しさの中から築きあげて行けば良いし。
658655:2008/03/12(水) 18:41:32
さっそくミス発見。

public void PerformDataSelected(object sender, DateRangeEventArgs e){
 if(this.DataSelected != null)
  this.DataSelected(sender, e);
}

voidが抜けてたわ
659655:2008/03/12(水) 18:42:43
>>656
ほうほう。
実はmouthCalendarというものを使ったことがないもんでなw
勉強になりますw

>>651
だそうです。
660デフォルトの名無しさん:2008/03/12(水) 18:47:04
MonthCalendarとか関係なくイベントはクラス外から直接呼べない
だから派生クラスから呼び出す手段としてOn**メソッドを用意する
661デフォルトの名無しさん:2008/03/12(水) 18:50:17
>>650
趣味の問題、か。
議論の余地なく間違ってると思うよ。
こういう人は「抽象化」の意味と意義がわかってないんじゃないの。
662デフォルトの名無しさん:2008/03/12(水) 19:00:45
「状況に応じて適切に判断」かな
好みじゃなくて使い分けるもの
663655:2008/03/12(水) 19:08:09
>>660
あらま、やはり勘違いしてたみたいね。
派生クラスからでもイベントは呼べないのか。
失礼しました。
>>655はスルーして下され。
664デフォルトの名無しさん:2008/03/12(水) 19:15:39
そもそもイベントって「呼ぶ」ものじゃないでしょw
英語だとInvokeとかRaiseだから「起こす」とでも言うのが正解じゃないの?
665デフォルトの名無しさん:2008/03/12(水) 19:19:08
>>621 = >>661 だと思うけど反論あるなら具体例を示すべきだと思うよ
666643: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デフォルトの名無しさん:2008/03/12(水) 19:43:21
匿名メソッドほんとに冗長だな
設計時から経過措置として認識されてて,後で捨てても影響が出ないように
明示的すぎる書き方になってるのかな
668デフォルトの名無しさん:2008/03/12(水) 19:46:02
>>665
ええっと、反論ってのは具体例を挙げて行うものなんでしょうか?
それとも理由を添えろって言いたいの?

まあいいやまず>>661で言いたかったことをはっきりしておくと、要するに
>>649の前者のコードは議論の余地なく×で、これは趣味の問題なんかではないということ。

後者のコードは普通は△だが、確かにこのように書いた方がわかりやすい場合も
稀にあるかもしれないことは認める。

通常は>>650の書き方を選択すべき。

>>649の前者がダメなのは、
(1) button1_Click()が羊頭狗肉になってる。
(2) だからbutton2_Click()の処理内容が把握しづらい。
669デフォルトの名無しさん:2008/03/12(水) 20:21:11
>>668
シグネチャが違うイベントの場合を示せよ。
670デフォルトの名無しさん:2008/03/12(水) 20:28:45
だから,好みの問題じゃないってことだろ
判断基準は人それぞれとしても,場合によって適切に使い分けるもの
671デフォルトの名無しさん:2008/03/12(水) 20:33:14
なんだよ示せよって偉そうにw
なんでこういう日本語も満足に使えないたわけってのは例外なく口調が偉そうなのかね。

シグネチャが違うってどういうこと?
>>668に「通常は」と書いたつもりだけど。
EventHandler<T>と違うシグネチャのイベントを扱うのって通常かな。
672デフォルトの名無しさん:2008/03/12(水) 22:02:39
>>655>>663
OnDateSelected使えって指摘は既出の通りで、
引数として渡すイベントソース・データを外部から取るのはだめ
ソースはthis固定、データはコンストラクタの引数だけ外部から取って自前で生成
その例だとこんな感じ

public PerformDateSelected(DateTime start, DateTime end) {
  OnDateSelected(this, new DateRangeEventArgs(start,end));
}
673デフォルトの名無しさん:2008/03/12(水) 22:50:08
>>670
>判断基準は人それぞれとしても,場合によって適切に使い分けるもの

それこそが、まさしく好みとか趣味という言葉の指し示すものである。
674655:2008/03/12(水) 23:08:50
>>672
なるほど、勉強になった。Thx
675デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/12(水) 23:17:25
あほ
677デフォルトの名無しさん:2008/03/12(水) 23:30:09
ばか
678デフォルトの名無しさん:2008/03/12(水) 23:38:10
分布図
679デフォルトの名無しさん:2008/03/13(木) 11:59:03
delegate int Hoge();
Hoge hoge;

hoge += foo1;
hoge += foo2;
hoge();

とするとfoo1, foo2と呼ばれfoo2の返り値だけが返りますが
hogeに登録されているものを個々に呼び出し
それらの返り値を得たいのですが、どうやるのでしょうか?
680デフォルトの名無しさん:2008/03/13(木) 12:03:34
>>679
GetInvocationListでDelegate[]を取得するとか。
681デフォルトの名無しさん:2008/03/13(木) 12:09:24
>>679
素直にrefまたはoutで渡せばいいじゃん。
682デフォルトの名無しさん:2008/03/13(木) 12:28:19
>>680
thx
Delegateクラスのメンバ一覧見てたのに全然気が付かなかった・・・
683デフォルトの名無しさん:2008/03/13(木) 16:31:24
属性の書き方なんですが、下記の2つに違いはあるのでしょうか?

[Description("ほげほげ"), DefaultValue(false)]
public bool HogeHoge {〜}

[Description("ほげほげ")]
[DefaultValue(false)]
public bool HogeHoge {〜}
684デフォルトの名無しさん:2008/03/13(木) 16:42:07
ない
685デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/14(金) 01:18:05
YES
687デフォルトの名無しさん:2008/03/14(金) 01:48:14
>>671
早く答えろよ
688685:2008/03/14(金) 01:53:09
>>686
ありがとうございました。
689デフォルトの名無しさん:2008/03/14(金) 02:19:53
なんからのネイティブリソースを確保してたらアウトだけどね
690デフォルトの名無しさん:2008/03/14(金) 04:06:28
private void Performed(object sender, EventArgs e)
{
処理;
}
でいいじゃない。
やらないけど。
691デフォルトの名無しさん:2008/03/14(金) 08:30:07
あほ
692デフォルトの名無しさん:2008/03/14(金) 08:32:10
なんであほなのか詳しく
693デフォルトの名無しさん:2008/03/14(金) 08:54:51
テキストを画像に変換したいのですが、
どのように処理したらいいでしょうか?
また、変換後の画像の大きさ(高さ・幅)は取得できるでしょうか?

低レベルですみませんがよろしくお願い致します。
694デフォルトの名無しさん:2008/03/14(金) 09:06:28
>>693
> テキストを画像に変換したいのですが、
意味がわからん
695デフォルトの名無しさん:2008/03/14(金) 09:12:38
GDI+
696デフォルトの名無しさん:2008/03/14(金) 09:17:15
>>694
例えば「abcde」と入力したら、
abcdeと書かれた画像を生成することです
697デフォルトの名無しさん:2008/03/14(金) 09:22:29
System.Drawing
698デフォルトの名無しさん:2008/03/14(金) 09:24:50
>>697
ありがとうございます
生成後のBitmapのサイズは取得できますか?
699デフォルトの名無しさん:2008/03/14(金) 09:40:29
お前には無理。
700デフォルトの名無しさん:2008/03/14(金) 10:05:18
>>698
TextRendere.MeasureTextとかで。
701デフォルトの名無しさん:2008/03/14(金) 10:09:41
>>700
ありがとうございます!
本当に助かりました!
702デフォルトの名無しさん:2008/03/14(金) 10:14:34
マイクロソフトがC#用ネイティブコンパイラの製作を発表
これでC#は事実上最強言語になったわけだ
http://an.to/?microsoft01news
703デフォルトの名無しさん:2008/03/14(金) 10:24:23
皆さん、>>702はクリックしないようにね。
704デフォルトの名無しさん:2008/03/14(金) 10:27:37
>>702
ただの釣り
開くとビルゲイツの若かりしころの写真が出てくるだけ
705デフォルトの名無しさん:2008/03/14(金) 10:32:03
ウィルスバスター2008役にたたねぇorz
706デフォルトの名無しさん:2008/03/14(金) 10:36:19
これって何?
ググってみたらan.to/?で始まるのがあちこちに張りまくられてるみたいだけど。
707デフォルトの名無しさん:2008/03/14(金) 10:51:51
>>704
写真が出てくるだけじゃないんだが、
telnetつかってごにょごにょっしようとする。
708デフォルトの名無しさん:2008/03/14(金) 10:54:09
>>706
「これ」が何を指しているのか分かりかねるが、
URLのことなら書いてる通りの転送サービスじゃないのか
内容のことなら見てないので知らない
709デフォルトの名無しさん:2008/03/14(金) 11:29:51
ProcessStartInfoのArgumentsにスペースを含むファイルを指定しようとしましたが出来ません...
710デフォルトの名無しさん:2008/03/14(金) 11:54:44
""で囲め
711デフォルトの名無しさん:2008/03/14(金) 12:04:00
どうもありがとうございました。
712デフォルトの名無しさん:2008/03/14(金) 12:20:18
GDI+で放射状にグラデーションをかける方法はありますか?
WPFのRadialGradientBrushみたいなことがしたいのですが
713712: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デフォルトの名無しさん:2008/03/14(金) 12:50:20
たびたびの質問申し訳ありません。
SendKeysでスペースキーを送信したいのですがどのようにすればよいのでしょうか。
よろしくお願いします。
715デフォルトの名無しさん:2008/03/14(金) 13:08:58
>>714
半角スペースをSendすればいい予感がしました
716デフォルトの名無しさん:2008/03/14(金) 13:13:59
>>715
10回連続で送信したく思い、
SendKeys.SendWait("{ 10}");
のそうにやってみたわけですが出来ないのでここに書き込みました。
717デフォルトの名無しさん:2008/03/14(金) 13:18:52
>>716
10回forを回すとか10個の半角スペースをSendすればいい予感がしました
718デフォルトの名無しさん:2008/03/14(金) 13:19:33
>>717
それ以外に方法が無いのならばそれでしますが...
719デフォルトの名無しさん:2008/03/14(金) 13:24:04
それ以外に方法がないんだが。
720デフォルトの名無しさん:2008/03/14(金) 13:26:37
どうもありがとうございました。
721デフォルトの名無しさん:2008/03/14(金) 15:25:46
このスレの流れを見てるとなんか面白い
722sage:2008/03/15(土) 00:46:41
くだらない質問ですが、ゲームをつくりたいとおもって
とりあえずC#でゲームをつくりたいとおもうのですが、
どのようにして習得(勉強)したほうがよいのでしょうか?
ネットでしらべるとC#の手引きのようなものがのってますが、
そういうものでいいのでしょうか?
おしえてください。
723デフォルトの名無しさん:2008/03/15(土) 00:48:38
>>722
諦める マジオヌヌメ
724デフォルトの名無しさん:2008/03/15(土) 00:50:25
>>722
そういうものでいいのです。
725722:2008/03/15(土) 01:56:50
>>724
わかりました。とりあえずそこで勉強してみます。
一応参考までに聞きたいのですが皆さんはどうやってC#を習得したのですか?
できればおしえてください
726デフォルトの名無しさん:2008/03/15(土) 02:08:48
>>725
ふつーに本を読んで。
727デフォルトの名無しさん:2008/03/15(土) 03:41:30
すいません質問です。
現在forが入れ子で4段になっているのですが、
一番内側の場所から一気に1段目や2段目のforまでbreakするにはどうすればいいのでしょうか?
728デフォルトの名無しさん:2008/03/15(土) 03:42:19
goto
729デフォルトの名無しさん:2008/03/15(土) 03:46:39
あー!!
忘れてました、そうですね。C#には普通にありましたねgoto
730デフォルトの名無しさん:2008/03/15(土) 03:59:29
>>725
C# 入門 でググレ。
俺はそのサイトと@ITとMSDNとぐぐる大先生だけで独学で習得したぞ。
細かいところとかは.NET関連の質問スレとかをROMったりしても勉強になった。
本なんぞ別に買わんでもネットで十分OOPはマスターできる。
731デフォルトの名無しさん:2008/03/15(土) 05:57:25
本買うよりネットで勉強したほうが効率いいですか?
732デフォルトの名無しさん:2008/03/15(土) 06:45:38
ネットの長所・短所、書籍の長所・短所がわかってればおのずと答えは出るよね
733デフォルトの名無しさん:2008/03/15(土) 07:49:39
一度は本を通して読んだ方が近道だと思うが
734デフォルトの名無しさん:2008/03/15(土) 07:57:59
まあどっちにしても、C#とかオブジェクト指向とかの知識はどうにでもなるだろ。
どんなゲームを作りたいのかにもよるんだろうけど、
その先に「画面の描画」って大きなハードルがある気がするなあ。
735デフォルトの名無しさん:2008/03/15(土) 09:02:37
string.Format()で、文字列をn桁の左寄せで表示するにはどうすればいいでしょうか?
printf("%10s %s",first, second);
と同じようなことをしたいのです。

例えば、
aaa xxxxx
bbbbb yyyy
cc zzzzzzzzzzz
のような文字列を表示するときに、
左の項目を最低10文字分とるようにしたいのです
よろしくお願い致します。
736デフォルトの名無しさん:2008/03/15(土) 09:20:34
PadLeft
737デフォルトの名無しさん:2008/03/15(土) 09:23:22
>>735
string.Format("{0,-10} {1}", first, second)
738デフォルトの名無しさん:2008/03/15(土) 09:28:22
>>737
ありがとうございます
カンマで区切るのですか
MSDNにも載ってないので助かりました
739デフォルトの名無しさん:2008/03/15(土) 09:33:18
>>738
載ってるよ? 複合書式設定
740デフォルトの名無しさん:2008/03/15(土) 09:43:25
複数のwavを繋げて1つにするプログラムを作りたいのですが、どうすればいいでしょうか?
何かライブラリDLLはあるでしょうか?よろしくお願いします。
741デフォルトの名無しさん:2008/03/15(土) 09:46:14
class TreeEx : TreeView {
public TreeEx() { this.Nodes.Add("ほげ"); }
}

こんなクラスをフォームに貼り付けて実行してみたら
"ほげ"というルートノードが2つ作られました。
おかしいと思ってInitializeComponent()を見てみたら
"ほげ"ノードを追加する処理が生成されてました。
勝手に追加されると困るのですが、これを止めることってできないんですか?
742デフォルトの名無しさん:2008/03/15(土) 09:58:20
>>741
デザイナが自動生成しないようにするやり方はわからないけど、
とりあえずDesignModeなら追加しないってやれば回避できると思う。
デザイナで見れなくなるけど。
743デフォルトの名無しさん:2008/03/15(土) 10:06:53
あと、試してないし出来るかどうかもわかんないけど、
Nodesプロパティをoverrideして、[Browsable(false)]つけてみるとか。
744デフォルトの名無しさん:2008/03/15(土) 11:21:17
ShouldSerializeなんたらだったかのメソッド書いたらいいんじゃね?
745デフォルトの名無しさん:2008/03/15(土) 11:50:40
ttp://dobon.net/vb/dotnet/control/lvitemsort.html にあるclass ListViewItemComparerを
引数をつけて呼び出して使おうとしているのですがエラーになったりちゃんと動作したりします。
エラーの内容から考えるとどうもe.Columnと_columnの数字が異なる事があるらしく
比較に失敗してしまうようなのですが、どうしてでしょうか?
746デフォルトの名無しさん:2008/03/15(土) 11:55:59
>>742-744
Browsable属性ではできなかったので

public bool ShouldSerializeNodes() { return false; }
public new TreeNodeCollection Nodes { get { return base.Nodes; } }

を書いたら望み通りになりました。
高機能なのはいいんだけどいろいろメンドクサイデスネ
747745:2008/03/15(土) 12:09:07
'4' の InvalidArgument=Value は 'index' に対して有効ではありません。
パラメータ名: index

だからインデックスではなくてそのlistviewitemのsubtime[4]が見つからないのですね。
でも、何で動いたり動かなかったりするのでしょう?。
748デフォルトの名無しさん:2008/03/15(土) 12:11:54
引数に渡ってきた値ぐらい確認しろよ
749745:2008/03/15(土) 12:25:57
サブアイテムは20以上あるのですが何故動いたり動かなかったりするのかわかりません。
IComparer.Compare(object x, object y)のオブジェクトは何処から来ているのでしょうか?。
e.Column から __column にインデックスが入ってそれを基準にオブジェクトが返ってきて
いるのだと思うのですがIComparer.Compareの内容はどうやったら見れますか?。
750745:2008/03/15(土) 12:34:18
あぁ、お騒がせしましたorz。たぶん、わかりました。
IDEって凄く便利ですね。デバッグ字に変数にカーソルを合わせると内容まで表示してくれるとは
今まで気付きませんでした。
751デフォルトの名無しさん:2008/03/15(土) 13:34:22
このスレの住人なら知っていますね、あの糞開発ツールのことを

・自分のプログラムのバグなのかコンパイラのバグなのかわからない
・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している
・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている

糞だけど、政治的な理由で無理やり使わされているんですよね
もういい加減、我慢するのはやめませんか?

・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。
 上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。
・あの糞開発ツール提供会社には「糞開発ツールは話にならない」と突き放しましょう。
 バグレポートなどしてはいけません。改善要求などもってのほかです。
 あの会社はあなたたちのことをテスター/モルモットとしか思っていません。
・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」
 なんて話が出たら力強く机を叩き、会議室を出ましょう。
 あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。

糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
752デフォルトの名無しさん:2008/03/15(土) 13:47:19
リッチテキストボックスまたはテキストボックスのオーナードローってできますか?
753デフォルトの名無しさん:2008/03/15(土) 13:51:36
俺ならできる
754デフォルトの名無しさん:2008/03/15(土) 14:56:23
>>753
君ならできる。やればできるさ!
755デフォルトの名無しさん:2008/03/15(土) 16:33:15
俺にもできる?
756デフォルトの名無しさん:2008/03/15(土) 17:18:42
無理
757デフォルトの名無しさん:2008/03/15(土) 17:24:14
質問です。
Microsoft Visual C# 2008をつかっていいるのですが、
ビルドして実行すると一瞬だけ(入力まちがあるとき以外)表示されて
すぐにきえるのですが、どうすればきえなくなりますか?
おしえてください
758デフォルトの名無しさん:2008/03/15(土) 17:25:37
ブレークポイント
759デフォルトの名無しさん:2008/03/15(土) 17:26:48
消えないようにするオプションとかなかったっけ?
760デフォルトの名無しさん:2008/03/15(土) 17:27:43
無いらしい
761デフォルトの名無しさん:2008/03/15(土) 17:34:57
Console.ReadLine();でも入れれば
762デフォルトの名無しさん:2008/03/15(土) 17:35:44
それだったらブレイクポイントのほうが。
763デフォルトの名無しさん:2008/03/15(土) 17:37:28
#if DEBUGでいいじゃない
764デフォルトの名無しさん:2008/03/15(土) 19:01:46
>>757
コマンドプロンプトからexeを起動しろ
765デフォルトの名無しさん:2008/03/15(土) 19:10:31
マルチスレッドのサンプルでは、よくマルチスレッドにするメソッドには
staticをつけてるけど、
ttp://msdn2.microsoft.com/ja-jp/library/ms171728.aspx
を見るとつけてない。
つけるのとつけないのとではどう違うの?
766デフォルトの名無しさん:2008/03/15(土) 19:12:48
マルチスレッドかどうかとstaticかどうかは関係ない
767デフォルトの名無しさん:2008/03/15(土) 19:14:05
static つけるとマルチスレッドでより扱いにくくなると思うんだが。
768デフォルトの名無しさん:2008/03/15(土) 19:17:40
>>767
そのメソッド自体を同時にひとつしか動かさないなら、別に変わらないと思うけど。
769デフォルトの名無しさん:2008/03/15(土) 19:19:35
オブジェクトの状態に依存しないメソッドを意識したらstaticが多くなるんじゃね
770デフォルトの名無しさん:2008/03/15(土) 19:25:42
>>757
キーアサイン変えてるからキーわからないけど、ステップオーバー押していって実行すれば?
771デフォルトの名無しさん:2008/03/15(土) 19:26:10
>>768
そういう保証が必要な時点で
扱いにくくなってるということだろう?
772デフォルトの名無しさん:2008/03/15(土) 19:34:51
>>757
VS上なら「デバッグ開始」じゃなくて「デバッグなしで開始」だと終了後にpauseしてくれる
773765:2008/03/15(土) 19:35:47
まあ別に気にしないでいいってことなんだな。
ありがとう。
774デフォルトの名無しさん:2008/03/15(土) 21:39:03
>>773
気にしないでいいというより気にするべきところが違うという話では。
775デフォルトの名無しさん:2008/03/16(日) 00:19:41
System.Windows.Forms.TextBoxを拡張して、
入力できる文字を制限したテキストボックスを作りたいのですが、
どのメソッドをオーバーライドするのが適切ですか?
TextChangedだとテキストが変わってから戻すことになりそうだし、
KeyPressだとコピペに対応できなさそうなイメージがあって、
msdnみてもよくわかりません。
教えて。
776デフォルトの名無しさん:2008/03/16(日) 00:22:13
>>775
俺も知りたい。
入力中に入力値を評価するのはどうやるんだろうな。
777デフォルトの名無しさん:2008/03/16(日) 00:28:23
>>775
wndproc
778デフォルトの名無しさん:2008/03/16(日) 00:37:22
>>775
コピペ対応はあきらめて(ShortcutsEnabled = falseと、コンテクストメニューにダミーをかます)
OnKeyPressで純粋にキー入力にだけ対応するのが一番簡単。

コピペにも対応させたいのならTextChanedで二重にチェックするのが一番簡単で確実じゃないかな。
779デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/16(日) 02:18:33
ListView.ListViewItemSorter プロパティ
782デフォルトの名無しさん:2008/03/16(日) 10:31:14
>>777
>>778
ありがとうございます。
早速実装してみます。
783デフォルトの名無しさん:2008/03/16(日) 10:46:17
継承Controlを作成するときに
Controlがフォーカスされたときのイベントってどこに書くんですか?

OnClickかとも思ったのですが、これだとTabキーで移動してきたときには動きませんし・・・
784デフォルトの名無しさん:2008/03/16(日) 10:57:00
Enter/OnEnter
785デフォルトの名無しさん:2008/03/16(日) 11:06:56
>>784
それかー。
ありがとーございます。
786デフォルトの名無しさん:2008/03/16(日) 12:10:23
もっと低レベルなのは
OnGotFocus/OnLostFocus
787デフォルトの名無しさん:2008/03/16(日) 15:03:34
PerlとかRubyでゆーWWW::MechanizeみたいなスクレイパってC#に存在する?
それとDB使ったツールを作って配布したいんだけど、PerlとかRubyだと一般ユーザに使ってもらえないので…
788デフォルトの名無しさん:2008/03/16(日) 15:11:53
rubyならexerbつかってexeにすりゃいいじゃん。
スレチだけど
789デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/16(日) 17:13:53
エラーメッセージは完全な状態でこぴぺしろ
792デフォルトの名無しさん:2008/03/16(日) 17:15:13
>>790
> bool bmi = m / ((n / 100) * (n / 100)); 

ここかな?

double bmi = ・・・
みたいにしてみれば?
793デフォルトの名無しさん:2008/03/16(日) 17:17:46
caseには定数式以外は使えない
794デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/16(日) 21:04:38
enum型の要素に自動的に割り当てられる値は、
[Flags]属性をつけようがつけまいが同じなのでしょうか?

どこかで0,1,2,4になるようなことを読んだような記憶があるのですが、それは勘違いで、
自分で明示的に割り当てなければいけない。というのが正解なのでしょうか?
796デフォルトの名無しさん:2008/03/16(日) 21:07:23
はい。勘違いです
797デフォルトの名無しさん:2008/03/16(日) 21:55:31
>>795
俺もそんな話をどっかで読んだな。
どういう属性をつけるかとか、ぜんぜん覚えてないけど。
798デフォルトの名無しさん:2008/03/16(日) 21:57:17
[Flags]付けるとビットフィールドになるんだろ。
799デフォルトの名無しさん:2008/03/16(日) 22:00:40

ビットフィールドには[Flags]を付ける「お約束」
800デフォルトの名無しさん:2008/03/16(日) 22:20:11
実際に試したほうが早いし正確なのに
801デフォルトの名無しさん:2008/03/16(日) 22:22:13
聞いた方が早い。
802デフォルトの名無しさん:2008/03/16(日) 22:23:41
ググってみたけど、Flagsでいいんじゃね?
http://www.melma.com/backnumber_120830_2325135/

↑C/C++の世界では、これは「ビットフィールド」とは言わんと思うけど。C#の世界では知らんけど。
803デフォルトの名無しさん:2008/03/16(日) 22:25:49
>>802 の続き
よく見たら、自動で割り当てるわけじゃなくて、自分で書かないといけないのか。
804デフォルトの名無しさん:2008/03/16(日) 22:25:53
そのページは大嘘過ぎるな
805デフォルトの名無しさん:2008/03/16(日) 22:27:16
[Flags]を付けないと、3とか5の値をとれない。
806デフォルトの名無しさん:2008/03/16(日) 22:28:21
ハァ?
807デフォルトの名無しさん:2008/03/16(日) 22:32:49
[Flags]
public enum ABC { Z = 0, A = 1, B = 2, C = 4}

[Flags]を付けないと
ABC ab = A|B;
でエラーになる。
808デフォルトの名無しさん:2008/03/16(日) 23:00:19
ならないよ
エラーになるような違いが出るんだったら属性じゃなくて言語に直接組み込まれてるだろ
809デフォルトの名無しさん:2008/03/16(日) 23:09:29
(ABC.A | ABC.B).ToString()で違いが出るね
やっぱりコンパイラの動作とは直接関係なくてMSとのお約束なんじゃね
810デフォルトの名無しさん:2008/03/16(日) 23:17:53
そもそもそのためのFlagsAttributeなんじゃないんでしょうかw
811デフォルトの名無しさん:2008/03/16(日) 23:35:39
どこが面白いのかわからない
812デフォルトの名無しさん:2008/03/16(日) 23:40:54
まあさすがに自動でビットフィールドにしてくれるんだったら
属性じゃなくて flags enum ABC { … } みたいにするわな
813デフォルトの名無しさん:2008/03/17(月) 04:02:24
Form1を閉じても、スレッド2が動いたままなので、
Form1を閉じたら、スレッド2を終了したいのですが、どのようにすれば良いのでしょうか?
814デフォルトの名無しさん:2008/03/17(月) 04:32:05
Form1を閉じる動作のときスレッド2を終わらせる
815デフォルトの名無しさん:2008/03/17(月) 04:54:36
>>814
それの書き方が分からないよ><
816デフォルトの名無しさん:2008/03/17(月) 05:27:37
>>815
Form のイベント全て試す
817デフォルトの名無しさん:2008/03/17(月) 14:19:34
スレッド2はループ中なんか?
818デフォルトの名無しさん:2008/03/17(月) 14:35:03
form1.Closed += (obj,e) => thread.Abort();
こんなんじゃないか?
819デフォルトの名無しさん:2008/03/17(月) 16:09:07
いちいちそんなんでラムダ式使うなカス
820デフォルトの名無しさん:2008/03/17(月) 16:16:57
smallint型のデータをSqlDataReaderを使って取得し、
int型変数へ入れるにはどうすればよいですか?
List<int>へループで入れたいが 一部smallint型が
ある場合に上手く出来なくて困ってます。
821デフォルトの名無しさん:2008/03/17(月) 16:52:46
>>819
むしろそんなんだからラムダ式使うんじゃないかと。
822デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/17(月) 18:33:40
>>822
>label8.Text = (d.ToString()); 
GUIスレッド以外からフォームにアクセスしちゃダメ。
close1をvolatileにするか読み書き時にlockする。

BackgroundWorkerの使用をすすめる。
824デフォルトの名無しさん:2008/03/17(月) 18:47:22
そもそもTimerじゃいかんのかと思ってしまうサンプルだ
825デフォルトの名無しさん:2008/03/17(月) 19:11:01
>>821
ぶわぁか、こんなんでC#3.0にしてどうする。
せめて匿名メソッドだうんこ。
826デフォルトの名無しさん:2008/03/17(月) 19:12:46
>>825
匿名メソッドは面倒だよ。
なげーもん。ラムダ式使ったら2.0には戻れんね。
827デフォルトの名無しさん:2008/03/17(月) 19:14:33
C#やめてRuby(笑)でもやってろモルモン。
828デフォルトの名無しさん:2008/03/17(月) 19:17:24
言語の進化についていけない落伍者か
Cでもやってりゃいいのに
829デフォルトの名無しさん:2008/03/17(月) 19:26:29
C++から来てるとλ式とかは読みにくいな
830デフォルトの名無しさん:2008/03/17(月) 19:40:15
僕はくもん式上がりなのでλ式は余裕です。
831デフォルトの名無しさん:2008/03/17(月) 19:43:04
C++もそっちの方向でしょ
832デフォルトの名無しさん:2008/03/17(月) 19:44:34
C++にラムダ式が加えられても落伍者達はわからんわからんとぼやくんだろうな
833デフォルトの名無しさん:2008/03/17(月) 19:59:52
すみませんλって言いたいだけみたいなのですぐに回収します
λ......
834デフォルトの名無しさん:2008/03/17(月) 20:01:55
λ式は書けても高階関数は書けないんでしょ?
835デフォルトの名無しさん:2008/03/17(月) 20:05:56
書けるに決まってるだろ
836デフォルトの名無しさん:2008/03/17(月) 20:08:03
Enumerableクラスなんか高階関数のお花畑
837デフォルトの名無しさん:2008/03/17(月) 20:28:33
>>829
俺、C#よりC++をよく使うが、ラムダ式が羨ましくて仕方ないんだが。
838デフォルトの名無しさん:2008/03/17(月) 20:37:26
ここ1年ずっとC#使ってきたらC++書くのがきつくなった・・・
839デフォルトの名無しさん:2008/03/17(月) 20:39:29
すみません、質問いいですか?

FileSystemWatcherってありますよね?
あれ凄くイヴェントを取り逃がすような気がするんですけど皆さんどうですか?

使い方がおかしいんでしょうけど、どうおかしいのかすら判りません。

例えばDeletedイベントハンドラってPathで指定したディレクトリ内の
Filter指定したファイルが消されると発生するんですよね?
840デフォルトの名無しさん:2008/03/17(月) 20:41:06
っていうか、ラムダ式って所詮、匿名デリゲートの焼き直しなのに何をそんなに目くじらたてるんだろう。
おまけで式木に変換される機能がついたけど、普通に使う分には匿名デリゲートにしかならない。
今思えば匿名デリゲートの記法を delegate(...){...} にしたのが失敗で、
先にラムダ式を導入していたらこの記法は絶対導入しなかったって中の人も言ってるくらいなのに。
841デフォルトの名無しさん:2008/03/17(月) 20:41:50
イヴェント
842デフォルトの名無しさん:2008/03/17(月) 20:45:54
1.匿名メソッドを理解、使えるようになる
2.ラムダ式の便利さに気づく
3.ラムダ式は式木でも書けることに気づく
4.もっと複雑な式木を書きたくなる
5.某カッコだらけの言語の存在を知る
6.某カッコだらけの言語の奥深さを知る
7.某カッコだらけの言語で悟りを開く
843デフォルトの名無しさん:2008/03/17(月) 20:50:17
C#である変数を宣言するときに、アドレスを指定するにはどうすれば
いいですか?
また、アドレスから値を得るにはどうすればいいですか?
844デフォルトの名無しさん:2008/03/17(月) 20:55:07
アドレスを指定するって何だよ
変数のエイリアスはつくれねえぞ
845デフォルトの名無しさん:2008/03/17(月) 20:58:40
すいません。。。
質問しなおします。

ある変数Aのアドレスが分かっているとしたとき、アドレスから変数A
の値を取得するにはどうすればいいでしょうか?
846デフォルトの名無しさん:2008/03/17(月) 20:59:40
>>840
>>825

>>839
InternalBufferSizeを増やす。
847デフォルトの名無しさん:2008/03/17(月) 21:25:22
>>845
アドレスってどういう意味で言ってんの?
*(int*)address
まさかこういうことじゃないよね
848デフォルトの名無しさん:2008/03/17(月) 21:27:32
>>845
unsafeでぐぐれ
849845:2008/03/17(月) 21:39:03
>847-848
アドバイスありがとうございます。
変数につけられたメモリ上での番号のことを言っています。

簡単なコードを示していただけませんか?
例えば、メモリアドレス1000の値を取得したり、代入する場合など。。。

お願いします。
850デフォルトの名無しさん:2008/03/17(月) 21:39:20
>839
explorerでけすと、ごみ箱へのMoveだから見逃す、というオチじゃないの?
851デフォルトの名無しさん:2008/03/17(月) 21:39:39
unsafeつけるとCと変わらない書き方ができる
852デフォルトの名無しさん:2008/03/17(月) 21:46:21
>>849
int a = 123; int addr = (int)&a; int aValue = *(int*)addr;
こういうこと?
超危険なだけで何の意味もないからせめて普通にポインタ使えよ
853デフォルトの名無しさん:2008/03/17(月) 21:57:22
1つ値を読み取りたいだけなら、Mashal.Read*メソッドがお手軽かもしれない。
854845:2008/03/17(月) 22:02:57
>>852
アドバイスありがとうございます。

示していただいたコードで、変数のアドレスを取得することができました。
しかし、アドレス1000に対しての代入?についてはまだ疑問が残ります。。。

849の繰り返しになりますが、例えばメモリアドレス1000に格納されている
データを取得するにはどうすればいいでしょうか?
また、メモリアドレス1000に値を格納するにはどうすればいいでしょうか?
855デフォルトの名無しさん:2008/03/17(月) 22:10:11
釣りだろjk

そんなことをする必要はないし
する必要があるならC#を使うはずがない
856デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/17(月) 22:13:37
どうせ構造体のポインタが欲しいだけとエスパー
858デフォルトの名無しさん:2008/03/17(月) 22:16:57
>>852見て>>856が思いつかないならポインタなんか触るべきじゃない
859デフォルトの名無しさん:2008/03/17(月) 22:18:32
つかC#でポインタ使うとこってどこ?
860デフォルトの名無しさん:2008/03/17(月) 22:25:08
Interopとか画像処理とか構造体の配列触るときによっぽどパフォーマンスが大事なときとか
861デフォルトの名無しさん:2008/03/17(月) 23:56:57
>>854
勘違いしてない?
ここはC♯(シーシャープ)という言語のスレだぞ。
もしかして学校の宿題なら、それは、CとかC++という言語じゃなかったか?
862822:2008/03/18(火) 00:38:27
>>818,823-824
レスサンクス
明日試してみる。
863デフォルトの名無しさん:2008/03/18(火) 02:36:23
多次元配列は使いそうだけど、ジャグ配列って使わないよな?
覚えるのめんどくさいんだが・・・
864デフォルトの名無しさん:2008/03/18(火) 02:40:27
>>863
Cから来たら無意識にジャグの方を使う。
865デフォルトの名無しさん:2008/03/18(火) 02:42:29
>>864
・・・まじかよ、じゃあ素直に勉強するわ
d
866デフォルトの名無しさん:2008/03/18(火) 02:46:24
いや勉強するもなにも
宣言と要素アクセスのやり方だけ知ってりゃいいんじゃん
ジャグのほうは単なる配列を要素とする配列ってだけの話だし

無意識に使われるジャグ配列って「ジャグ」じゃなくね?
867デフォルトの名無しさん:2008/03/18(火) 03:09:39
List<int[]> lst = new List<int[]>();
//動的に配列を追加していくループ
for(...){
lst.Add(....);
}
int[][] jag = lst.ToArray();

格納される配列の要素数が動的に変化するような場合とかもあるし、
ジャグのが柔軟。

868デフォルトの名無しさん:2008/03/18(火) 03:56:09
普通ジャグにしね?
ジャグじゃないとN次元配列が書けんし
869デフォルトの名無しさん:2008/03/18(火) 04:30:05
そんなことはない。
870デフォルトの名無しさん:2008/03/18(火) 06:30:03
ジャグ配列ってすごく使いにくいぞ
871デフォルトの名無しさん:2008/03/18(火) 07:46:45
パフォーマンスはジャグの方が全然良いけどな。
872デフォルトの名無しさん:2008/03/18(火) 09:16:17
使いにくさで言うと断然多次元配列だと思うけど
Sortメソッドも使えない
873デフォルトの名無しさん:2008/03/18(火) 09:24:21
多次元配列よりジャグの方が直感的なんだよな。気がついたらジャグで作ってることが多い気がする。
初期化するときも使用するときも、機械的にいつも似たようなfor文で処理できるし。

>>871
すごく初耳。
874デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/18(火) 11:40:01
ジャグ配列の方が速いのは一番右の添え字が連続したアクセスの場合だけだったような
876デフォルトの名無しさん:2008/03/18(火) 15:44:04
メインフォームにおいて、文字キー T とか Y のkeyPressイベントを起こすにはどうしたらいいんですか?

private void MainForm_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{

}
の中に記述してもイベントそれ自体が発生しないんですが・・・
877デフォルトの名無しさん:2008/03/18(火) 16:07:50
フォーカスがないだけだろ
878デフォルトの名無しさん:2008/03/18(火) 16:08:47
>>876
そのイベントハンドラはちゃんとイベントにバインドしてあるのか
879デフォルトの名無しさん:2008/03/18(火) 16:23:40
KeyPreview
880デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/18(火) 17:12:21
Console.WriteLine(Hoge);
Console.WriteLine(getHoge());
あと,リフレクションとの相性
882デフォルトの名無しさん:2008/03/18(火) 17:14:58
しりあらいず
883デフォルトの名無しさん:2008/03/18(火) 17:22:10
リフレクションというかコンポーネントモデルやな。PropertyDescriptor。
…ヘジは1.0からこの辺のものを第一言語要素にする点こそ重要って
言ってた気がするがスルーされっぷりが可哀想というか
884デフォルトの名無しさん:2008/03/18(火) 17:26:51
getHogeがメソッドでないから、きっと記述方法のことを言ってるんだとエスパー
括弧なしのgetHogeでHogeプロパティ作れと

プロパティとアスセサ(メソッド)の違いについてならそういう風に書くだろうし
885デフォルトの名無しさん:2008/03/18(火) 17:35:12
iPod touchみたいな慣性付きスムーズスクロールはどうやるのでしょうか?
そもそも普通のスムーズスクロールはどうやるのでしょうか
886デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/18(火) 19:07:52
MeasureString
890デフォルトの名無しさん:2008/03/18(火) 21:09:56
WebColorConverterのインスタンスを取得するにはどうするのが正しいの?
MSDNにはTypeConverterのインスタンスは直接作らずにTypeDescriptorを使えと書いてあるけど
TypeDesctiptor.GetConverter(typeof(Color))だとColorConverterが返ってきてしまう
891デフォルトの名無しさん:2008/03/18(火) 22:07:38
今でも>>886のことが忘れられない…
892デフォルトの名無しさん:2008/03/18(火) 22:24:13
宇宙仮面のC#プログラミングってサイトの、ED が点滅するボタンのページ
>次に、ツールバーのカスタマイズにより、コンパイルしたアセンブリーをツールバーに登録します。
ってどういうこと?
ツールバーのユーザー設定?
コンパイルしたアセンブリーって項目があるってこと?
893デフォルトの名無しさん:2008/03/18(火) 22:33:46
事故解決しましたごめんなさい
894デフォルトの名無しさん:2008/03/19(水) 08:02:56
class A<T> { ・・・ }
とあるとき、Tの型をAのクラスの外から調べて使っていく便利な方法があったら教えてください。
リフレクションを使えばなんでもできますが、できれば使用したくないです。
C++ では
class A<T> { typedef T ElementType ; }
とできたので話は簡単だったんですが・・・

#VBのLinq to XMLが便利すぎ〜〜〜〜ぐはぁぁぁぁ
#ヘジたぁぁぁん
895デフォルトの名無しさん:2008/03/19(水) 08:05:32
dateTimePickerをパースして1日追加して表示しようとしているのですがなりません
何か勘違いしているのでしょうか?

DateTime dt = DateTime.Parse(dateTimePicker.Text);
dt.AddDays(1);
lvi.SubItems.Add(dt.ToShortDateString());
896デフォルトの名無しさん:2008/03/19(水) 08:11:38
>>894
なにがしたいのかわからんけど

class A<T>
{
public Type ElementType = typeof(T);
}
こんなんじゃだめなの?
897デフォルトの名無しさん:2008/03/19(水) 08:11:49
>>895
勘違いでーす
DateTime dt = DateTime.Parse(dateTimePicker.Text);
dt=dt.AddDays(1);
lvi.SubItems.Add(dt.ToShortDateString());
898デフォルトの名無しさん:2008/03/19(水) 08:13:29
>>896
それだと、

A.ElementType inst = new A.ElementType();
とかできなくて不便なんですよ。
899デフォルトの名無しさん:2008/03/19(水) 08:19:26
>>898
じゃあ

void Method<T>(A<T> a) where T : new(){
T item = new T();
}

こうじゃねえの
900デフォルトの名無しさん:2008/03/19(水) 08:24:16
>>898
A<T>にこんなメソッド追加すれば
public T CreateElement()
{
return new T();
}
901デフォルトの名無しさん:2008/03/19(水) 08:27:08
>>899
それもちょっとなんですよね、全部のメソッドについてやらないといけなくて、場当たり感が・・・
C#に移ってみたもののC++とは勝手が違って難しいです、逆にC#では意外とあっさりできる物なども多いのですが。
902デフォルトの名無しさん:2008/03/19(水) 08:28:39
>>897
ありがとうございます。
盲目でした・・・。
903デフォルトの名無しさん:2008/03/19(水) 08:48:06
>>895
なんで
DateTime dt = dateTimePicker.Value.Date.AddDays(1);
じゃだめなの?
904デフォルトの名無しさん:2008/03/19(水) 08:51:20
どうでもいいところに反論したがる奴がいるなw
905デフォルトの名無しさん:2008/03/19(水) 09:10:16
903じゃないがどうでもいいかぁ?
カスタムフォーマットとかで元のコード落ちたりしないだろうか
906デフォルトの名無しさん:2008/03/19(水) 09:15:29
大体TをnewするよりA<T>を使う側がそのものずばりをnewする方がうまくいくと思うがなあ
907デフォルトの名無しさん:2008/03/19(水) 09:16:47
>>906
だよね
使う側はTがなにか知ってるんだし
908デフォルトの名無しさん:2008/03/19(水) 09:31:56
てか、いろんなA<T>に対して同様の処理をしたいなら
それこそ、その関数なりクラスなりをジェネリックにすべきだと思うが
909デフォルトの名無しさん:2008/03/19(水) 09:37:48
独り言キモイ
910デフォルトの名無しさん:2008/03/19(水) 12:41:47
馬鹿ってのはどうして自分のことばを自分に適用できないのかねw
統合失調なんじゃないのチミ
911デフォルトの名無しさん:2008/03/19(水) 12:59:40
>>910
因果関係が逆な気もするぞ。
そういう人間のことを馬鹿というのでは。
912デフォルトの名無しさん:2008/03/19(水) 15:10:00
VB.NET質問スレ(Part25)
http://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デフォルトの名無しさん:2008/03/19(水) 15:38:20
どう見てもビョーキだなwww
914デフォルトの名無しさん:2008/03/19(水) 16:04:07
統合失調好きだなあ
915デフォルトの名無しさん:2008/03/19(水) 19:03:12
>>912
言ってるそばから自分棚上げかよw
本当馬鹿ってのはどうして自分自身の吐いてる言葉を自分に適用できんの?
それから「荒れて」いるのはスレじゃなくてお前さん自身の脆弱な心、でしょ?w

馬鹿で心が弱いお前さんの感情が刺激されること=スレが荒れること、ではないよ。
916デフォルトの名無しさん:2008/03/19(水) 19:11:08
マ板でやれ
917デフォルトの名無しさん:2008/03/20(木) 00:39:48
Webbrowserコントロールがjavascript周りでエラーを吐きまくるのでオフにしたいんですが、
サンプルコードが載ったページをご存じないですか?
いくつか類似のページはありますが(http://www.divakk.co.jp/aoyagi/csharp_tips_wbzone.html)、
旧.Net用でVS2005/2008では使用できませんでした。
ページを読み込む前にDLしたページキャッシュを読んで書き換えて無効化する方法も考えましたが、
読み込みをキャンセルさせる方法が分からず、汎用性もないため諦めました
918デフォルトの名無しさん:2008/03/20(木) 03:00:45
USBカメラを単純にプレビューするだけのサンプルってないですかね?
色々探してみたんだけど、どれも複雑で。。。
919デフォルトの名無しさん:2008/03/20(木) 03:01:04
>>917
WebBrowser.ScriptErrorsSuppressed = true;
920デフォルトの名無しさん:2008/03/21(金) 01:15:31
なんでVBのサンプルがC#より上にあるんだよ
921デフォルトの名無しさん:2008/03/21(金) 01:18:37
アルファベット順だろうな
922デフォルトの名無しさん:2008/03/21(金) 01:29:42
じゃあCの方が上だろ
923デフォルトの名無しさん:2008/03/21(金) 08:32:49
ゲイツがBASIC世代だから?
924デフォルトの名無しさん:2008/03/21(金) 09:06:52
xmlでnode名とvalueを指定して
特定箇所のvalueを更新する方法は
ありますか?
ファイル丸ごと読み込んで書き出す方法しか
知らないので教えて下さい
925デフォルトの名無しさん:2008/03/21(金) 10:06:39
>>922
Visual BasicとVisual C#とVisual C++だったらVBが先だろ。
926デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/21(金) 14:08:54
Enumerable.Range
929デフォルトの名無しさん:2008/03/21(金) 14:23:33
>>928
すまみせん、int のシーケンスは例であって、int のシーケンスを作りたい訳ではないです。
手際よく yield を含むコードを書き下したいのです。
930デフォルトの名無しさん:2008/03/21(金) 14:25:27
できないなあ
931デフォルトの名無しさん:2008/03/21(金) 14:32:03
ツリーコンテナの列挙をするときには便利な機能と割り切ってそれ以上深く考える事をしなかったんですが・・・
yield 便利だね、なんでもかんでもコレで書いてしまいたくなる衝動に駆られます。
932デフォルトの名無しさん:2008/03/21(金) 14:33:50
それはするべきじゃないだろう
933デフォルトの名無しさん:2008/03/21(金) 14:36:43
Haskellの無限リストより書き方が直観的で良いです
934デフォルトの名無しさん:2008/03/21(金) 14:53:32
クラスの比較をするときに、比較したいメンバを片っ端から .Eulals 等で比較するメソッドを
片っ端から書きまくって、Eulals , GetHashCode …とこれまた片っ端から書きまくって
比較対照数×比較系メソッド数分の条件判断を書くという、ちょっと間違えれば書き損じ出まくりです
yield を使って列挙する側は、列挙する側、比較する側は比較する側とバシッと分けて書いてみると…なかなか気持ちいいです。
935デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/21(金) 15:23:32
文字がアルファベットかどうか判定したいんだけど、
Char.IsLetter('あ'); の結果がtrueを返してくる。
ほかにいい方法ありますか?
938デフォルトの名無しさん:2008/03/21(金) 15:34:09
>>936
GetHashCode()に和を使うのはどうかと
939デフォルトの名無しさん:2008/03/21(金) 15:35:08
>>937
( ゚д゚)つ正規表現
940デフォルトの名無しさん:2008/03/21(金) 15:36:15
a<= x && x <= z || A <= x && x <= Z
941デフォルトの名無しさん:2008/03/21(金) 15:36:35
>>938
そんなの問題があるならテキトーに替えてくださいよ(汗
942デフォルトの名無しさん:2008/03/21(金) 15:39:04
>>937
「アルファベット」の定義は?
943デフォルトの名無しさん:2008/03/21(金) 15:44:27
HashCodeの作り方がよくわからんからEqualsのオーバーライドもあまりやりたくないな
944デフォルトの名無しさん:2008/03/21(金) 16:10:50
>>939 >>940 >>942
どうもです。普通にa-zA-Zで比較して判定します。
それにしてもMSDNのあの説明では日本人は勘違いしますね。
MSは苦労したとは思いますが。
945デフォルトの名無しさん:2008/03/21(金) 16:30:12
日本語のアルファベットはひらがな、カタカナ
英語のアルファベットはA〜Z
単にアルファベットと聞かれたらどちらか分からない。
946デフォルトの名無しさん:2008/03/21(金) 16:37:49
一般的な日本人はアルファベットと言われたらA-Zの26文字のことだと思う
ANK=Alphabet Numeric Kanaって単語だってあるのに。
947デフォルトの名無しさん:2008/03/21(金) 16:44:07
>>945
MessageBox.Show(char.IsLetter('山').ToString());
948デフォルトの名無しさん:2008/03/21(金) 16:57:23
>>944
ぼくは一般的じゃないんですかそうでつか><
949デフォルトの名無しさん:2008/03/21(金) 17:05:24
>>948
私は >>946 とは別人ですよ。あなたは人より教養があるんだと思います。
950デフォルトの名無しさん:2008/03/21(金) 17:30:00
ギリシャ文字はアルファベットの名前からしてもアルファベットだし、
ヘブライ人も彼らの文字をアレフベートって呼んでるし、
そう考えると、ヘブライ文字の親類のアラビア文字もアルファベットだし、
951デフォルトの名無しさん:2008/03/21(金) 17:57:47
>926
domとうい単語しらなかったです ありがとう
952デフォルトの名無しさん:2008/03/21(金) 18:09:09
もうとっくに結論でてますが・・・
昔と違って、アルファベットの概念が広がっているね
int 山 = 5 ;
とか、コンパイル通るし、UTF8 で便利になった反面混乱も多々あり。
http://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デフォルトの名無しさん:2008/03/21(金) 22:52:21
>>951
xsd.exe .net で検索してみな
954デフォルトの名無しさん:2008/03/22(土) 12:04:31
なになら最近できたというらしい WPF を使ってみた。
Xamlとか一切使わずに、フルにC#でコーディングしてみたんだけど、System.Drawing.Graphics + Pain イベントと比べて断然楽だね
Linqに引き続き、説明がさっぱり分らんのは相変わらずで、なんとかしてくれよマイクロソフト・・・
簡単説明サイトをだれか作ってくれないかな・・・自分で作れってかorz
955デフォルトの名無しさん:2008/03/22(土) 12:08:41
XAML使わないと添付プロパティとか物凄く面倒だぞ
956デフォルトの名無しさん:2008/03/22(土) 13:32:49
むしろWPFはコーディングしたら負けだろ
957デフォルトの名無しさん:2008/03/22(土) 14:29:50
固定デザイン固定アニメーションならコーディング無しでもいいが
プログラマブルに動かしたければ、やはりコーディングするしかないよ
いやできなくは無いが、逆に面倒になるだけという意味で。
958954:2008/03/22(土) 14:54:20
とりあえず棒グラフとか折れ線グラフとか作ってます、描画クリッピングの処理とか
つまらない処理にも関わらず、工数の取られる作業がプロパティーの設定とGrid親子構造の作り方一つで
簡単対処できるのには驚愕しています、最後に印刷処理を作りたいのですが、どうするんだ・・・
959954:2008/03/22(土) 14:58:45
それと、デタラメに描画が速いね、これにはタマゲタ
さすがDirectX使っているだけの事はある、描画範囲外に大量にLineを配置しても全然速度低下がない。
これが System.Drawing.Graphics ベースだと、Pain 処理はややこしくなるし
手抜きして全部描画しようものならガックンガックンになるし。
960デフォルトの名無しさん:2008/03/22(土) 18:42:46
今C#のCUIを勉強してるんだが、練習問題ってどっかないかな?
探してみても、本とか講座とかしか出てこないんだがー
961デフォルトの名無しさん:2008/03/22(土) 18:44:43
CUIって勉強するようなことあるのか?
962デフォルトの名無しさん:2008/03/22(土) 18:49:35
>>961
プログラミング自体が初めてだからさ、一応勉強しとかないとと
963デフォルトの名無しさん:2008/03/22(土) 18:53:20
ConsoleクラスちょっといじればCUI限定の問題はクリアと考えていい
964デフォルトの名無しさん:2008/03/22(土) 18:54:54
>>959
Pain処理ってある意味間違ってないよなw

>>962
unixコマンドのリファレンス引っ張ってきて実装すれば
catとかtelnetとか
965デフォルトの名無しさん:2008/03/22(土) 18:58:08
>>963
そんなもんですか、やっぱ基本的にGUI弄るってことかな
ありがとうございます^

>>964
ググってみます^
966デフォルトの名無しさん:2008/03/22(土) 18:58:10
CUIをやらなきゃいけない理由でもあんの?
初めてなら逆に手を出す必要はないと思うんだが。
967デフォルトの名無しさん:2008/03/22(土) 19:02:13
>>966
いやー、やっぱ基本的なことは知っといた方が良いのかなと
968デフォルトの名無しさん:2008/03/22(土) 19:02:51
CUIとかGUIなんてどうユーザとやり取りするかって話でしかない
本当にやりたいのはその先だろ?

>>966
"言語の"勉強にはCUIのほうがいいと思う
969デフォルトの名無しさん:2008/03/22(土) 19:02:58
言語仕様からきっちり解説するような本だとだいたいコンソールからだよ
970デフォルトの名無しさん:2008/03/22(土) 19:14:39
てことは、コンソールが必要になったら、その都度調べる程度で平気ってことですかね
どうもです、頑張ります^
971デフォルトの名無しさん:2008/03/22(土) 19:16:01
GUI を根本からサポートしている言語を除けば、
GUI まで教え始めるとページ数多くなるからな。
972デフォルトの名無しさん:2008/03/22(土) 19:36:12
GUIだとはじめに必要な「おまじない」が多いし
入出力がまどろっこしいから言語仕様の解説には不向き
973デフォルトの名無しさん:2008/03/22(土) 20:11:32
>>972
C#だと、それほどでも無いだろ、Windowクラス生成して以上終了だし。
Win32使うと、激しいことになるけど

初代VS.NETには、CUIベースのわかりやすいサンプルが多かったんですけどね。
クイックスタートのサンプルもう一度復活させてもいいと思うんだけど・・・
974デフォルトの名無しさん:2008/03/22(土) 20:13:39
>GUI を根本からサポートしている言語を除けば、
だからな。
C# は GUI に力要れてるから問題ない。
975デフォルトの名無しさん:2008/03/22(土) 20:20:50
言語の勉強する場合、色んなロジックを書いて
その処理結果を簡単に出力出来るという点では、
コンソールの方が簡単でいいよね。

GUIだと、そもそものイベントドリブンの仕組みから
色んなコントロールの説明とかしなくちゃならないから。
いきなり、言語の学習の次のステップからになってしまう。
976デフォルトの名無しさん:2008/03/22(土) 20:21:32
下手な入門本でGUIだとすぐVSでポトペタだからなぁ。
977デフォルトの名無しさん:2008/03/22(土) 20:24:32
言語の勉強なら文字の入出力ができれば別になんでもいいわけで
一番手軽なのがコンソールっていうだけ
使う話とはまた別だ
978デフォルトの名無しさん:2008/03/22(土) 20:39:27
つまり言語の入門にはTcl/Tkが最も優れているということですね
979デフォルトの名無しさん:2008/03/22(土) 20:41:44
WinFormsなら初心者でも簡単だけど
WPFになるとXAML覚える方が大変なんじゃないか?w
980デフォルトの名無しさん:2008/03/22(土) 20:59:23
>>975
C#の場合それは問題多いだろ、開発環境が無ければ何故その機能があるのか、そうなっているのか理解できないものが大量にあるし。
たとえば、カスタムアトリビュートしかり、深いネームスペースしかりで。
981デフォルトの名無しさん:2008/03/22(土) 21:57:09
>>980
その反論の意味が全く分からないんだが。
では、GUIの方が入門者にとって、C♯"言語"の学習をし易いのか?
982デフォルトの名無しさん:2008/03/22(土) 22:14:14
つか、今の初心者つったら、CUI? command.com? 何ソレ?
だろ、そこから使用方法と説明が必要だ。
983デフォルトの名無しさん:2008/03/22(土) 22:18:29
いまどきの新人にパイプの説明したら一週間考え込まれた事があるw
そんなオレは、もうロートル入りだorz
984デフォルトの名無しさん:2008/03/22(土) 22:24:29
>>982
今の初心者はcmd.exeだからな
985デフォルトの名無しさん:2008/03/22(土) 22:59:38
.NET学習的にもPowerShellがvista標準じゃなかったのは痛いなぁ
986デフォルトの名無しさん:2008/03/22(土) 23:06:46
プログラミング Microsoft Visual C# 2005 言語編 (マイクロソフト公式解説書)
プログラミングC#―C#2.0/.NET2.0/Visual Studio2005対応(オライリー)

読むならどっち?
987デフォルトの名無しさん:2008/03/22(土) 23:08:20
オライリーの方。
Googleブック検索でないよう少し見てみたらよかったし「初めてのC#」もよかったから。
988デフォルトの名無しさん:2008/03/22(土) 23:10:30
そういえばC#使ってるけど未だに解説書の類を読んだ事がないな。
もう何でもpublicで作ってるしその内問題に遭ったりするんだろうか
989デフォルトの名無しさん:2008/03/22(土) 23:16:40
まだ俺2.0止まりでXAMLとか分からないんだけど、ASP.NETとかでやってるみたく
FormベースでXML使ってコントロールとか定義できる物ってことなの?
990954:2008/03/22(土) 23:33:53
>>989
使い始めて間もないのですが・・・簡単に説明すると
フラッシュみたいな物、htmlでいえば、imagタグとか適当にホームページ作成ツールで作って
それに名前を付けておいて、サイズや位置情報を、プログラム側からいじくれるという仕掛け。
各種タグで表示するオブジェクトには名前がつけられて、

その名前.アトリビュート名 = 適当な値

とすると、値が書き換えられて、表示が変化します。
Gridというタグがあって、これは各種オブジェクトを格納(子タグが作れる)、ここに自分で生成したオブジェクトを追加する事もできます。
基本的な要素には、LineとかPolyLineとか、DirectXで良く見られるプリミティブ要素のようなものがあって、ページ中に線やポリゴンなども書けます。
これに座標変換行列を効果させて、回転・拡大縮小・平行移動・平行四辺形的な変形といった事ができます。
最終的にはDirectXで描画されるらしく異様に高速。
大半はデザイナでデザインしておいて、必要な所だけをコードしてしまえます。
Paintイベントで再描画のコードは書く必要なしです。
991954:2008/03/22(土) 23:41:12
逆にDirectXが分るなら、メッシュの中にボタンやらラベルやらといったプリミティブがあるイメージかな?
992デフォルトの名無しさん
thx。そろそろ俺も3.0始めねば・・・。