08/04/22 00:45:01
Visual C# 2005 Express Edition 日本語版
URLリンク(www.microsoft.com)
ふらっとC#,C♯,C#(初心者用) Part23
スレリンク(tech板)
MSDNライブラリ
URLリンク(msdn.microsoft.com)
MSDN2
URLリンク(msdn2.microsoft.com)
pinvoke.net: the interop wiki!
URLリンク(pinvoke.net)
3:デフォルトの名無しさん
08/04/22 00:46:21
Visual C# Express Edition (無料)ダウンロード
URLリンク(www.microsoft.com)
.NET Framework SDK (2.0)
URLリンク(msdn2.microsoft.com)
MSDN Visual C# Express Edition フォーラム
URLリンク(forums.microsoft.com)
Visual Studio ユーザーグループ
URLリンク(vsug.jp)
@IT Insider.NET
URLリンク(www.atmarkit.co.jp)
Insider.NET 会議室 ディレクトリ
URLリンク(www.atmarkit.co.jp)
宇宙仮面の C# プログラミング / C# Programming
URLリンク(ukamen.hp.infoseek.co.jp)
WisdomSoft C#入門
URLリンク(wisdom.sakura.ne.jp)
WisdomSoft Microsoft .NET入門
URLリンク(black.sakura.ne.jp)
どっとねっとふぁん
URLリンク(dotnetfan.org)
緑のバイク 初めてのC# ~ 覚え書き ~
URLリンク(homepage3.nifty.com)
どぼん!の .NET Tips
URLリンク(dobon.net)
4:デフォルトの名無しさん
08/04/22 00:47:59
テンプレ終わり。
ではよろしく。
5:デフォルトの名無しさん
08/04/22 00:59:18
前スレ >>998
戻りをラムダ式として結果待ちをインターロックにしたのがポイントです
今後アウトオブオーダーにするとか、いろいろ展開が考えられるので。
これはLINQで使われた式木をみてふと思いついたんですよ、
プロセス代数なんかとも相性がいいと思います。
URLリンク(ja.wikipedia.org)
今は戻り値をラムダ式としてありますが、もしラムダプロパティーみたいなものが言語上にできると
普通にコードしているだけで、並列化するライブラリーがバリバリできるのではと思っていたりします。
これはもうひとつ問題があって、並列化するかどうかは使う側ではなく、クラスを作る側に主導権を持たせたいというのもあるので
スレッドセーフかどうかなんて、使う側は意識したくないですから。
6:デフォルトの名無しさん
08/04/22 01:03:28
>>1
乙
7:デフォルトの名無しさん
08/04/22 01:04:28
>>2も乙
8:デフォルトの名無しさん
08/04/22 12:12:59
今からUnmanaged DirectXを勉強しようかと思ってるんだが、
C#でやってる初心者用サイトはないかな?
少しググってみたが無さげで、C++サイトを見ながらやるしかないかなーという感じだが、
もしどこかいいところ知ってたら教えてくれまいか
9:デフォルトの名無しさん
08/04/22 14:58:57
お前にはC#も++も無理だからプログラムなんて諦めろと
10:デフォルトの名無しさん
08/04/22 15:12:55
>>8
諦めろ。
最低でもC#のメモリモデルとマーシャリングは理解してないと無理。
初心者のやるこっちゃない。
素直にC++でやっとけ。
あと本当に初心者なら、CLIでやるのも絶対無理だから予め忠告しておく。
11:デフォルトの名無しさん
08/04/22 15:18:42
C++が分るならメモリモデルとマーシャリングを理解するのは難しくは無いはずだな
それが理解できるなら、逆に問題なと見当たらない訳でw
という事はどう転んでも駄目な物は駄目という事だなw
12:デフォルトの名無しさん
08/04/22 16:08:07
C#もDirectXも経験ないから
適当に感じのつかめる教材があればいいかなと思ったんだがw
C++ソース見ながらまったりやってくわ、トンクス
C++は業務で使っとるから趣味でまで使う気なす(´・ω・`)
13:デフォルトの名無しさん
08/04/22 16:20:28
というか趣味ならXnaでええやんか
14:デフォルトの名無しさん
08/04/22 16:55:27
つか業務でC++使うほどなら、C#との連携などたやすいと思うんだがな。
C#オンリーがC++へ行くなら困難は多いだろうが・・・
15:デフォルトの名無しさん
08/04/22 22:29:45
うわ・・・ふらっと見たらゆとりの相手したみたいだ・・・
16:デフォルトの名無しさん
08/04/23 00:28:58
>>8 は勉強したいって言ってるだけなのに
「使いこなす」or「やめる」しか言わないヤツってバカなの?
17:デフォルトの名無しさん
08/04/23 01:39:54
そりゃとっかかりと言われれば、C++をしっかり勉強して深いレベルまで知ってください
そうすればC#から使う方法もすぐわかりますとしか言えないのに、初心者用を紹介してくれだからな。
逆にC++で使う方法が分かっていて、C#からどう呼び出すのといわれれば一瞬で解決だろ?
tlbimp 使って必要なライブラリを.NET参照できるようにして、DirectXの型を自分の好みの型にマッピングする。
あとは、C++の使い方をどういう風に変換したかは自分がやったんだから、自分自信で全部わかりきれる状況にあるはずだ。
ここで、彼にはいったい何が必要なんだ?
おれたちにできることなど何もないだろ、それともここでC++やらCOMやらATLの勉強でもする気か、スレ違いだ。
18:デフォルトの名無しさん
08/04/23 10:23:19
なげーよ。
>>8はサイト知ってたら教えろって言ってるだけだろ。
何でお前らは「お前には無理」とか言って話があさっての方向に進むの?
19:デフォルトの名無しさん
08/04/23 10:35:00
>>18
じゃあ一言でいってやるよ、執拗で回りくどい煽りと荒らし行為がウゼーんだよ
20:デフォルトの名無しさん
08/04/23 10:38:40
C++スレで延々とやっていろといいたいのだよ
21:デフォルトの名無しさん
08/04/23 12:38:52
>>19
8が煽り荒らしの類には見えないんだけど。
過剰反応なんじゃねーの
22:デフォルトの名無しさん
08/04/23 12:48:57
>C++は業務で使っとるから趣味でまで使う気なす(´・ω・`)
ならきっとウソツキだな
23:デフォルトの名無しさん
08/04/23 12:54:12
自作自演もキモイ、このスレ以外でもやりまくってるだろ、死ね >>21
24:デフォルトの名無しさん
08/04/23 13:17:31
>>23
おい適当な自演認定すんなよ、俺は21だがそれ以前に俺のレスはねーよ
って言ってもID無いし信じられんわな
8がこんなに叩かれてんのが疑問だったから21のレスをしただけ
25:デフォルトの名無しさん
08/04/23 13:31:53
しつけーんだよ、うざい、死ね>>24
26:デフォルトの名無しさん
08/04/23 15:23:48
あの程度で「叩かれてる」とかwww
本人納得して帰ってるんだからほっといてやれよwww
27:デフォルトの名無しさん
08/04/23 15:59:00
>>26
程度の問題は知らんけど
煽り荒らしに見えなかったから俺は19のレスが気になったの。
28:デフォルトの名無しさん
08/04/23 19:46:25
相変わらず気持の悪い自演をする奴だな
29:デフォルトの名無しさん
08/04/24 00:16:03
答える気がない人は書かなくていいです^^
30:デフォルトの名無しさん
08/04/24 09:58:04
>>29のおかげでスッキリした
31:デフォルトの名無しさん
08/04/24 12:38:56
System.Windows.WebBrowserでもAxSHDocVw.AxWebBrowserでも、
InfoseekのWebメールサービスでリロードとかするとStackOverflowExceptionで落ちるようになったガッデム。
IE(6)だと落ちないのに。
てことでだれか試してみてくれませんかね。
[STAThread] unsafe public static void Main(string[] args) {
Form form = new Form();
WebBrowser browser = new WebBrowser();
browser.Dock = DockStyle.Fill;
form.Controls.Add(browser);
form.Load += delegate {
browser.Navigate("URLリンク(email.www.infoseek.co.jp)");
};
Application.Run(form);
}
ログイン画面でリロードするだけで落ちる。
32:デフォルトの名無しさん
08/04/24 12:45:28
関係ないかもしれないけどスレイプニル最新バージョン2.7.0でもinfoseekのメールで落ちる。
確認してないがlivedoorニュースでも落ちるみたい。
スレイプニルのスレや公式サポートでも話題になってるみたいだけど
犯人はflashみたい。
33:デフォルトの名無しさん
08/04/24 12:59:20
プログラムからといわず、普通にIEから見ても落ちる、腐ってる
34:デフォルトの名無しさん
08/04/24 13:08:24
>>32-33
情報ありがと。
確かに ActiveX 実行禁止すれば落ちなくなるみたいだ。Flash のせいっぽい。
35:デフォルトの名無しさん
08/04/24 23:12:42
すごい迷惑なもん作ったなinfoseekw
36:デフォルトの名無しさん
08/04/25 00:08:00
意外とinfoseekメール使ってる人がいてびっくり。
便乗するがあの迷惑メールフィルタの弱さをなんとかしてほしい。
37:デフォルトの名無しさん
08/04/25 00:16:04
StackOverflowExceptionだと捕まえることもできんな…
>>36
ここで言うなよw
38:デフォルトの名無しさん
08/04/25 01:54:48
StackOverflowといえば今日こんなコードを書いてしまった
int x;
public int X{
get{ return X;}
}
インテリセンス氏ねと思った
39:デフォルトの名無しさん
08/04/25 02:18:35
あるあるw
40:デフォルトの名無しさん
08/04/25 08:16:09
あるあr・・・ねーよ
41:デフォルトの名無しさん
08/04/25 08:50:07
それは、x を右クリックしてリファクタリング→カプセル化でおk
42:デフォルトの名無しさん
08/04/25 09:27:46
つ 自動プロパティ
43:デフォルトの名無しさん
08/04/25 09:45:15
>>42
それはsetとgetがそろってないと出来ないのよね。
44:デフォルトの名無しさん
08/04/25 11:21:35
private set
45:デフォルトの名無しさん
08/04/25 12:02:24
フィールドにはプレフィックスとしてアンスコを付けているから、そういうのはないな。
46:デフォルトの名無しさん
08/04/25 12:54:32
俺もついこの間まで こんな記述ができるとは知らなくて必死に38みたいな書き方してたぜ。
internal bool IsLink { get; private set; }
おまけにインテリセンスで小文字と大文字並んで表示されるからややこしい。
ついでに内部フィールドが必要な場合は
<![CDATA[public $type$ $property$ {
get {return _$property$; }
set {
if (value == _$property$) return;
_$property$=value;
$end$
}
}
private $type$ _$property$;
]]>
こんなコードスニペットを作ったら、馬鹿みたいに楽になった。
47:デフォルトの名無しさん
08/04/25 22:03:04
自分自身の代入のチェックなんていらんだろ
48:デフォルトの名無しさん
08/04/25 23:19:50
要らない場合もあるが、>>46が一般形
49:デフォルトの名無しさん
08/04/25 23:30:54
>>48
どこの一般?
50:デフォルトの名無しさん
08/04/25 23:35:13
↓ここ
51:デフォルトの名無しさん
08/04/25 23:46:05
C++のoperator=じゃないんだから
52:デフォルトの名無しさん
08/04/26 03:45:20
カスタムコントロールの外見に関するプロパティみたいに、変更時のコストが大きいものはチェックする。
巨大な値型も、コピーのコストが大きいからチェックした方がいいのかもしれない。
小さな値型や参照型なら、代入のコストよりチェックのコストの方が大きいような気がする。
53:デフォルトの名無しさん
08/04/27 10:40:54
コントロールパネルのネットワークの接続の各種接続(ローカルエリア等)の無効/有効を変更したいんですが、
直接C#から変更ってできますかね?
54:デフォルトの名無しさん
08/04/27 10:42:04
参照だろうと、小さい値だろうと大抵の場合object.equals相当のものが呼ばれるだけなんだから大したコストにならんだろ
55:デフォルトの名無しさん
08/04/27 10:45:32
相対的にはとんでもなく大きなコストだろ
56:デフォルトの名無しさん
08/04/27 10:53:44
事前の最適化は百害あって一利なし
というか時間がかかるような処理をプロパティにするなよ
とりあえず巨大な値型であっても代入のコストよりはチェックのコストの方が大きい
57:デフォルトの名無しさん
08/04/27 11:07:04
こういう流れだと,C#使うなとか言い出す奴が出てきそうだけど
わざわざ不要なチェックを入れることはないというだけの話だからな
値が変化したときに何らかの処理やイベントを発生させるとか
GUI関連でどうしても時間がかかるプロパティが必要とか
そういうプロパティが多いからひな形として全部チェック入れちゃえ!とかそういうことなら話は別
58:デフォルトの名無しさん
08/04/27 11:13:54
>>53
大体のことはP/Invokeでなんとかなる
59:デフォルトの名無しさん
08/04/27 15:38:21
>>56
>事前の最適化は百害あって一利なし
賛成
>とりあえず巨大な値型であっても代入のコストよりはチェックのコストの方が大きい
今のPCはメモリーアクセスが最もパフォーマンスに深刻な問題を与えるから(分岐など比較にならない)、そんな事はないが
チェック時点でデータ読み出して比較とかすれば、意味無いので否定はしない。
比較するならまずハッシュ値で比較してから本番の比較をしないとパフォーマンス向上の意味はない。
もちろんハッシュ値の計算を高速にする必要もある。
60:デフォルトの名無しさん
08/04/28 08:27:31
ListBoxでCtrl+Enterを押すと先頭がJで始まるアイテムにジャンプするのは何故なんだろう?
Aを押せば先頭がAのアイテムにジャンプするのは分かるが、この挙動は意味分からん
61:デフォルトの名無しさん
08/04/28 09:45:44
^J が 0x0A だからかな
62:デフォルトの名無しさん
08/04/28 13:19:55
アスキーコードでのNewLineと制御コードのLinefeedが同じ0x0aだからだったんですね。
ありがとうございました。
参考
URLリンク(apis.jpn.ph)
63:デフォルトの名無しさん
08/04/30 08:32:59
#って++が2つ重なってるんだぞ!!
++
++
ほら
64:デフォルトの名無しさん
08/05/01 01:17:48
>>63
Wikipediaを見たんですね
わかります
65:デフォルトの名無しさん
08/05/01 02:53:04
> 「C#」という言語名を決めたときの話だが、もともとC#プロジェクトのコード名は、
> 「COOL」(C like Object Oriented Language:Cライクなオブジェクト指向言語。
> クール)だった。だが、すでにほかの製品で使われているなどの理由で、
> この名前は採用されなかった。
>
> ほかの案として、「EC」(イーシー)、「C2」(シー・スクウェア)、「C3」(シー・キューブ)、
> また音楽の要素を取り入れて「C#」、元素の名前から「Cs」(シー・セシウム)などが
> 出てきた。「C#」を近くでよーく見ると、「C++++」に見える。そのような理由で最終的に
> 「C#」という名前に落ち着いた。
URLリンク(www.atmarkit.co.jp)
66:デフォルトの名無しさん
08/05/01 08:21:06
コピペ君って馬鹿だな、まで読んだ。
コピペ君ってただのコピペに存在意義があると思ってるのかねひょっとして。
まあ普段無能で役立たずだと人に思われてるから、こんな「せせこましい」ことでもして
人に自分の価値を認めてもらいたいんだろうなw
67:デフォルトの名無しさん
08/05/01 12:14:53
>>66 他人を見下すのに必死なんですね。わかります
68:デフォルトの名無しさん
08/05/01 16:37:27
誰か、より良い方法があったら教えてください。
// 何箇所も変更場所があるのは好ましくない
class MyComponent1
{
string myProperty = "初期文字列";
[DefaultValue("初期文字列")]
public string MyProperty { get { return myProperty; } set { myProperty = value; } }
public MyComponent1() { }
}
// リファクタリングで MyProperty を書き換えると GetProperty("MyProperty") に変更が入らない
// 結局複数個所を書き換える方が見通しがいい
class MyComponent2
{
string myProperty;
[DefaultValue("初期文字列")] // ここを書き換えたら myProperty の初期値にも反映したい
public string MyProperty { get { return myProperty; } set { myProperty = value; } }
public MyComponent2()
{
var defaultValue = typeof(MyComponent2).GetProperty("MyProperty").GetCustomAttributes(typeof(DefaultValueAttribute), false)[0];
myProperty = defaultValue.ToString();
}
}
69:デフォルトの名無しさん
08/05/01 18:09:05
const string DefaultMyProperty = ゙初期化文字列゙;
string myProperty = DefaultMyProperty;
[DefaultValue(DefaultMyProperty)]
public string MyProperty {...}
70:デフォルトの名無しさん
08/05/01 21:45:22
>>68
こういうユーティリティクラスを作っておくとか。
URLリンク(d.hatena.ne.jp)
public static class Reflector
{
static PropertyInfo GetPropertyInfo(this Expression expression)
{
var findprop = default(Func<Expression, PropertyInfo>);
findprop = expr =>
{
switch (expr.NodeType)
{
case ExpressionType.Lambda:
return findprop((expr as LambdaExpression).Body);
case ExpressionType.Quote:
return findprop((expr as UnaryExpression).Operand);
case ExpressionType.MemberAccess:
return (expr as MemberExpression).Member as PropertyInfo;
default:
return null;
}
};
return findprop(expression);
}
public static PropertyInfo Property<TArg, TResult>(Expression<Func<TArg, TResult>> expr)
{
return expr.GetPropertyInfo();
}
}
使い方。
var defaultValue = Reflector.Property((MyComponent2 comp) => comp.MyProperty).GetCustomAttributes(typeof(DefaultValueAttribute), false)[0];
これでリファクタリングしても一緒に名前が変わるはず。
71:デフォルトの名無しさん
08/05/02 01:54:18
>>69
アトリビュートには const メンバーが使えるんだ、気付かなかった。
>>70
ありがとうございます、今回は単純なので const でいこうと思いますが、大変参考になりました。
これは、ものすごく応用範囲が広いと思います、今後何かと役に立ちそうです。
72:デフォルトの名無しさん
08/05/02 18:22:19
ListViewのListViewItemSorterプロパティをVSから設定するには
どうしたら良いですか?
プロパティの項目を見てもListViewItemSorterが無いのですが。
73:デフォルトの名無しさん
08/05/02 18:35:15
>>72
インターフェイスだから、本体を実装しないと設定できないので、デザイナにあっても意味がないんですよ。
実際に使ってみると分かるよ。
74:デフォルトの名無しさん
08/05/02 22:40:32
iTextSharp使ってテンプレート読込んだけれど、その後の文字描画がテンプレートの下に隠れてしまうが、
レイヤの順序を操作する方法とかあるのでしょうか?
テンプレート読込み後に文字描画しても、その逆でも同じように隠れますが。
75:デフォルトの名無しさん
08/05/03 11:10:42
721 名前:デフォルトの名無しさん :2008/05/02(金) 19:08:31
MSは.NETをいいかげん諦めたらいいのに。
Javaはほぼ全てのOSでサポートされてるから、仮想マシンという考え方が現実に役に立ってるが、
.NETのCLRはXP以降のWindowsでしか完全に動作しないし、
処理が重くなる以外、糞の役にも立っていない。
VistaがLonghornと呼ばれてた頃は、.NETがネイティブAPIになり、
Win32APIはなくなるとかいわれて、騙されて慌てて.NETを始めた犠牲者が、
騙されたことに気づいた今でもモッサリプログラムを作り続けてると思うとうんざりする。
結局Win32で作られた軽快なアプリ資産があるかぎりWin32APIは永遠になくすことができないし、
そのために.NETは永遠に脇役でモッサリのまま。
これが現実。
738 名前:デフォルトの名無しさん :2008/05/02(金) 20:26:23
.NETの元凶は、遅くなるだけで存在意義がないCLRにあるんだから、
MSは.NETのクラスライブラリと完全互換のネイティブC#を出せばいいんだよ。
開発プラットホームのスタンダード争いは完全にJavaに敗北したんだから、
もうJavaと張り合うためにバーチャルマシンに拘る必要はない。
速くて快適なEXEを作れる言語の方が誰にとっても実利的だろ。
そして.NET Frameworkにはひっそりと死んでもらうと。
大体、ビルゲイツが一線を退いてからのMSはVistaとか.NETとか失敗だらけで見てられない。
顧客(開発者、ユーザ)を苦しめることばかりしている。
76:デフォルトの名無しさん
08/05/03 11:45:53
>>75
そんな元スレで失笑買ってたレスをこぴってこなくても
77:デフォルトの名無しさん
08/05/03 12:08:59
VC++ の頃: DWORD ? LPSTR ? 何それ?
C# に移行してから: DWORD や LPSTR がない?
一体どういうこっちゃ。 ('A`)
78:デフォルトの名無しさん
08/05/03 12:40:41
なにがいいたいのかわからない
79:デフォルトの名無しさん
08/05/03 13:00:34
つまり慣れってことですね、わかります
80:デフォルトの名無しさん
08/05/03 13:46:10
pHandle = OpenProcess(PROCESS_VM_READ, FALSE,PID); // ハンドルの取得
if(pHandle == NULL) // 失敗時の処理
{
cout << "Cannot Open Process !" << endl;
exit(-1);
}
buf = (LPSTR)malloc(READ_SIZE); // バッファの確保
ReadProcessMemory(pHandle,Adr,buf,READ_SIZE,NULL);
CloseHandle(pHandle);
fp = fopen("Result.bin","wb");
fwrite(buf,READ_SIZE,1,fp);
free(buf);
に相当する操作をC#でAPIを使わずに書きたいんだけど、どうすればいいんでしょうか?
81:デフォルトの名無しさん
08/05/03 13:46:13
>>76
詳細希望
82:デフォルトの名無しさん
08/05/03 13:57:53
>>80
無理
83:デフォルトの名無しさん
08/05/03 13:59:26
>>81
ここ
スレリンク(tech板)
84:デフォルトの名無しさん
08/05/03 14:01:44
APIを使わずにってのはどういう要求なんだろう
WinFormsの中でだって大量に使われているのに
85:デフォルトの名無しさん
08/05/03 14:08:06
コピペ君って馬鹿だな、まで読んだ。
86:デフォルトの名無しさん
08/05/03 14:18:03
C/C++ だと何行も書かないといけないけどC# なら2,3行でさくっと出来るって聞いてC# に移行した。
要は楽をしたいだけ。API を使ってごちゃごちゃやらなきゃいけないんじゃC#に移行した意味がない。
87:デフォルトの名無しさん
08/05/03 14:28:04
だれがそんな嘘を吹き込んだんだよ
88:デフォルトの名無しさん
08/05/03 14:30:16
>>80みたいなことにC#を使うのが間違い
89:デフォルトの名無しさん
08/05/03 16:25:50
C#でXMLを扱う勉強をしています。
XMLに入っている大量のデータ(IDと名前)を読み込んで、
プログラムに入力されたIDとマッチさせて名前等のデータを表示させたいのですが
どのようなアプローチをするのがいいのでしょうか?
検索は何度でも行えるようにしたいので、その都度ファイルにアクセスするのは効率が悪そうだし
かといって膨大なデータを全て配列等に格納するのも資源の無駄遣いのような気がして悩んでいます。
XMLの構造は
<Person>
<ID>774</ID>
<Name>Hiroyuki</Name>
</Person>
が延々と続いたものです。
90:デフォルトの名無しさん
08/05/03 16:31:47
どんだけ膨大か知らんけど普通にオブジェクトのコレクションとして取り込めばいいんじゃない?
内部でXMLとして保持する意味なんて無いっしょ。
91:デフォルトの名無しさん
08/05/03 16:39:40
>>89
>検索は何度でも行えるようにしたいので、その都度ファイルにアクセスするのは効率が悪そうだし
2回目以降はキャッシュに載ってると思うけど。
結局OSのディスクキャッシュと同じものを作ることになるんじゃない?
もちろんアプリケーションサイドでやればOSのディスクキャッシュより効率は良くなるだろうけど
費用対効果考えて判断すればいいんじゃなかろうか。
OSのディスクキャッシュよりもヒット率の低いデータをメインメモリにため込むのはよろしくないと思う。
92:デフォルトの名無しさん
08/05/03 16:51:40
キャッシュのことは完全に頭から抜けていました。
データをメモリに展開しない方向で考えてみます。
93:デフォルトの名無しさん
08/05/04 02:38:28
LINQの出番
94:デフォルトの名無しさん
08/05/04 07:21:32
ここでしていいのか微妙な質問なのですが・・・
Visual Studio 2005で作成しWebサイトの作成をしているのですが、
aspx側のJavaScriptで記述されたfunctionを、cs側のイベントの途中で記述して
呼び出したいのですが、どうしても方法を思い出せません。
順番としてはボタン等によるイベント→aspx画面表示→JavaScript呼び出しよるアラーム等
でできるはずなのですが、どなたかわかる方いらっしゃいましたらご教授をお願いしたいです。
95:デフォルトの名無しさん
08/05/04 12:57:44
InvokeScript
96:デフォルトの名無しさん
08/05/04 18:18:27
vs2008の3か月フリー版でC#をいじってます。
VC++Ver6ではDefWindowProc を追加するのは仮想関数のオーバーライド
ってところでやってましたが、C#では同様なことをするにはどうすれ
ば追加できますか?
どちら様かご教示のほど、よろしくお願いしますm(__)m
97:デフォルトの名無しさん
08/05/04 18:37:32
生のメッセージ捕まえたいのならWndProcをオーバーライド
98:デフォルトの名無しさん
08/05/04 18:56:54
>>97
早速の回答、ありがとうございます。
開発環境の使い方がいまいちわからないのですが、
オーバーライドするときは対象の関数を自分でタイプするような
かたちなのでしょうか?それともどこかのメニューから追加でき
るのでしょうか。
申し訳ありませんが、よろしくお願いします。
99:デフォルトの名無しさん
08/05/04 19:02:54
クラススコープでいきなり override スペースって打ってみな。一覧がでてくるから。
選らんでエンターでメソッド雛形出来る
100:デフォルトの名無しさん
08/05/04 20:46:10
>>99
実装できました。
どうもありがとうございましたm(__)m。
101:デフォルトの名無しさん
08/05/05 23:10:36
VS2008で書いたプログラムで蛍光表示管に画像表示させて遊んでいます。
C#のSerialPortクラスにあるWriteメソッドを使って
蛍光表示管にデータ送信をしているのですが
送信途中でブルースクリーンが表示されてWindowsが落ちてしまうことがあります。
一度のデータ送信で300bytes弱、
それを延々と繰り返すようなプログラムを書いています。
そのループ中に、Windowsが落ちることがある、という状態です。
なぜブルースクリーンが出るのか、
どうすれば、ブルースクリーンが出なくなるか、が分かりません。
教えて下さい!
102:デフォルトの名無しさん
08/05/05 23:20:32
ブルースクリーンの内容も書かずに質問とな
大体、複数のPCで試したのか?落ちるコードは?ふざけてんの?
103:デフォルトの名無しさん
08/05/05 23:21:10
むしろSerialPortクラスでOSが落ちるってどんなコードかいてるのかこっちが聞きたいよ。
っていうか、だからとりあえずチミの環境でその現象が起こる最小のコードを晒そうよ。
104:デフォルトの名無しさん
08/05/05 23:54:22
ハード的な問題とか?
その辺素人なんでよく分からんけど。異常な電圧がかかってるとか?
105:デフォルトの名無しさん
08/05/05 23:59:25
ブルースクリーンってハードかドライバだろ
106:デフォルトの名無しさん
08/05/06 02:48:34
>>105
十中八九そうだろうね
ただ、「デバイス、ドライバ、etc.が異常である」とOSが判断した結果なわけだから
ソフトウェア的な要因も無きにしも非ず。2000/XPならほぼ無いと思うけど
107:デフォルトの名無しさん
08/05/06 03:43:51
ブルースクリーンのエラーの内容を書くのが先じゃね
108:デフォルトの名無しさん
08/05/06 04:57:10
あれ一瞬で消えること多いのに、MSのサポートにはエラー番号のページを参照してくださいとか書いてあるよね。
109:デフォルトの名無しさん
08/05/06 05:42:36
んでエラー番号検索かけてみたら見つからないと・・・
110:デフォルトの名無しさん
08/05/06 06:51:11
>>108
システムプロパティの[詳細設定]の[起動と回復]の
[自動的に再起動する]にチェックが入ってるからだろ。
大抵のエンドユーザーはブルースクリーン出たら再起動するだけで、
内容見てもわけわかんないんだから
Microsoftは親切にデフォルトで[自動的に再起動する]にチェックが入ってる。
111:デフォルトの名無しさん
08/05/06 16:37:59
それすらも知らないって事はそれすらもしてないって事か
112:デフォルトの名無しさん
08/05/06 16:44:37
string[] arg = new string[3] { "a", "b", "c" };
string value = "";
arg.Where(((s ,i) => { value += s + i.ToString() ; return false; })).Count();
Console.Write(value);
こういうことってやっておkですか?
113:デフォルトの名無しさん
08/05/06 17:05:36
きもちわるいです
114:デフォルトの名無しさん
08/05/06 17:11:24
string用のSum書けば?
115:デフォルトの名無しさん
08/05/06 18:44:14
ラムダ式は書き方によってうんこになりすぎるな。
116:デフォルトの名無しさん
08/05/06 19:10:55
class newobj
{
public object o { get; private set; }
public newobj(object o)
{
this.o = o;
}
}
例えばこんなクラスがあったとして
object[] arg = new object[3] {1,2,3};
newobj[] list = new newobj[arg.Count()];
arg.Where((obj, i) => { list[i] = new newobj(obj); return false; }).Count();
こんなことできたら便利だなと思いましたが確かにキモイですね。
素直にfor文使います
117:デフォルトの名無しさん
08/05/06 19:12:46
せめて、int i を引数に取る Aggregate 書くとかした方が。
118:デフォルトの名無しさん
08/05/06 19:27:19
Array.ConvertAllだろどう考えても
せいぜいSelect
119:デフォルトの名無しさん
08/05/06 19:37:01
なんだこの Where, return false, Count 厨は
120:デフォルトの名無しさん
08/05/06 19:41:32
俺なら
>>112は
var arg = new [] { "a", "b", "c" };
var value = arg.Aggregate(new StringBuilder(), (b, i) => b.Append(i));
Console.WriteLine(value.ToString());
>>116は
var arg = new [] { 1, 2, 3 };
var list = arg.Select(i => new newobj(i)).ToArray();
と書くな。
副作用を目的としたWhereなんて嫌すぎる。
121:デフォルトの名無しさん
08/05/06 19:55:47
newobj[] list = Array.ConvertAll<object, newobj>(arg, (obj) => new newobj(obj));
こういったメソッドも用意されていたのですね。
SQL?の知識が無いためSelectの使い方がよく解らなかったのですがそういう風に使えるんですね。
Aggregateはヘルプ見たのですがいまいち使い方わからなっかのですが便利そうですね。様々な使い方できそうです。
皆様どうもありがとうございました。
122:デフォルトの名無しさん
08/05/06 20:00:10
>>120
112の方、仕様満たせてないぞ
123:101
08/05/06 21:11:59
>>102-111
レスありがとうございます。
>>110の設定は知りませんでした…ありがとうございます。
・ブルースクリーンのエラー内容を見たところ、以下の通りでした。
STOP: 0x000000D1 (0x00000000, 0x00000002, 0x00000000, 0xBABC9185)
vrcomIT2k.sys Address BABC9185 base at BABC8000, DateStamp 3ec3702e
URLリンク(www.uploda.org)
(FYI:
>>106「デバイス、ドライバ、etc.が異常である」ということで思い出したのが、
PCのUSB端子から、蛍光表示管メーカーが用意している仮想COMドライバを使って
蛍光表示管にデータ送信している、ということをやっています。
もしかしたら本件と関係があるかもしれないので、書いておきます。)
他PCでの再現性については、PCを1台しか持っておらず、
申し訳ないのですがすぐ確認できる状況にはありません。
最小のコードについては、現在調査中です。再現ができ次第、UPしたいと思います。
124:デフォルトの名無しさん
08/05/06 21:41:38
> 蛍光表示管メーカーが用意している仮想COMドライバ
臭いな。というかたぶんこれだろう。
125:デフォルトの名無しさん
08/05/06 22:50:39
>>123
エラー内容みるかぎり、蛍光管メーカーに問い合わせるのが正解かと
ここで聞いても、運よく同じメーカー同じドライバで同じトラブルに見舞われている人以外には分からないかと。
とりあえずは、ドライバがそのOSに対応しているのか、そのへんから全部チェックしてみたらどうだ?
2kとかついてるから、Windows2000専用とかそういうのないか?
126:デフォルトの名無しさん
08/05/07 00:06:52
STOP: 0x000000D1 は、メモリエラーの可能性も無きにしもあらずだから、
念のためmemtest86かけてみたら?まあ、そのエラーでブルースクリーンは
シリアル周り(ハードウェアモデムとか)のエラーとしてすっごくありふれた
ものだから、たぶんドライバの問題だろうね。
127:デフォルトの名無しさん
08/05/07 18:53:43
VS2008は起動してるだけでメモリアクセスしてるから
たまに起動してるだけでブルスク(0x9C)になることがあるぜ。
まあ原因は安物メモリのせいかもしれないが。
128:デフォルトの名無しさん
08/05/07 21:46:29
それがみんな出ていたらFAQに入るわ
129:デフォルトの名無しさん
08/05/07 21:59:12
あきらかにハードが原因だろ
130:デフォルトの名無しさん
08/05/08 13:50:15
>VS2008は起動してるだけでメモリアクセスしてるから
そりゃそうだろ。
メモリアクセスしないアプリがあったら見てみたい物だ。
131:デフォルトの名無しさん
08/05/08 21:42:28
>>130
132:デフォルトの名無しさん
08/05/08 21:47:01
>>131
133:デフォルトの名無しさん
08/05/08 21:50:47
>>132
134:デフォルトの名無しさん
08/05/08 22:08:25
>>133
135:デフォルトの名無しさん
08/05/08 22:20:16
>>134
136:デフォルトの名無しさん
08/05/08 22:25:29
>>135
137:デフォルトの名無しさん
08/05/08 23:13:00
>>137
138:デフォルトの名無しさん
08/05/08 23:43:39
>>139
139:デフォルトの名無しさん
08/05/09 06:10:53
>>139
140:130
08/05/09 12:01:02
あれ?なんか変なこと言った?
141:デフォルトの名無しさん
08/05/09 12:17:29
ArrayList arrayをDataGridViewに表示させたいのですが、DataSource=arrayとやっても何も出ません。
何か良い方法はありませんでしょうか?
142:デフォルトの名無しさん
08/05/09 12:19:48
>>140
143:デフォルトの名無しさん
08/05/09 13:03:35
>>142
144:デフォルトの名無しさん
08/05/09 13:06:51
>>141
System.Collections.ArrayList array = new System.Collections.ArrayList();
array.Add(new { X = 3, Y = 4 });
array.Add(new { X = 5, Y = 6 });
this.dataGridView1.DataSource = array;
動作します、原因はArrayListに追加した要素が、プロパティーではなくフィールドになっていたとか、そんなオチでは?
145:デフォルトの名無しさん
08/05/09 21:58:27
arrayが空っぽ
146:デフォルトの名無しさん
08/05/09 22:10:19
そろそろ麻雀やろうか
147:デフォルトの名無しさん
08/05/10 00:22:23
readonly(private setじゃなくてコンストラクタ以外で変更できないようにする方ね)にするためだけに
自動プロパティを使うのを諦めてフィールドを手書きするのが悔しい
148:デフォルトの名無しさん
08/05/11 06:34:59
public struct T_INFO_DATA
{
public uint Id;
public uint Fixed;
public byte[] Array;
};
switch (WParam.ToInt32()){
case 0x1200:
COPYDATASTRUCT cds = (COPYDATASTRUCT)Marshal.PtrToStructure(LParam, typeof(COPYDATASTRUCT));
T_INFO_DATA a = (T_INFO_DATA)Marshal.PtrToStructure(cds.lpData, typeof(T_INFO_DATA)); ←ここでエラー
~
WM_COPYDATA受信時に上記のような処理を行うと下記のエラーメッセージが出ます。
保護されているメモリに読み込みまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
誰かどのように修正すれば直るのか教えてください。
構造体Arrayの中に入ってる配列数は48個です。
これ以外の構造体(配列を使っていない構造体)の受信は正常に取得できます。よろしくおねがいします。
149:デフォルトの名無しさん
08/05/11 07:55:28
良くわかんないけど
C側のイメージとしては
struct T_INFO_DATA
{
DWORD Id;
DWORD Fixed;
BYTE * Array;
}
となっているわけですが、問題ないのですか?
150:デフォルトの名無しさん
08/05/11 07:59:51
>>149
+アルルファ
byte [] Array の位置にはポインタが入っているわけでなく、メモリーブロックへのハンドルが入っています。
byte [] オブジェクトを確保して、そこに格納する必要があるのではとか?
ぱっとみ思いつく限り
151:デフォルトの名無しさん
08/05/11 09:48:21
やったことはないけども、
int とか IntPtr にして MarshalAs でなんとかできないかな。
152:デフォルトの名無しさん
08/05/11 09:55:02
なぜか Word .doc だけど、↓なんてどうだろう。
URLリンク(download.microsoft.com)(Version%201.0).doc
153:デフォルトの名無しさん
08/05/11 12:07:22
メモリハンドルをIntPtrで受け取っておいて、LocalLock、Marshal.Copy、かな。
あと、Arrayというメンバは名前をhMemとかに変えろ。
154:デフォルトの名無しさん
08/05/11 13:16:46
>hMem
むしろキモイ
155:デフォルトの名無しさん
08/05/11 13:23:41
そうか?
すぐAPIに渡すものなら、APIの引数名に合わせた方がわかりやすいだろ?
156:デフォルトの名無しさん
08/05/11 13:34:18
C#を一から始める際に参考になるサイトとか教えてもらえませんか?
157:デフォルトの名無しさん
08/05/11 13:38:40
ケースバイケースだろうね。
Win32APIはともかく、デバイス屋が提供している制御用のAPIなんて
意味不明すぎる命名がされてること多いし。
158:デフォルトの名無しさん
08/05/11 13:45:03
>>156
「C# 入門」でぐぐって一番上。
159:148
08/05/11 17:40:01
>>149
C側のイメージだと、
struct T_INFO_DATA
{
DWORD Id;
DWORD Fixed;
BYTE Array[48];
}
という認識です。
ポインタを送るほうがいいのでしょうか?
160:デフォルトの名無しさん
08/05/11 19:23:15
>>159
構造体メンバの固定長配列は、
unsafe 限定で fixed って構文がある。
URLリンク(ufcpp.net)
161:デフォルトの名無しさん
08/05/12 13:42:03
属性使っていろいろする必要がある。
[StructLayout(LayoutKind.Sequential)]
public struct T_INFO_DATA {
public uint Id;
public uint Fixed;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=48)]
public byte[] Array;
};
なお、コンパイルは通してないからこのままでOKかどうかの保証はない。
あとは調べてくれ。
162:148
08/05/13 07:16:56
>>161
ありがとうございます。
構造体をその記述にするだけでうまくいきました。
163:デフォルトの名無しさん
08/05/13 15:55:00
相談内容
RS232C通信のプログラムを作っているのですが、
デバックの効率化のために実際の通信内容を別Windownにてモニタリング
できないか検討してます。
本当はStreamにフックするだけで使えるものが他のデバックにも使えて
望ましいのですが、そんな便利なクラスってないれすか?
164:デフォルトの名無しさん
08/05/13 16:02:31
.Net には、フックの類はないよ
自分がやるとしたら、Streamクラスから派生したクラスにフックコードを挿入したアダプタクラスを作って
RS232C通信をアプリ側でフックする
引き続いてWCFを使ってプロセス間通信ができるように、サービスを作って
別ウインドウで作ったデバッグウインドウは、そのサービスに接続して、状況を読み取るといった形式にすると思う。
ついでに、通信情報以外の各種情報もモニターできるようにするかな。
165:デフォルトの名無しさん
08/05/13 16:09:14
昔、まさにそういうツールがフリーであって重宝したなあ。
NTで動いてたから、今でも使えるとは思うが何って言ったっけな。
166:デフォルトの名無しさん
08/05/13 16:12:25
便利とは思うが、盗聴まがいのAPIはよろしくないから無くした方がいいと思う。
キーボードフックを筆頭に。
167:163
08/05/13 16:38:31
>>164さん,165さん
レス有難う御座います。
アダプタクラスですか・・
腑抜けの私には、むりっぽそうですw。
申し訳ない、追加で質問なんですが、
フックがだめなら、
またStreamの中身を盗見することって難しいのでしょうか?
普通に考えると
ReadStreamは一度読み取ると消えちゃうし、
WriteStreamはそもそも読めないですよね。
これができれば、何とか簡易もどきが作れそうな気がするのですが
168:デフォルトの名無しさん
08/05/13 16:47:43
>>167
中身みるよりアダプタの法がよっぽど楽だ、Streamクラスの抽象関数オーバーロードして、呼び出しをそのままReadStreamなりWriteStreamなりに渡せば以上終了だぞ。
169:デフォルトの名無しさん
08/05/13 16:53:10
>>167
いい機会だからデザインパターンを勉強しような
170:163
08/05/13 16:57:26
>>168
そうですか。了解です。
普段は組み込み関連の仕事が多いもので、
不慣れな環境なんで、他に良い手がないか、
無駄に時間をつぶして調べ回っていました。
アダプタ法で頑張ってみます。
勉強になります。有難う御座います!!
171:163
08/05/13 17:20:28
ぐは、早くも生きづまった・・
SerialPortクラスのBaseStreamメンバはReadOnly・・・
Streamの継承クラスを渡せない・・
早くもだめぽw
そうすると専用のStreamReadrとWriterを自作するのが王道でしょうか?
それとも、SerialPortクラスを継承してメソッドを書き換えるか・・
>>169さん
アドバイス有難う御座います
今度本を買ってきます。
デザインパターンの根本的なところを理解していないのに、
何か作ろうとするから、いつもメタメタになる・・
172:デフォルトの名無しさん
08/05/13 17:39:58
本買って読むのもいいが、この種の本は場数が足りんとどうせ読めんよ。
自分で頭をひねって考えるのが重要。
class MyStream : Stream
{
Stream rs232 = ここで、BaseStream を突っ込む
override 関数各種() { rs232.同名の関数() ; }
}
基本は、こうやって作る。とにかくオブジェクト図を描くこと。
オブジェクト間のメッセージ(関数の呼び出し)の接続が最少になるのはどういう時かよく考えること。
さっさとオブジェクト指向アプローチをおぼえて、古いやり方は捨てること。
173:163
08/05/13 17:55:08
>>172さん
有難う御座います。
コードまで書いて頂き、お時間を取らせてしまって、
すいません。
なるほど!!、こうすればBaseStreamそのものがReadOnlyでも制御できる。
こうすれば、デフォルトのStreamReaderが使いまわせる。
つくづく自分の頭の固さが嫌になります。
>とにかくオブジェクト図を描くこと。
>オブジェクト間のメッセージ(関数の呼び出し)の接続が最少になるのはどういう時かよく考えること。
>さっさとオブジェクト指向アプローチをおぼえて、古いやり方は捨てること。
こういった、アドバイス非常にありがたいです。!!
自分でもあがいてはいるのですが、
周りにこういった話が出来る人がいないんです。
オブジェクト図ですね。書きまくって見ます!!
174:163
08/05/13 18:04:07
>>172さん
まだいらっしゃるかな・・
>オブジェクト間のメッセージ(関数の呼び出し)の接続が最少になるのはどういう時かよく考えること。
もしよろしければ、この部分についてもう少し解説していただけないですか?
これは、どんなときに考えるのでしょうか。
クラスの責務の振り分け/分割時?
またメッセージの接続が最小になると、どんな良いことがあるのでしょうか?
質問ばかりですいません。
175:デフォルトの名無しさん
08/05/13 18:11:30
オブジェクト指向のもっとも重要なポイントは、クラスではなくインスタンス。
インスタンスが主役であって、クラスはオマケ。継承がウンタラとかいう連中もいるが間違っているから相手にするな。
今四つのインスタンスがあるとする、それぞれ A , B , C , D
粒度が細かすぎて取り扱いにくいので、二つにまとめてみようと考えてみる。
インスタンスAがBを呼び出すなら
A --関数名--> B
と書いてみる。
まとめる方法は[A,B,C] [D]がよいか[A,B] [C,D]がよいか。
呼び出しが最少になるような図を考えてみよという事。
適当に矢印書きまくって、最小になるように分離してみるといい。
あとは応用。
176:デフォルトの名無しさん
08/05/13 18:56:57
インスタンスが主役でクラスがおまけ、って俺には理解できない発想だマジで。
っていうか、それに類するような主張をこれまでに聞いたことがないよ。
177:デフォルトの名無しさん
08/05/13 19:06:45
なにいってるかよくわからんが、継承か包含かちゅー話じゃないのか
178:デフォルトの名無しさん
08/05/13 19:12:02
プロトタイプ指向のことなんじゃね
179:デフォルトの名無しさん
08/05/13 19:16:53
インスタンスが主役w
180:デフォルトの名無しさん
08/05/13 19:21:47
C#は型指向
181:デフォルトの名無しさん
08/05/13 20:35:08
>>176
オブジェクト指向を扱っているサイトにいってみたら?
そうすれば無知も治るよ
182:デフォルトの名無しさん
08/05/13 20:39:21
オブジェクト指向ではインスタンス(実体)は脇役だろう。
183:デフォルトの名無しさん
08/05/13 20:40:36
>>182
今から15年前くらいは、確かにそういう事になっていたが、そのまま固まったか?
184:デフォルトの名無しさん
08/05/13 20:43:19
Javaが登場して以降、体系的に研究されたオブジェクト指向もちょっとは勉強するといいよ。
でないと、デザインパターン意味や使い方など理解に及ぶことはできないし、上の例だって発想することすら難しいだろう。
185:デフォルトの名無しさん
08/05/13 20:46:44
Javaと関係なく研究は進んでいたと思うんだけど。
186:デフォルトの名無しさん
08/05/13 20:50:18
何言ってんの。
オブジェクト指向イコールJavaと言ってもいい程だよ。
187:デフォルトの名無しさん
08/05/13 20:52:15
その進んだ研究を勉強していないのは駄目だという事だよ
今のライブラリは当たり前にその設計思想が入っているからな、知らないと使い方分らんだろ。
188:デフォルトの名無しさん
08/05/13 20:53:17
>>186
ゴールじゃねぇよ、LINQとか見てみろ
189:デフォルトの名無しさん
08/05/13 20:54:35
別にオブジェクト指向がどうとかこうとかどうでも良いよ
190:デフォルトの名無しさん
08/05/13 20:55:05
インスタンスは実体。
お前はパソコンに文字を表示させるとき、直にVGAのメモリを書き換えるのか?違うだろう。
ドライバやらOSやらGDI+やらライブラリ郡など抽象化されたものを通してアクセスし表示させるだろう。
オブジェクト指向はインスタンス(実体)を直接操作せず、抽象化して利用しやすくする手法。
インスタンスがメインなわけがない。
191:デフォルトの名無しさん
08/05/13 20:55:55
>>188
ゴールなんて関係ないこと持ち出して自ら否定して
結局何が言いたかったのかね。
192:デフォルトの名無しさん
08/05/13 20:56:37
>>190
ヒント:言葉遊び
193:デフォルトの名無しさん
08/05/13 20:56:38
>>190
そうだな、もう永久にそう思っていろよw
194:デフォルトの名無しさん
08/05/13 20:59:04
>>190
そんな考えでも君のプログラムがちゃんと動くならそれでいいよ
それはそれで正しいわけだから
195:デフォルトの名無しさん
08/05/13 21:00:26
良いコード:動くコード
悪いコード:動かないコード
196:デフォルトの名無しさん
08/05/13 21:05:01
クラスが主役 に一致する日本語のページ 約 290,000 件中 1 - 10 件目 (0.30 秒)
インスタンスが主役 に一致する日本語のページ 約 1,790 件中 1 - 10 件目 (0.06 秒)
197:デフォルトの名無しさん
08/05/13 21:11:37
タイヤキの型とタイヤキそのもの
どっちも主役です(ゆとり教育的発想)
198:デフォルトの名無しさん
08/05/13 21:34:08
もうこの手の話がしたい奴はOOPスレ行った方がいいよ。
あそこは>>175的なトンチキな自説をぶってるアホが延々同じネタをループしてて楽しいと思うよ。
俺は正直吐き気がするけどねああいうの。
ちなみに>>190は半分はいいこと言ってると思うんだよね。
OOPというアイデアの肝は、>>190の言う抽象化(より正確には仮想化と言うべきだと思うけど)された
仮想機械をより直感的に表現するコーディング手法ということだと思う。
ただ「実体=インスタンス」ってのは全然意味不明だが。
199:デフォルトの名無しさん
08/05/13 21:36:29
インスタンスの和訳が実体だろ・・・
200:デフォルトの名無しさん
08/05/13 21:43:41
>>188
LINQはオブジェクト指向とはまた別だろ。
関数型プログラミングのほうが近い。
201:デフォルトの名無しさん
08/05/13 21:45:09
なんか、こう訳わからん事になっているから、少し書くと
たとえば、C++でいう所の仮想テーブルは、virtual などなくても class のみで作り出すことができる。
これは非常に重要なことで、仮想テーブルは書き換えられないが、自分で作った仮想テーブルは書き換えられる。
このような実装は、Strategyパターンと呼ばれる。
つまり、classを使った抽象化は実は必要なく、ただ『頻繁に出てくるので言語上にvirtualとして実装しておくと便利であるという程度の意味』しかないのだ。
オブジェクト指向を理解する上で、この点について理解しているかどうかは決定的だ。
理解せずクラスと継承を中心に置くとやれる事が一気に限定されてしまうのだ。
さらには、継承には各種問題点も指摘されてり、特に深い継承は良くないと最近はされている。
また原則、継承を考える前にインターフェイスを検討するべきとされている。
参考コーディング規約
URLリンク(www.kawabata.com)
参考サイト
URLリンク(www.objectclub.jp)
202:デフォルトの名無しさん
08/05/13 21:49:06
>>199
話の文脈を読まなきゃ。
>>190の言う「実体」とは「クラスによって抽象化される前の何者か」。
たとえばGDIならビデオカードやプリンタのハードウェアのことを「実体」といっている。
少なくとも話の前半ではね。
203:デフォルトの名無しさん
08/05/13 21:51:16
>>201
それって結局、包含と委譲のことだろ。クラス対インスタンスという話ではない。
継承だけがクラスの特徴ってわけじゃないぞ。
204:デフォルトの名無しさん
08/05/13 21:51:26
>>202
確かに変だな。
205:デフォルトの名無しさん
08/05/13 21:53:21
>>203
つってもインスタンスを大量生産するための鋳型以上の意味もないだろ?
206:デフォルトの名無しさん
08/05/13 21:55:38
>>175
ひょっとしてインターフェイスと書くところをインスタンスにしてしまって
引っ込みが付かなくなったとか。それなら文脈があうが・・・
207:デフォルトの名無しさん
08/05/13 21:57:38
>>206
インターフェイスもインスタンスの一つと見なしてよいものだよ。
インターフェイスは取得するものだ。
208:デフォルトの名無しさん
08/05/13 21:58:17
>>207
またまた荒れるような書き方をするな。
209:デフォルトの名無しさん
08/05/13 21:59:06
いったい君たちは何の話をしてるの?
誰か頭のいい人ドラゴンボールに例えてくれよ
210:デフォルトの名無しさん
08/05/13 22:00:06
ドラゴンボールの主人公はヤムチャなのか天津飯なのかと言う話
211:デフォルトの名無しさん
08/05/13 22:27:53
実装と概念は分離して語れよ
212:デフォルトの名無しさん
08/05/13 22:30:20
↑といいつつ乖離して語る馬鹿
213:デフォルトの名無しさん
08/05/13 23:10:09
主役はキーボードを打つキミだ!!
214:デフォルトの名無しさん
08/05/14 01:52:33
>>209
サイヤ人→クラス
悟空→インスタンス
215:デフォルトの名無しさん
08/05/14 01:57:38
スーパーサイヤ人→スーパークラス
216:デフォルトの名無しさん
08/05/14 04:08:51
ブルー将軍→サブクラス
217:デフォルトの名無しさん
08/05/14 06:42:59
クラスもメタクラスのインスタンスだから、
インスタンスが主役ということでおk、みたいな話か?
218:デフォルトの名無しさん
08/05/14 06:58:38
決定的な違いは、メタ視点を持てているかどうかだろうな
明らかに不自由な設計やコーディングをしているのは明白なのだが
目が見えていないので、それを理解するのが困難になっているような気がする。
219:163
08/05/14 09:30:42
皆さん、いろいろとアドバイス頂き有難う御座います。
すこしスレが荒れ気味ですが、これは私の無知を175さんが丁寧に
ご指導してくださった点から始まっているかと思います。
原因は私にあります。スレを汚して申し分けありません。
最近良く思うのですが、OOPの浸透が何故遅いかと、
1)基本概念と実装に大きな開きがありすぎる。
2)考え方に様々な歴史や諸説があり、人や本によって解釈が異なる。
(人によって解釈が異なるのは、読んだ本の年代が大きく依存しているんでしょうか・・)
の2点に集約してるかと思います。
OOPが不慣れなものにとっては
具体的な実装論はなかなか本の中には出てこず、
また、こーいう現場的な定石というのか考え方が定まらなくて、
悩んでいることが多いんです。
だから、175さんを始め皆様より貴重なアドバイスを頂いた件は、
非常に感謝しております。
インスタンスの件は、2論に分かれているかと思いますが、
これは馬鹿な私にでも分かるように説明した為の、言葉の綾かと思います。
長文になってしまい申し訳ありません。
とても勉強になりますた。
皆様を師匠と仰ぎ、また伺わせて頂きます!!
220:デフォルトの名無しさん
08/05/14 12:43:48
くだらない哲学論争は後回しにして、とりあえずクラスの利便性(哲学論争クンはこういう言い方に反発するようだけど)
を体得するのがいいと思うよ。っていうかそれが一番重要。
大して難しいことじゃないから使ってれば自然とわかるよそれは。
くれぐれもOOPを外から強制された義務的なものに過ぎない、などと考えないこと。
便利だから使われてるんだよ。
OOPが浸透してないとは俺には思えないけど、もしそうであるのなら
それはOOPが「つかえねえ」からじゃなくてこの業界に馬鹿が多いからだよw
221:デフォルトの名無しさん
08/05/14 14:16:24
質問です
UDPで受信したメッセージをテキストBOXに表示する処理の方法論です。
今は、UDP受信を別スレッドで受信して。セマフォー同期ででString変数に渡し。
フォームのプロセスで、タイマー関数からセマフォーを同期で文字列を受け取って
テキストBOXに表示しています。
しかし、今一つスマートでないような気がしてなりません。もっと良い方法がないでしょうか?
222:デフォルトの名無しさん
08/05/14 14:38:37
普通に Control.Invoke でいいんじゃねーの?
223:デフォルトの名無しさん
08/05/14 15:20:18
タイマースレッド内に、Invokeで受信部分を入れてみたのですが。
ダメみたいな感じでした。
問題点1 Invokeスレッドが終了しない。
問題点2 結局、セマフォーで受信の確認を取るので処理的に同じ。
ただし、使い方が悪いのかもしれない。
別スレッドから、フォームに非同期イベントが出せればいいのだけど、その方法を知らない。
きっと有るような気がします。すごく初歩的な機能かも知れない…
224:デフォルトの名無しさん
08/05/14 15:36:47
223が何を言ってるのか全く分からない
Invoke スレッドて何?
225:デフォルトの名無しさん
08/05/14 16:14:15
>>224
んなこと言ったら、余計意味不明な説明が始まりかねん
で、結論
Invokeの意味を理解できてない
Invokeの使い方が間違っている
226:デフォルトの名無しさん
08/05/14 16:18:18
>>225
>Invokeの意味を理解できてない
その可能性もある。
>Invokeの使い方が間違っている
この問題にInvokeが適用できない。又は、別つの方法があるが使用したくない。
ちなみに、Invokeの中は一つのスレッドであることは理解していますよね?
227:デフォルトの名無しさん
08/05/14 16:54:08
>>221
Control.Invokeが解っていないなら、
URLリンク(codezine.jp)
228:デフォルトの名無しさん
08/05/14 17:32:06
>>222-227
出来ました。 結論:Control.Invokeが解っていなかった。無知でした。
申し訳ありません。そしてありがとうございました。
229:デフォルトの名無しさん
08/05/14 21:33:17
本当の主役はテレビの前のあなたです!!m9ビシッ
230:デフォルトの名無しさん
08/05/14 23:31:56
定数の取り扱いについての質問です。
定数宣言
public enum 定数
{
MASU = 81,
}
変数の定数宣言
public const int MASU = 81;
この場合、配列列データ_創る場合。
private int[] tbl = new int[定数.MASU];
と
private int[] tbl = new int[MASU];
どちらも同じに見えるのですが。前者を使用したほうがベターですか?
前者の方が速いですか?
231:デフォルトの名無しさん
08/05/14 23:37:25
enumハックを思い出した
232:デフォルトの名無しさん
08/05/14 23:46:14
キモい命名法だ
233:デフォルトの名無しさん
08/05/14 23:58:18
>>230
速さは一緒
値自体に意味があるならenumじゃなくてconstの方が適切
でもpublicならconstじゃなくてstatic readonlyにした方がいい
234:デフォルトの名無しさん
08/05/15 00:14:07
>>233
知らなかった知識です、ありがとうございます。
235:デフォルトの名無しさん
08/05/15 00:35:48
constと(static )readonlyは全く別物だから、
ちゃんと調べて使い分けるようにした方がいい
236:デフォルトの名無しさん
08/05/15 02:28:29
>>235
どこがどう違うかを書いた方がいい
237:デフォルトの名無しさん
08/05/15 02:44:41
自分で書けよ
238:デフォルトの名無しさん
08/05/15 02:48:18
constに出来るものをstatic readonlyにした方がいい理由ってなんだよww
239:デフォルトの名無しさん
08/05/15 03:26:42
>>238
メモリの節約。
240:デフォルトの名無しさん
08/05/15 03:30:00
↑アホ
241:デフォルトの名無しさん
08/05/15 06:17:51
基本的にconstはクラス内でprivateに定義してその中だけで使用する。
constをアセンブリやnetmoduleまたがりで参照した場合、副作用がある。
S.DLLでpublic const A = 10
M.EXEで S.Aの表示 10
public const A = 99 に変更してS.DLLだけを再コンパイル。
M.EXEを再コンパイルしない限り結果は10のまま。
242:デフォルトの名無しさん
08/05/15 07:48:45
constを他のアセンブリから参照すると、参照元のアセンブリにも定数が埋め込まれる。後で値を変えたらさあ大変。
数学定数みたいに、絶対に値が変わることがないもの以外は、static readonlyにしたほうが無難。
あとはSizeとかDateTimeみたいに初期化の必要なものを、定数っぽく扱いたいときに。
243:デフォルトの名無しさん
08/05/15 09:05:11
それは完全に枝葉というか性質というか…全然別という意味分からないだろ
constはコンパイル時に値が確定される定数、readonlyは書き込み不可な変数。
見えてくる違いとしては、constはコンパイル時に評価されるので使える範囲がちょっと広い。
定数式しか許されない属性指定内部やswitchのcase句にも使用可能。これらに使用される場合境界越えで
あってもconstにする必要がある。
ちなみにenumの個々の値はconstなのでenumを等価に置き換えるならconstになる。
244:デフォルトの名無しさん
08/05/15 09:25:48
enumの値が変わったら大変なことになるんだな
245:デフォルトの名無しさん
08/05/15 09:27:54
外部に公開している列挙体を不用意に変更しちゃマズいのか。
246:デフォルトの名無しさん
08/05/15 10:09:30
>>242
これは知らなかった。勉強になる
247:デフォルトの名無しさん
08/05/15 14:15:35
ところでなんでcaseには定数しか書けないの?
248:デフォルトの名無しさん
08/05/15 14:33:21
定数じゃないと、複数該当することもあるからじゃない?
まあ上から順番に比較するような仕様のやつもあるが。
249:デフォルトの名無しさん
08/05/15 17:34:50
あとジャンプテーブル変換
250:デフォルトの名無しさん
08/05/15 18:23:06
実装を簡単にするための手抜き
251:デフォルトの名無しさん
08/05/15 22:20:36
かといってVBのSelectCaseは自由すぎると思わないか?
252:デフォルトの名無しさん
08/05/15 23:37:20
selectっていうのは0,1,2,3,4...
みたいに連番で並んでると
それを関数ポインタの配列みたいにしてジャンプすることが出来る
だから定数じゃないとどうしようもない
253:デフォルトの名無しさん
08/05/16 02:00:26
バカばっかw
254:デフォルトの名無しさん
08/05/16 08:37:30
↑暴走中。
255:デフォルトの名無しさん
08/05/16 10:48:23
>>251
バグを引き起こしかねない問題を含まない限り、自由度は高いに越したことはないよ
C#は新規なんだから、switch case の構文にこだわるべきじゃないとは思った
もともと、switch は C の特殊 goto label の構文な訳だし、考え方が古臭すぎる。
for 文からの脱出に break を使いたくても、switchにとられてしまうとかダサいと思うので。
256:デフォルトの名無しさん
08/05/16 11:37:15
フォールスルー不可能にもかかわらずbreak必須って時点で(ry
257:デフォルトの名無しさん
08/05/16 11:38:59
たしかに。
この辺何とかならなかったのか。
C、C++からの移行を意識してるならswitch caseと別の構文にすればいいしな
258:デフォルトの名無しさん
08/05/16 11:57:33
>>252
stringにもswitchは使える
その場合はif(str=="a") /*case a*/ else if(str=="b") /*case b*/ else if…
みたいなコードにコンパイルされる
259:デフォルトの名無しさん
08/05/16 16:01:00
>>258
たくさんあるとDictionaryを使うらしいぞ
260:デフォルトの名無しさん
08/05/16 18:35:22
#regionはIDEで出来るようにした方がいいと思う。
261:デフォルトの名無しさん
08/05/16 18:49:50
それを言語そのものに組み込むところはC#の特徴というかアピール
IDEサポートを謳ってる言語なんだから
262:デフォルトの名無しさん
08/05/16 19:29:25
C#3.0の自動プロパティ作ると、[xxx]k_BackingField(うろ覚え)とかいうような変数が内部で生成されてるらしいんだが、これにソースコード上で属性を付加する方法ってありますか?
自動生成のプロパティにつけても自動生成される変数には付加されないみたいです。
263:デフォルトの名無しさん
08/05/16 19:54:51
>>261
C++にもあるよ。
てかそれなら両方サポートすればいいじゃん。
264:デフォルトの名無しさん
08/05/16 20:02:54
>>262
> 自動実装するプロパティ (C# プログラミング ガイド)
>
> 自動実装したプロパティでは、属性は使用できません。プロパティのバッキング フィールドで属性を使用する必要がある場合は、通常のプロパティを作成します。
265:デフォルトの名無しさん
08/05/16 20:05:39
>>264 ('A`)マンドクセ
266:デフォルトの名無しさん
08/05/16 21:21:12
プログラミングC#っていう本を買おうかと思ってるんだけど
これ2年前に第4版が出たのが最後で、C#2.0対応とかVS2005対応とか書いてるよね
もう今はC#3.5とかVS2008もでてるけど、近いうちに第5版とか出たりしそうかな?
それとも第4版の内容でまったく問題ない?
267:デフォルトの名無しさん
08/05/16 21:27:06
普通に考えれば最新の機能には対応してない。それだけだ
268:デフォルトの名無しさん
08/05/16 21:32:47
C#3.5って出てるの?
269:デフォルトの名無しさん
08/05/16 21:39:45
>>267
まあ、そうだね。サンクス
>>268
ごめん、嘘ついた。NET Framework 3.5でもC#は3.0のままです
ちょっと調べてたら原書のProgramming C# 3.0ってのは去年末にでてるんだな
日本語版でないかなー
270:デフォルトの名無しさん
08/05/16 23:43:57
始めたばかりの俺はそれを待っている
今は猫と初めてを併用して学習中
271:デフォルトの名無しさん
08/05/17 01:02:27
原書買えよ
272:デフォルトの名無しさん
08/05/17 02:10:19
質問です。
DataGridViewで自動カラム生成機能ってありますけれど
あれのカラムのフィールド名はこちらから指定できないんでしょうか?
(特にReflectionを使った手法で)
プロパティに属性つけるとかしたら上手くいくんじゃないかと思ってるんですが…
ご存知の方いましたらお教えください。
273:デフォルトの名無しさん
08/05/17 03:11:04
自動生成したらフィールドも何もないと思うが、
カラムのフィールド名って具体的に何を指してる?
デザイナで列を追加したときにフォームに作られる
Column*フィールドの名前のことか?
274:デフォルトの名無しさん
08/05/17 06:16:50
>>273
すいません、あまりにも説明不足でした。
フォームのカラムのヘッダに表示される文字列のことです。
プロパティ名がそのまま文字列変換されて表示されているようなので
多分どこかで設定できるんではと思っているのですが…
275:デフォルトの名無しさん
08/05/17 07:41:53
Select()でプロパティ名を変えた匿名型にすればいい
var e1 = ...; // 元のデータソース: IEnumerable<Hoge>
var e2 = e1.Select(x => new { Bar = x.Foo, ... });
276:デフォルトの名無しさん
08/05/17 08:36:22
知らない文法だなぁと思ったら2008ですか…。
ちょっと調べてみます。ありがとうございます。
277:デフォルトの名無しさん
08/05/18 16:45:58
Seleは2005でもあるんじゃ?
ラムダはデリゲートになおせばいいよ
278:デフォルトの名無しさん
08/05/18 16:47:00
Selectな
279:デフォルトの名無しさん
08/05/18 16:50:05
ごめん嘘だ
URLリンク(msdn.microsoft.com)
3.5からだった
280:デフォルトの名無しさん
08/05/18 22:57:12
2005でも似たようなのを作ることは出来るがラムダ式がないと使い物にならない
281:デフォルトの名無しさん
08/05/19 06:12:12
2008に慣れてしまって、もうLastOrDefault()相当のコードを書くことすら面倒くさい。
282:デフォルトの名無しさん
08/05/19 14:21:56
WindowApplicationを作っています。
別スレッド(固定周期)でDBの値を引いてきて、Form(メインスレッド)のラベル.Text属性に値を設定する
という処理を行なっていますが、
表示されるのは最初だけで、その後DBの値を変えてもラベルの値が変更されません。
どうしたらいいかご教授ください。
283:デフォルトの名無しさん
08/05/19 14:29:09
>>282
>>227と同じかな?
284:デフォルトの名無しさん
08/05/19 19:18:45
同一のストリームをBinaryReaderとBinaryWriteに食わせた場合、
Closeを呼び出す順番ってどうすればいいの?
ついでに、フィールドで持っているストリームをメソッド内のローカルの
BinaryReader/BinaryWriterに食わせた場合、仮にメソッド内でClose呼んだりusingを使ったり
することを避けたとしてもBinaryReader/BinaryWriterがGCに回収されるタイミングで
ストリームも強制的に閉じられてしまうんだろうか?
285:デフォルトの名無しさん
08/05/19 20:14:51
今、関数の引数を設定したλ式を作る時、以下のようにしているのですが、
もっと良い方法または、ライブラリにこれと同様なことをするための物はあるのでしょうか?
static Func<TResult> SetArg<T1,TResult>(Func<T1,TResult> f,T1 a1)
{
return () => f(a1);
}
...
static Func<TResult> SetArg<T1,T2,T3,T4,TResult>(Func<T1,T2,T3,T4,TResult> f,T1 a1,T2 a2,T3 a3,T4 a4)
{
return () => f(a1,a2,a3,a4) ;
}
286:デフォルトの名無しさん
08/05/19 20:50:34
>>285
>static Func<TResult> SetArg<T1,TResult>(Func<T1,TResult> f,T1 a1)
>{
> return () => f(a1);
>}
ライブラリに同等のものはないしもっと良い方法もない。
でもここにあげられたSetArgメソッドを使うぐらいなら
a1 => f(a1)
と毎回インラインで書けば十分だと思うよ。
287:デフォルトの名無しさん
08/05/19 20:57:42
>>285
今までC++使っていた人?
C++がstd::bind1stやstd::bind2ndをありがたがって使っているのは
今までC++に簡潔なラムダ式が存在しなかったという特殊事情もあるので
C# 3.0で無理してまねる必要は無いと思うよ。
C#だとSetArgみたいなのを作ってもインライン展開されないしね。
288:デフォルトの名無しさん
08/05/19 20:59:06
なんかすごいレベルの高い話してる・・・
289:デフォルトの名無しさん
08/05/19 21:00:24
慣れてないだけだよ
解ればそんなに難しくない
290:デフォルトの名無しさん
08/05/19 21:10:48
>>284
Disposeは複数回呼び出されても大丈夫だから,続けて呼びさえしていれば問題ないんじゃね
BinaryReaderやBinaryWriterはファイナライザを実装してないから
それらがGCされるときにストリームが勝手に閉じられることはないよ
ストリームへの参照がどこかで繋がってる限りは大丈夫
291:デフォルトの名無しさん
08/05/19 21:44:31
>>290
ありがと。
292:デフォルトの名無しさん
08/05/19 21:55:05
>>286
実はそれがちょっとまずかったので、関数化したという事情があるんです、たとえば。
List<Func<int>> list ;
for(int i=0;i<100;i++)
{
Func<int> tmp = () => i + 5 ;
list.Add(tmp) ;
}
とすると、プログラムする側の気持ちとしては i には 1 , 2 , 3 , 4 , 5 となって欲しいのですが
計算が遅延しますので、i = 100 , 100 , 100 ... となってしまいます。
293:デフォルトの名無しさん
08/05/19 22:29:40
いやそれは遅延のせいではないんじゃ…
294:デフォルトの名無しさん
08/05/19 22:31:29
C#のデリゲートはクロージャでない
295:デフォルトの名無しさん
08/05/19 22:34:25
遅延させたいんでしょう、つかその必要がなければ、Lambdaなど使わずにその場で計算すれば済むわけだし。
296:デフォルトの名無しさん
08/05/19 22:39:05
Cocoaバインディング便利そうなんだけど、C#でUI作るとき同じようなもの作ったりしてる人おる?
297:デフォルトの名無しさん
08/05/19 22:40:44
>>292
List<Func<int>> list ;
for(int i=0;i<100;i++)
{
var j=i;
Func<int> tmp = () => j + 5 ;
list.Add(tmp) ;
}
こうすればお望みの動作にならんかったっけ?見検証ヾ(゚д゚;) スッ、スマソ。
298:デフォルトの名無しさん
08/05/19 22:44:05
ListView.ItemSelectionChangedイベントで選択Itemが変化したのを検出し、
別の詳細表示フォームの表示を更新する、といったことをしています。
何も選択していないときは、詳細表示では何も表示したくないので全て消去しているのですが、
ItemSelectionChangedイベントは、選択が切り替わるときに「選択解除」と「選択」の2つのイベントを発生させます。
そのため「表示の解除⇒再表示」となってしまい、妙なチラツキが発生してしまっています。
1回目の解除用のItemSelectionChangedイベントでは、次に選択が入るかどうかが分からないので、
どうやってチラツキを抑えようか困っています。
この問題を改善する方法はないでしょうか?
299:デフォルトの名無しさん
08/05/20 01:04:48
>>292
こういうので良いんじゃない?
var list = Enumerable.Range(0, 100).Select(i => (Func<int>)(() => i + 5)).ToList();
300:デフォルトの名無しさん
08/05/20 01:25:06
>>298
SelectedIndexChanged使えば?
301:デフォルトの名無しさん
08/05/20 02:04:34
>>297
やり方はそれでOK
そのコード自体はNullReferenceExceptionになるけどなw
てか、C#でラムダ式に(パラメータ以外の)変数を入れる場合は、
基本的にスコープを最小限して、参照型ならコピーを使うというのは
for文の条件に不動小数点数を使わないのと同じくらい常識だと思う
あと、ラムダ式をごちゃごちゃ弄る場合は式木使った方がいいと思う
MSDNのどこかに載ってるExpressionVisitor使えばいろいろ出来る
302:デフォルトの名無しさん
08/05/20 02:15:36
intはいつから参照型になったんだ
303:デフォルトの名無しさん
08/05/20 03:25:22
>>300
それも試してはいるのですが結果は一緒でした。
マニュアルには複数選択のListViewの場合は削除と追加の時に呼ばれるとありますが、
これはMultiSelect=falseの設定でも同じ仕様で動いていました。
何か設定が足りないのでしょうか?
(アイテム選択状態)
⇒別のアイテムを選択する
⇒ListView.SelectedIndexChangedが呼ばれる(選択要素数を確認すると要素数0)
⇒ListView.SelectedIndexChangedが呼ばれる(選択要素数を確認すると要素数1)
SelectedItemsだけでなく、SelectedIndicesの内容も同様です。
304:デフォルトの名無しさん
08/05/20 03:43:33
選択解除するタイミングはもっと限定できるんじゃないの
そのタイミングでだけ消せば
305:デフォルトの名無しさん
08/05/20 08:46:40
>>303
何も選択してないときの処理を別コントロールにフォーカスが移ったらって条件にすれば?
306:デフォルトの名無しさん
08/05/20 09:09:56
PictureBoxかPanelのようなコントロールをウィンドウ上に貼り付ける場合、
一画面でどれくらいの個数までが実用的な範囲なのでしょうか?
イベントをとりたいのでマーカーとして貼り付けたいのですが、
個数が多いとパフォーマンスが落ちそうで…
307:デフォルトの名無しさん
08/05/20 09:51:26
>>306
で、君の環境で試したらいくつでパフォーマンスが落ちたんだい?
308:デフォルトの名無しさん
08/05/20 11:06:46
Windowsアプリケーションから
非同期で、サービスプログラムの状態を知りたいんだけど、
1.別スレッドで周期的にサービスプログラムの状態を監視し、表示する。
以外に何かよい方法ありませんか?
309:デフォルトの名無しさん
08/05/20 11:23:04
そのサービスは既存のもの?
310:308
08/05/20 11:54:44
>>309
新しく作成したサービスプログラムなんですが、中身の仕様は変更できません。
311:デフォルトの名無しさん
08/05/20 13:51:11
Panelの上にいくつかのボタン等をおいて、
そのPanelの上に同じようにPanelを重ねていって場面ごとに最前面にしたいんだけど、
Panelの大きさって全く同じじゃないとだめなのね。
大きさが違うとPanelの中のPanelって事になっちゃうみたい。
それとBringToFrontで最前面にするよりVisibleですかそうですか。
312:デフォルトの名無しさん
08/05/20 13:59:09
よく分からんが、それはTabControlで済ませることができない操作なのか?
313:デフォルトの名無しさん
08/05/20 14:03:50
>>310
相手が固定ならそれないりの方法あると思うけど、
それが何かは場合によるから、普通にポーリングでいいんじゃないかな。
サービスへの通知みたいに取れることを期待している?
314:デフォルトの名無しさん
08/05/20 14:28:44
>>311
試してないけど、ツリーで位置を確認して移動すれば解決する事じゃないの?
315:314
08/05/20 14:31:16
>>311
いやわかった。
最前面に置いたPanelが小さいと、下のPanelが見えるって事なのかな
だから最前面以外のVisibleをfalseにしなきゃいけないんだなっていうことを言いたいのかな
だとすればそれは当然。
316:デフォルトの名無しさん
08/05/21 13:58:12
>>312
そだよ。でもデザイン的にタブが無い操作って事。
>>315
見えるっていうか、大きいPanelに小さなPanelが乗っかっちゃうと、小さなPanelをVisibleをtrueにしても大きなPanelがfalseなので結局表示されないって事なんだ。
たとえばPanel1とPanel2があって、Panel1に重なって小さなPanel2があったとします。
んで別のところにある二つのボタンでPanel1とPanel2を切り替えるために
private void button1_Click(object sender, EventArgs e)
{
panel1.Visible = true;
panel2.Visible = false;
}
private void button2_Click(object sender, EventArgs e)
{
panel1.Visible = false;
panel2.Visible = true;
}
こんな風に書くじゃないですか。
ところがPanel2はPanel1の中のパネルと判断されて表示されないわけです。
ちなみにPanel2が完全にPanel1に含まれていなくても大きさに関係なくPanel1上のものと判断されてしまうのです。
なので大きさも位置も完全に同じにしないと別々のパネルだと判断されないって事でした。
そして大きさも位置も完全に同じでもPanelをBringToFront()で最前面にしようとしてもダメでした。
317:デフォルトの名無しさん
08/05/21 15:58:37
>>316
それこそ>>314で直るはずだろ
今VS起動できないから具体的になんて名前のウインドウだったか忘れたけど
ツリー表示でPanel2がPanel1の子になってるはずだからD&Dして兄弟にしてやればいい
318:デフォルトの名無しさん
08/05/21 16:45:12
>>317
そんなツリーがあるんだ!?
従属関係を指定できれば解決する簡単な問題だったので疑問でした。
探してみます!
319:デフォルトの名無しさん
08/05/21 16:57:26
ドキュメントアウトライン ビューだ!
320:デフォルトの名無しさん
08/05/21 17:11:00
>>319
今ちょうど検索してて見つからなくて困ってたんだけどありがとう!!!
あった!
321:デフォルトの名無しさん
08/05/21 17:23:16
ただ確認できるだけで従属の変更は出来ないのね。
>>317のように親子を兄弟にすると位置自体も変わってしまう。
まあでも確認できるだけでもかなり便利になりました。
322:デフォルトの名無しさん
08/05/21 18:33:33
コントロールの親子あるいは包含関係なら変更できるけど?
そもそも、間違ってPanel2をPanel1に入れてる時点で自分に非があるのに
あたかも処理系やIDEが悪いかのような論調で書かれも困る
結論としては、デザイン時にコンテナを意識してないお前が悪い
てか、コンテナ意識しないとAnchorやDock使えんだろ
323:デフォルトの名無しさん
08/05/21 19:15:49
↑なに言ってるの?w
324:デフォルトの名無しさん
08/05/21 19:22:47
結論としては(キリッ
って事だろ。
何の役にも立たないレス。
325:デフォルトの名無しさん
08/05/21 22:12:34
>>322の言っている意味が分からないような馬鹿が偉そうに書き込まないほうがいいぞ。
どう考えても
>親子を兄弟にすると位置自体も変わってしまう。
という頭の悪い考えに対する返答だろ。
コントロールの位置座標というのはコンテナに対する相対座標なんだから、
親コンテナが変われば当然Form上における絶対座標は変わるに決まってる。
そんなことも理解できない馬鹿はおとなしくWPFアプリケーションで視覚的に
階層構造を指定できるものを使っておけということ。
フォームデザイナに頼りっぱだからそうなる。
コード上で親コンテナ.Controls.Add()で追加していけば思うような構成にするのは極めて容易い
326:デフォルトの名無しさん
08/05/22 00:40:50
コントロールの親子あるいは包含関係はどうやって変更するんですか?
327:デフォルトの名無しさん
08/05/22 01:03:26
Controls.Addすれば子になるんだろ
Controls.Removeしてから別のコントロールにAddすればいいんじゃないか
328:デフォルトの名無しさん
08/05/22 01:11:25
変更前親コンテナ.Controls.Remove(子);
変更後親コンテナ.Controls.Add(子);
329:デフォルトの名無しさん
08/05/22 01:17:28
とういうことはPanel1に重ねてPanel2を配置して、
Panel2はFormの子にしたい場合はコードからしか設定できないってことでしょうか??
330:デフォルトの名無しさん
08/05/22 01:32:28
タブコントロールで、タブ部分だけ消したほうが早そうな
331:デフォルトの名無しさん
08/05/22 01:33:19
Panel2をFormに追加してから、サイズ変更でPanel1の内側に持ってけ。
332:デフォルトの名無しさん
08/05/22 01:35:01
>>329
というよりも、最初にPanelを同一の親コンテナの中に重ねて配置したいという時点で、
デザイナで作成するのではなく、最初からコード上でNew Panel()して
それをControlsに追加していくようにすべき。
デザイナ上でそれやろうとすると、親切にもDesigner.cs上のコードは
最前面にあるコンテナ内にコントロールを配置しようとしてくれちゃうから希望通りにならない。
ためしにpanel1とpanel2をForm上に重ねるように配置して、
片方のBackColorをBlackにして、Button1のClickイベントで交互にBringToFrontするように
してみたが、問題なく入れ替わったぞ。お前のやりたいことはまさしくこれのことだと思うが。
333:デフォルトの名無しさん
08/05/22 01:35:39
Windowsアプリケーションで、常に一つのフォームしか表示させなくて、色んなフォームにページ展開する時ってどのように実装しますか?
シングルトンで実装するのが普通なんでしょうか?
それとも1度開いたらHide()で見えなくするだけ?
よろしくお願いします。
334:332
08/05/22 01:37:13
>>331
そりゃ盲点だったわ。
ためしにやってみたらそれでも大丈夫っぽいね
335:デフォルトの名無しさん
08/05/22 01:37:38
タブコントロールのAppearanceをFlatButtons、ItemSizeを0,1、SizeModeをFixedにすれば、あら不思議
336:デフォルトの名無しさん
08/05/22 01:43:58
>>330
そんなこと出来るんですかー。
>>331
ドキュメントアウトライン見ながら方向キーで調節したり、
Locateを手打ちしたりして注意しながら配置すれば出来るんですけど、
マウス操作だと親子関係が、ドキュメントアウトラインで親子関係を変えると位置が、それぞれ変わっちゃいますね。
特に後者の挙動は意味不明ですw
せっかくのGUIデザイナなのに感覚的に操作出来ないのは面倒ですね。。
337:デフォルトの名無しさん
08/05/22 01:50:42
>>336
どうしてもデザイナにこだわるならExpressionBlend使ってWPFアプリ作れっての。
あれだとお前のやりたいことが全部感覚的にできるぞ。
あと、
>特に後者の挙動は意味不明ですw
>>325を百回読め。コンテナが変われば位置が変わるってことが理解できない頭なら
プログラミングなんて向いてないからやめておけ。
338:デフォルトの名無しさん
08/05/22 01:51:51
>>332
最前面にあるコンテナの子にしてくれるのは感覚的にも動作的に問題ないけど
ドキュメントアウトラインで親子関係解消すると位置が変わっちゃうのは意味不明だけどね。
他の操作でその位置に出来るのになぜ変わるのかと。
>>335
あら不思議!
ありがとー。
339:デフォルトの名無しさん
08/05/22 01:56:38
>>337
親コンテナが変われば相対座標が変わるって言いたいんだろうけど
それは問題になってないんですぅ。
GUIで親子関係を解消したら新親の座標に変換してくれたほうが直感的です。
しかもマウス操作したら旧親の子になってしまう座標ならなおさらです。
340:デフォルトの名無しさん
08/05/22 12:38:53
>>339
何を言ってるんだか意味不明な気がする。
341:337
08/05/22 13:59:41
>>339
いや、まあもう何も言わんからおとなしくWPFで作ったら?
君の言うGUIデザイナを使って「直感的」に作成できるからさ。
ツールに文句つけるわりには、それを解消したツールがあってもそっちを使おうとしないんだねぇ。
WPFとかXAMLの勉強するのは嫌だけどWPF&XAMLの機能を求めているわけだ。
だだをこねている子供にしか見えん。
342:デフォルトの名無しさん
08/05/22 15:05:59
よく論点が違うって言われない?
343:デフォルトの名無しさん
08/05/22 15:25:58
言われない
344:デフォルトの名無しさん
08/05/22 15:27:59
聞く耳持たねえ
345:デフォルトの名無しさん
08/05/22 15:28:40
WPFが直感的だと!?
346:デフォルトの名無しさん
08/05/22 15:33:20
うん
347:デフォルトの名無しさん
08/05/22 16:05:45
WPFはスレ違いだしもう何も言わなくていいですー
348:デフォルトの名無しさん
08/05/22 18:38:28
337みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^
349:デフォルトの名無しさん
08/05/22 18:41:12
348みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^
350:デフォルトの名無しさん
08/05/22 19:41:28
どうでもいいけど関係ない話するな
351:デフォルトの名無しさん
08/05/23 02:41:06
349みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^
352:デフォルトの名無しさん
08/05/23 02:47:33
351みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^
353:デフォルトの名無しさん
08/05/23 07:08:57
WPFがスレ違いならFormの話もスレ違いだろう
354:デフォルトの名無しさん
08/05/23 07:12:31
Expression高いしVSのWPFエディタはうんこだし
WPFは爆死の臭いしかしない
355:デフォルトの名無しさん
08/05/23 08:49:13
C#でDataGridViewから派生したクラスを使いたいんですけど
Form1.cs[デザイン]を開いて
そこにDataGridViewを張り付けて
そのあとに
Form1.Designer.cs
の
System.Windows.Forms.DataGridView
を
MyNameSpace.MyDataGridView
に書き換えるとかそういうことをするんですか?
そんなはず無いと思うので正しいやりかたを教えてください。
356:デフォルトの名無しさん
08/05/23 08:52:30
派生させたクラスがツールボックスに出てるだろう。
357:デフォルトの名無しさん
08/05/23 09:01:20
>>356
出てますね...
ありがとうございます。
358:デフォルトの名無しさん
08/05/23 13:55:25
すみません、初心者的で申し訳ないのですが、質問させてください。
以下のコードを実行すると、クラスAのセッターを使ってAのプライベート変数に2を代入したいにも関わらず
既定値の0が用いられてしまいます。
警告内容は以下の通りです。
「フィールド 'NAME1.A.x' は割り当てられません。常に既定値 0 を使用します。」
また、付随する質問ですが、void func_A( temp ) { x... }をvoid func_A( temp ) { X... }とすればきちんと2がセットされます。
クラス内であるにも関わらずセッターXを用いる必要があるのはなぜでしょうか。
なお、コンパイル環境はVisual C# Express Editon 2008です。
359:KKK
08/05/23 13:56:15
こんにちは。
はじめましてRayです。
私は大学4年生ですが、最近は大学は週に一回くらいしか行かないのですが、
就活の準備など、家にいることが多くなりました。
しかし、斜め向かいに住んでいる茨城という若い夫婦が嫌がらせをしてきます。
①近所をうろ②したり、家の窓から私の部屋を覗いてきて、部屋に「○○の本がある」などと近所のほかのオバサンに報告したり、
②布団たたきでものすごい音で布団をいつまでもたたきます。
(体格がいいオバサンなので、すごい音がします;;)
③私が家にいるのを知っていて近所のオバサンと大きな声で悪口を言ってきます
(「Rayが就職なんかできるわけないじゃない!」など・・)
④茨城(夫)は部屋を覗くだけでなく、夜になると咳払いなどをしていつまでも近所をうろついています。
気持ち悪いので、弁護士や市の職員に相談しましたが、なか②証拠が取れなく、裁判まで持ち込めない状況です。
⑤車のエンジンをいつまでもかけ、うるさくする。
とにかく精神的にも滅入っていて、解決したいのですが、できない状況です。
ほかの近所のオバサンも私が困っているのを見て喜んでいるみたいです。
なんとかしたいので、誰か相談にのってくださぃ。
アドバイス待ってます。
360:358のつづき
08/05/23 13:56:37
amespace NAME1 {
class A {
// メンバ
private x; ← ここで警告が出る
// メソッド
public void func_A( temp ) { x... }; ← ここでx=0として計算してしまう
// アクセッサ
public X { get; set; }
}}
361:358のつづき
08/05/23 13:57:37
using System;
using System.Collections.Generic;
・
・
・
using NAME1
namespace ConsoleApp {
class Main {
static void Main(string[] args) {
// クラスAを配列としてインスタンス化、xに2をセット
n ;
A[] arrayA_ = new A[ n ];
for ( int i = 0; i < n; i++ ) {
arrayA_[ i ] = new A();
arrayA_[ i ].X = 2;
}
// メソッドの呼び出し
temp;
for ( int i = 0; i < n; i++ ) {
arrayA_[ i ].func_A( temp );
}
}}}
362:デフォルトの名無しさん
08/05/23 13:58:59
>>360 xの型もXの型もgetアクセサの中身もsetアクセサの中身も書け
363:358
08/05/23 14:16:40
private double x;
public double X { get; set; }
です。アクセッサの表記は、.NETのver2かver3でこのように書けるので、それを利用してます。
364:デフォルトの名無しさん
08/05/23 14:27:19
ヘルプなりで「自動実装するプロパティ」調べれ
どうして X が x を知ってる?
365:358
08/05/23 14:49:06
ヘルプを読んだ結果、
>自動実装したプロパティでは、属性は使用できません。
>プロパティのバッキング フィールドで属性を使用する必要がある場合は、通常のプロパティを作成します
に関連がありそうだとは思うのですが、意味がよくわかりません・・・。
366:デフォルトの名無しさん
08/05/23 14:56:54
X プロパティは x に対応しないよ。
367:デフォルトの名無しさん
08/05/23 14:58:31
それだと、
private double _X;
みたいなのが内部で自動生成されて
public double X {
get { return _X; }
set { _X = value; }
}
368:358
08/05/23 15:03:32
つまり、
class{
double x;
double X{get;set;}
}
と書くのは誤りで、
class{
double x{get;set;}
}
と書けばよいということですか?
369:デフォルトの名無しさん
08/05/23 15:37:57
ファイルの読み書き単位でエンコーディングを指定するのではなく、
プログラム全体でエンコーディングをしているする方法はないですか?
370:デフォルトの名無しさん
08/05/23 15:46:03
>>368
private double x;
と
public double X { get; set; }
は別物だよ。
xをプロパティとしたいなら
public double X { get{return x;} set{x=value;} }
自動プロパティを使いたいならprivate double x;は消して
public double X { get; set; }だけにして、Xを変数のように使えばいいよ。
ただその場合はprivateではないけどね。
371:デフォルトの名無しさん
08/05/23 15:59:52
>>369
CreateStreamReaderAsShiftJIS/CreateStreamWriterUTF8メソッドでも用意しとけば?
372:デフォルトの名無しさん
08/05/23 17:04:01
初心者ですが質問させてください。
Webbrowserコンポーネント(Webbrowser1)でgoogleを表示しておいて、
ソフトのTextBox(TextBox1)に検索ワードを入力して、Button(Button1)を押したら、
Webbrowser側に検索ワードが読み込まれて自動で検索するようにしたいんですが、
どのようにすればいいか検討がつきません。
開発環境はVisualstudio2005、言語はC#です。
373:デフォルトの名無しさん
08/05/23 17:07:41
コンポーネントでの表示が必要なの?
httpで通信するってんじゃだめかい?
374:デフォルトの名無しさん
08/05/23 17:10:13
>>372
事前にgoogleを表示しとく意味があるのか?
取り敢えず適当にgoogleで検索して検索結果画面のURL調べれ
あとSystem.Web.HttpUtilityのUrlEncodeとUrlDecode調べれ
375:デフォルトの名無しさん
08/05/23 17:11:44
>>373
webにいろいろと自動入力するシステムを作らないといけなくなりまして。
たとえばブログにあらかじめTextboxに入れておいたIDとパスを入れて自動ログインするとか
そういったものなんですけど、webのフォームに、Textboxから値を入れる方法が知りたくて、
Googleはそのたとえのつもりでした。
http通信?の意味がよくわからないんですが、ソフト内のブラウザ上で表示させる必要はあります。
376:デフォルトの名無しさん
08/05/23 17:13:21
>>374
Googleっていうたとえが悪かったですね。ごめんなさい。
>>375で書いたように、Webサイト上のフォームにソフトのTextBoxで記載したワードを記入するのが目的です。
377:デフォルトの名無しさん
08/05/23 17:27:16
WebRequest を使って WebResponse を取得し、
その内容を反映させては。
378:デフォルトの名無しさん
08/05/23 17:30:01
素直にHTTP POSTしろよ低脳。
こんなの厨房でも出来るぞ
379:デフォルトの名無しさん
08/05/23 17:39:43
>>377
どのメソッドを使えばいいかわからなかったので、ググってみたらできそうです、ありがとうございます。
>>378
HTTP POSTで検索したらそれらしいのがでてきました。ありがとうございます。
380:デフォルトの名無しさん
08/05/23 17:40:12
おい小学生かもしれねえだろうが
381:デフォルトの名無しさん
08/05/23 17:41:46
>>368
おそらくやりたいことは
public double X { get; private set; }
これだけでいいと思われる。
これでXのセッターはprivateになる。
382:デフォルトの名無しさん
08/05/23 17:43:52
>>380
そのとおりです小学校3年生です。
バカな質問してすいませんでした。
383:デフォルトの名無しさん
08/05/23 17:46:22
>>380
小学生に失礼だ
384:デフォルトの名無しさん
08/05/23 17:48:58
>>381
自動プロパティのセッタゲッタの片方だけのプロテクションを帰ることは出来ないよ。
385:デフォルトの名無しさん
08/05/23 17:52:20
>>384
いきなりどうしたの?
俺ができてるからそう書き込んでるんだけど。
386:デフォルトの名無しさん
08/05/23 17:54:35
俺もプロパティはほとんど
public Foo Foo{ get; private set; }
だな
普通のプロパティなんてかったるくて書いてられん
387:デフォルトの名無しさん
08/05/23 17:55:26
>>384
知ったか?
それとも何か他に深い意味があるの?
388:358
08/05/23 18:08:21
うまく書けるようになりました。
ありがとうございました。
389:デフォルトの名無しさん
08/05/23 18:15:11
>>372
まあ、解決したならそれでいいけど、これでいいよ。
private void button1_Click(object sender, EventArgs e)
{
HtmlElement input = webBrowser1.Document.All.GetElementsByName("q")[0];
HtmlElement form = webBrowser1.Document.All.GetElementsByName("f")[0];
input.SetAttribute("Value", textBox1.Text);
form.InvokeMember("submit");
}
>>378
ログイン処理とかだと、ログイン前のセッションクッキー引き回しとか、
JavaScriptによるワンタイムキーの生成とかが必要になると、そのへんは
ブラウザに任せた方がはるかに簡単。
390:デフォルトの名無しさん
08/05/23 18:34:21
便乗だけどオンラインゲームの自動ログインはどうやればいいの?
URLリンク(dobon.net)
ここを参考にしたけどだめみたいなんだ。
たとえば
URLリンク(suddenattack.redbanana.jp)
ここに自動ログインするためにはどうしたらいいのかな?
391:デフォルトの名無しさん
08/05/23 19:21:51
>>389さん、ありがとうございます!
検索してもわからず、困っていたところでした。
("q")と("f")のところにhtmlからそのフォームのnameをもってきたらいいということですか?
やってみます!またできたら報告しますね。