C#, C♯, C#相談室 Part46

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
c++厨の嵐はスルー汁。

前スレ
C#, C♯, C#相談室 Part45
http://pc11.2ch.net/test/read.cgi/tech/1200911737/

その他テンプレ>>2-5くらい
2デフォルトの名無しさん:2008/04/22(火) 00:45:01
Visual C# 2005 Express Edition 日本語版
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

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

MSDNライブラリ
http://msdn.microsoft.com/library/ja/

MSDN2
http://msdn2.microsoft.com/ja-jp/library/default.aspx

pinvoke.net: the interop wiki!
http://pinvoke.net/
3デフォルトの名無しさん:2008/04/22(火) 00:46:21
Visual C# Express Edition (無料)ダウンロード
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

.NET Framework SDK (2.0)
http://msdn2.microsoft.com/ja-jp/library/ms310244.aspx

MSDN Visual C# Express Edition フォーラム
http://forums.microsoft.com/msdn-ja/ShowForum.aspx?ForumID=187&SiteID=7
Visual Studio ユーザーグループ
http://vsug.jp/

@IT Insider.NET
http://www.atmarkit.co.jp/fdotnet/index.html
Insider.NET 会議室 ディレクトリ
http://www.atmarkit.co.jp/fdotnet/index/bbs/index.html

宇宙仮面の C# プログラミング / C# Programming
http://ukamen.hp.infoseek.co.jp/
WisdomSoft C#入門
http://wisdom.sakura.ne.jp/programming/cs/index.html
WisdomSoft Microsoft .NET入門
http://black.sakura.ne.jp/~third/system/msnet/msnet.html
どっとねっとふぁん
http://dotnetfan.org/
緑のバイク 初めてのC# 〜 覚え書き 〜
http://homepage3.nifty.com/midori_no_bike/CS/
どぼん!の .NET Tips
http://dobon.net/vb/dotnet/
4デフォルトの名無しさん:2008/04/22(火) 00:47:59
テンプレ終わり。
ではよろしく。
5デフォルトの名無しさん:2008/04/22(火) 00:59:18
前スレ >>998
戻りをラムダ式として結果待ちをインターロックにしたのがポイントです
今後アウトオブオーダーにするとか、いろいろ展開が考えられるので。
これはLINQで使われた式木をみてふと思いついたんですよ、
プロセス代数なんかとも相性がいいと思います。
http://ja.wikipedia.org/wiki/%E8%A1%A8%E7%A4%BA%E7%9A%84%E6%84%8F%E5%91%B3%E8%AB%96

今は戻り値をラムダ式としてありますが、もしラムダプロパティーみたいなものが言語上にできると
普通にコードしているだけで、並列化するライブラリーがバリバリできるのではと思っていたりします。
これはもうひとつ問題があって、並列化するかどうかは使う側ではなく、クラスを作る側に主導権を持たせたいというのもあるので
スレッドセーフかどうかなんて、使う側は意識したくないですから。
6デフォルトの名無しさん:2008/04/22(火) 01:03:28
>>1
7デフォルトの名無しさん:2008/04/22(火) 01:04:28
>>2も乙
8デフォルトの名無しさん:2008/04/22(火) 12:12:59
今からUnmanaged DirectXを勉強しようかと思ってるんだが、
C#でやってる初心者用サイトはないかな?
少しググってみたが無さげで、C++サイトを見ながらやるしかないかなーという感じだが、
もしどこかいいところ知ってたら教えてくれまいか
9デフォルトの名無しさん:2008/04/22(火) 14:58:57
お前にはC#も++も無理だからプログラムなんて諦めろと
10デフォルトの名無しさん:2008/04/22(火) 15:12:55
>>8
諦めろ。
最低でもC#のメモリモデルとマーシャリングは理解してないと無理。
初心者のやるこっちゃない。
素直にC++でやっとけ。

あと本当に初心者なら、CLIでやるのも絶対無理だから予め忠告しておく。
11デフォルトの名無しさん:2008/04/22(火) 15:18:42
C++が分るならメモリモデルとマーシャリングを理解するのは難しくは無いはずだな
それが理解できるなら、逆に問題なと見当たらない訳でw
という事はどう転んでも駄目な物は駄目という事だなw
12デフォルトの名無しさん:2008/04/22(火) 16:08:07
C#もDirectXも経験ないから
適当に感じのつかめる教材があればいいかなと思ったんだがw
C++ソース見ながらまったりやってくわ、トンクス

C++は業務で使っとるから趣味でまで使う気なす(´・ω・`)
13デフォルトの名無しさん:2008/04/22(火) 16:20:28
というか趣味ならXnaでええやんか
14デフォルトの名無しさん:2008/04/22(火) 16:55:27
つか業務でC++使うほどなら、C#との連携などたやすいと思うんだがな。
C#オンリーがC++へ行くなら困難は多いだろうが・・・
15デフォルトの名無しさん:2008/04/22(火) 22:29:45
うわ・・・ふらっと見たらゆとりの相手したみたいだ・・・
16デフォルトの名無しさん:2008/04/23(水) 00:28:58
>>8 は勉強したいって言ってるだけなのに
「使いこなす」or「やめる」しか言わないヤツってバカなの?
17デフォルトの名無しさん:2008/04/23(水) 01:39:54
そりゃとっかかりと言われれば、C++をしっかり勉強して深いレベルまで知ってください
そうすればC#から使う方法もすぐわかりますとしか言えないのに、初心者用を紹介してくれだからな。
逆にC++で使う方法が分かっていて、C#からどう呼び出すのといわれれば一瞬で解決だろ?
tlbimp 使って必要なライブラリを.NET参照できるようにして、DirectXの型を自分の好みの型にマッピングする。
あとは、C++の使い方をどういう風に変換したかは自分がやったんだから、自分自信で全部わかりきれる状況にあるはずだ。
ここで、彼にはいったい何が必要なんだ?
おれたちにできることなど何もないだろ、それともここでC++やらCOMやらATLの勉強でもする気か、スレ違いだ。
18デフォルトの名無しさん:2008/04/23(水) 10:23:19
なげーよ。
>>8はサイト知ってたら教えろって言ってるだけだろ。
何でお前らは「お前には無理」とか言って話があさっての方向に進むの?
19デフォルトの名無しさん:2008/04/23(水) 10:35:00
>>18
じゃあ一言でいってやるよ、執拗で回りくどい煽りと荒らし行為がウゼーんだよ
20デフォルトの名無しさん:2008/04/23(水) 10:38:40
C++スレで延々とやっていろといいたいのだよ
21デフォルトの名無しさん:2008/04/23(水) 12:38:52
>>19
8が煽り荒らしの類には見えないんだけど。
過剰反応なんじゃねーの
22デフォルトの名無しさん:2008/04/23(水) 12:48:57
>C++は業務で使っとるから趣味でまで使う気なす(´・ω・`)
ならきっとウソツキだな
23デフォルトの名無しさん:2008/04/23(水) 12:54:12
自作自演もキモイ、このスレ以外でもやりまくってるだろ、死ね >>21
24デフォルトの名無しさん:2008/04/23(水) 13:17:31
>>23
おい適当な自演認定すんなよ、俺は21だがそれ以前に俺のレスはねーよ
って言ってもID無いし信じられんわな
8がこんなに叩かれてんのが疑問だったから21のレスをしただけ
25デフォルトの名無しさん:2008/04/23(水) 13:31:53
しつけーんだよ、うざい、死ね>>24
26デフォルトの名無しさん:2008/04/23(水) 15:23:48
あの程度で「叩かれてる」とかwww
本人納得して帰ってるんだからほっといてやれよwww
27デフォルトの名無しさん:2008/04/23(水) 15:59:00
>>26
程度の問題は知らんけど
煽り荒らしに見えなかったから俺は19のレスが気になったの。
28デフォルトの名無しさん:2008/04/23(水) 19:46:25
相変わらず気持の悪い自演をする奴だな
29デフォルトの名無しさん:2008/04/24(木) 00:16:03
答える気がない人は書かなくていいです^^
30デフォルトの名無しさん:2008/04/24(木) 09:58:04
>>29のおかげでスッキリした
31デフォルトの名無しさん:2008/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("http://email.www.infoseek.co.jp/login_form.php");
};
Application.Run(form);
}
ログイン画面でリロードするだけで落ちる。
32デフォルトの名無しさん:2008/04/24(木) 12:45:28
関係ないかもしれないけどスレイプニル最新バージョン2.7.0でもinfoseekのメールで落ちる。
確認してないがlivedoorニュースでも落ちるみたい。
スレイプニルのスレや公式サポートでも話題になってるみたいだけど
犯人はflashみたい。
33デフォルトの名無しさん:2008/04/24(木) 12:59:20
プログラムからといわず、普通にIEから見ても落ちる、腐ってる
34デフォルトの名無しさん:2008/04/24(木) 13:08:24
>>32-33
情報ありがと。
確かに ActiveX 実行禁止すれば落ちなくなるみたいだ。Flash のせいっぽい。
35デフォルトの名無しさん:2008/04/24(木) 23:12:42
すごい迷惑なもん作ったなinfoseekw
36デフォルトの名無しさん:2008/04/25(金) 00:08:00
意外とinfoseekメール使ってる人がいてびっくり。
便乗するがあの迷惑メールフィルタの弱さをなんとかしてほしい。
37デフォルトの名無しさん:2008/04/25(金) 00:16:04
StackOverflowExceptionだと捕まえることもできんな…

>>36
ここで言うなよw
38デフォルトの名無しさん:2008/04/25(金) 01:54:48
StackOverflowといえば今日こんなコードを書いてしまった

int x;

public int X{
get{ return X;}
}

インテリセンス氏ねと思った
39デフォルトの名無しさん:2008/04/25(金) 02:18:35
あるあるw
40デフォルトの名無しさん:2008/04/25(金) 08:16:09
あるあr・・・ねーよ
41デフォルトの名無しさん:2008/04/25(金) 08:50:07
それは、x を右クリックしてリファクタリング→カプセル化でおk
42デフォルトの名無しさん:2008/04/25(金) 09:27:46
つ 自動プロパティ
43デフォルトの名無しさん:2008/04/25(金) 09:45:15
>>42
それはsetとgetがそろってないと出来ないのよね。
44デフォルトの名無しさん:2008/04/25(金) 11:21:35
private set
45デフォルトの名無しさん:2008/04/25(金) 12:02:24
フィールドにはプレフィックスとしてアンスコを付けているから、そういうのはないな。
46デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/04/25(金) 22:03:04
自分自身の代入のチェックなんていらんだろ
48デフォルトの名無しさん:2008/04/25(金) 23:19:50
要らない場合もあるが、>>46が一般形
49デフォルトの名無しさん:2008/04/25(金) 23:30:54
>>48
どこの一般?
50デフォルトの名無しさん:2008/04/25(金) 23:35:13
↓ここ
51デフォルトの名無しさん:2008/04/25(金) 23:46:05
C++のoperator=じゃないんだから
52デフォルトの名無しさん:2008/04/26(土) 03:45:20
カスタムコントロールの外見に関するプロパティみたいに、変更時のコストが大きいものはチェックする。
巨大な値型も、コピーのコストが大きいからチェックした方がいいのかもしれない。
小さな値型や参照型なら、代入のコストよりチェックのコストの方が大きいような気がする。
53デフォルトの名無しさん:2008/04/27(日) 10:40:54
コントロールパネルのネットワークの接続の各種接続(ローカルエリア等)の無効/有効を変更したいんですが、
直接C#から変更ってできますかね?
54デフォルトの名無しさん:2008/04/27(日) 10:42:04
参照だろうと、小さい値だろうと大抵の場合object.equals相当のものが呼ばれるだけなんだから大したコストにならんだろ
55デフォルトの名無しさん:2008/04/27(日) 10:45:32
相対的にはとんでもなく大きなコストだろ
56デフォルトの名無しさん:2008/04/27(日) 10:53:44
事前の最適化は百害あって一利なし
というか時間がかかるような処理をプロパティにするなよ

とりあえず巨大な値型であっても代入のコストよりはチェックのコストの方が大きい
57デフォルトの名無しさん:2008/04/27(日) 11:07:04
こういう流れだと,C#使うなとか言い出す奴が出てきそうだけど
わざわざ不要なチェックを入れることはないというだけの話だからな
値が変化したときに何らかの処理やイベントを発生させるとか
GUI関連でどうしても時間がかかるプロパティが必要とか
そういうプロパティが多いからひな形として全部チェック入れちゃえ!とかそういうことなら話は別
58デフォルトの名無しさん:2008/04/27(日) 11:13:54
>>53
大体のことはP/Invokeでなんとかなる
59デフォルトの名無しさん:2008/04/27(日) 15:38:21
>>56
>事前の最適化は百害あって一利なし
賛成

>とりあえず巨大な値型であっても代入のコストよりはチェックのコストの方が大きい
今のPCはメモリーアクセスが最もパフォーマンスに深刻な問題を与えるから(分岐など比較にならない)、そんな事はないが
チェック時点でデータ読み出して比較とかすれば、意味無いので否定はしない。
比較するならまずハッシュ値で比較してから本番の比較をしないとパフォーマンス向上の意味はない。
もちろんハッシュ値の計算を高速にする必要もある。
60デフォルトの名無しさん:2008/04/28(月) 08:27:31
ListBoxでCtrl+Enterを押すと先頭がJで始まるアイテムにジャンプするのは何故なんだろう?
Aを押せば先頭がAのアイテムにジャンプするのは分かるが、この挙動は意味分からん
61デフォルトの名無しさん:2008/04/28(月) 09:45:44
^J が 0x0A だからかな
62デフォルトの名無しさん:2008/04/28(月) 13:19:55
アスキーコードでのNewLineと制御コードのLinefeedが同じ0x0aだからだったんですね。
ありがとうございました。

参考
ttp://apis.jpn.ph/fswiki/wiki.cgi?page=Programing%2FAsciiCode
63デフォルトの名無しさん:2008/04/30(水) 08:32:59
#って++が2つ重なってるんだぞ!!
++
++
ほら
64デフォルトの名無しさん:2008/05/01(木) 01:17:48
>>63
Wikipediaを見たんですね
わかります
65デフォルトの名無しさん:2008/05/01(木) 02:53:04
> 「C#」という言語名を決めたときの話だが、もともとC#プロジェクトのコード名は、
> 「COOL」(C like Object Oriented Language:Cライクなオブジェクト指向言語。
> クール)だった。だが、すでにほかの製品で使われているなどの理由で、
> この名前は採用されなかった。
>
> ほかの案として、「EC」(イーシー)、「C2」(シー・スクウェア)、「C3」(シー・キューブ)、
> また音楽の要素を取り入れて「C#」、元素の名前から「Cs」(シー・セシウム)などが
> 出てきた。「C#」を近くでよーく見ると、「C++++」に見える。そのような理由で最終的に
> 「C#」という名前に落ち着いた。
http://www.atmarkit.co.jp/fdotnet/insiderseye/20060215cscommunity/cscommunity_01.html
66デフォルトの名無しさん:2008/05/01(木) 08:21:06
コピペ君って馬鹿だな、まで読んだ。

コピペ君ってただのコピペに存在意義があると思ってるのかねひょっとして。
まあ普段無能で役立たずだと人に思われてるから、こんな「せせこましい」ことでもして
人に自分の価値を認めてもらいたいんだろうなw
67デフォルトの名無しさん:2008/05/01(木) 12:14:53
>>66 他人を見下すのに必死なんですね。わかります
68デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/01(木) 18:09:05
const string DefaultMyProperty = ゙初期化文字列゙;
string myProperty = DefaultMyProperty;
[DefaultValue(DefaultMyProperty)]
public string MyProperty {...}
70デフォルトの名無しさん:2008/05/01(木) 21:45:22
>>68
こういうユーティリティクラスを作っておくとか。
ttp://d.hatena.ne.jp/NyaRuRu/20071228/p2
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デフォルトの名無しさん:2008/05/02(金) 01:54:18
>>69
アトリビュートには const メンバーが使えるんだ、気付かなかった。

>>70
ありがとうございます、今回は単純なので const でいこうと思いますが、大変参考になりました。
これは、ものすごく応用範囲が広いと思います、今後何かと役に立ちそうです。
72デフォルトの名無しさん:2008/05/02(金) 18:22:19
ListViewのListViewItemSorterプロパティをVSから設定するには
どうしたら良いですか?
プロパティの項目を見てもListViewItemSorterが無いのですが。
73デフォルトの名無しさん:2008/05/02(金) 18:35:15
>>72
インターフェイスだから、本体を実装しないと設定できないので、デザイナにあっても意味がないんですよ。
実際に使ってみると分かるよ。
74デフォルトの名無しさん:2008/05/02(金) 22:40:32
iTextSharp使ってテンプレート読込んだけれど、その後の文字描画がテンプレートの下に隠れてしまうが、
レイヤの順序を操作する方法とかあるのでしょうか?
テンプレート読込み後に文字描画しても、その逆でも同じように隠れますが。
75デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/03(土) 11:45:53
>>75
そんな元スレで失笑買ってたレスをこぴってこなくても
77デフォルトの名無しさん:2008/05/03(土) 12:08:59
VC++ の頃: DWORD ? LPSTR ? 何それ?
C# に移行してから: DWORD や LPSTR がない?
一体どういうこっちゃ。 ('A`)
78デフォルトの名無しさん:2008/05/03(土) 12:40:41
なにがいいたいのかわからない
79デフォルトの名無しさん:2008/05/03(土) 13:00:34
つまり慣れってことですね、わかります
80デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/03(土) 13:46:13
>>76
詳細希望
82デフォルトの名無しさん:2008/05/03(土) 13:57:53
>>80
無理
83デフォルトの名無しさん:2008/05/03(土) 13:59:26
84デフォルトの名無しさん:2008/05/03(土) 14:01:44
APIを使わずにってのはどういう要求なんだろう
WinFormsの中でだって大量に使われているのに
85デフォルトの名無しさん:2008/05/03(土) 14:08:06
コピペ君って馬鹿だな、まで読んだ。
86デフォルトの名無しさん:2008/05/03(土) 14:18:03
C/C++ だと何行も書かないといけないけどC# なら2,3行でさくっと出来るって聞いてC# に移行した。
要は楽をしたいだけ。API を使ってごちゃごちゃやらなきゃいけないんじゃC#に移行した意味がない。
87デフォルトの名無しさん:2008/05/03(土) 14:28:04
だれがそんな嘘を吹き込んだんだよ
88デフォルトの名無しさん:2008/05/03(土) 14:30:16
>>80みたいなことにC#を使うのが間違い
89デフォルトの名無しさん:2008/05/03(土) 16:25:50
C#でXMLを扱う勉強をしています。
XMLに入っている大量のデータ(IDと名前)を読み込んで、
プログラムに入力されたIDとマッチさせて名前等のデータを表示させたいのですが
どのようなアプローチをするのがいいのでしょうか?
検索は何度でも行えるようにしたいので、その都度ファイルにアクセスするのは効率が悪そうだし
かといって膨大なデータを全て配列等に格納するのも資源の無駄遣いのような気がして悩んでいます。

XMLの構造は
<Person>
<ID>774</ID>
<Name>Hiroyuki</Name>
</Person>
が延々と続いたものです。
90デフォルトの名無しさん:2008/05/03(土) 16:31:47
どんだけ膨大か知らんけど普通にオブジェクトのコレクションとして取り込めばいいんじゃない?
内部でXMLとして保持する意味なんて無いっしょ。
91デフォルトの名無しさん:2008/05/03(土) 16:39:40
>>89
>検索は何度でも行えるようにしたいので、その都度ファイルにアクセスするのは効率が悪そうだし

2回目以降はキャッシュに載ってると思うけど。
結局OSのディスクキャッシュと同じものを作ることになるんじゃない?

もちろんアプリケーションサイドでやればOSのディスクキャッシュより効率は良くなるだろうけど
費用対効果考えて判断すればいいんじゃなかろうか。

OSのディスクキャッシュよりもヒット率の低いデータをメインメモリにため込むのはよろしくないと思う。
92デフォルトの名無しさん:2008/05/03(土) 16:51:40
キャッシュのことは完全に頭から抜けていました。
データをメモリに展開しない方向で考えてみます。
93デフォルトの名無しさん:2008/05/04(日) 02:38:28
LINQの出番
94デフォルトの名無しさん:2008/05/04(日) 07:21:32
ここでしていいのか微妙な質問なのですが・・・
Visual Studio 2005で作成しWebサイトの作成をしているのですが、
aspx側のJavaScriptで記述されたfunctionを、cs側のイベントの途中で記述して
呼び出したいのですが、どうしても方法を思い出せません。

順番としてはボタン等によるイベント→aspx画面表示→JavaScript呼び出しよるアラーム等
でできるはずなのですが、どなたかわかる方いらっしゃいましたらご教授をお願いしたいです。
95デフォルトの名無しさん:2008/05/04(日) 12:57:44
InvokeScript
96デフォルトの名無しさん:2008/05/04(日) 18:18:27
vs2008の3か月フリー版でC#をいじってます。
VC++Ver6ではDefWindowProc を追加するのは仮想関数のオーバーライド
ってところでやってましたが、C#では同様なことをするにはどうすれ
ば追加できますか?

どちら様かご教示のほど、よろしくお願いしますm(__)m
97デフォルトの名無しさん:2008/05/04(日) 18:37:32
生のメッセージ捕まえたいのならWndProcをオーバーライド
98デフォルトの名無しさん:2008/05/04(日) 18:56:54
>>97
早速の回答、ありがとうございます。
開発環境の使い方がいまいちわからないのですが、
オーバーライドするときは対象の関数を自分でタイプするような
かたちなのでしょうか?それともどこかのメニューから追加でき
るのでしょうか。
申し訳ありませんが、よろしくお願いします。
99デフォルトの名無しさん:2008/05/04(日) 19:02:54
クラススコープでいきなり override スペースって打ってみな。一覧がでてくるから。
選らんでエンターでメソッド雛形出来る
100デフォルトの名無しさん:2008/05/04(日) 20:46:10
>>99
実装できました。
どうもありがとうございましたm(__)m。
101デフォルトの名無しさん:2008/05/05(月) 23:10:36
VS2008で書いたプログラムで蛍光表示管に画像表示させて遊んでいます。

C#のSerialPortクラスにあるWriteメソッドを使って
蛍光表示管にデータ送信をしているのですが
送信途中でブルースクリーンが表示されてWindowsが落ちてしまうことがあります。

一度のデータ送信で300bytes弱、
それを延々と繰り返すようなプログラムを書いています。
そのループ中に、Windowsが落ちることがある、という状態です。

なぜブルースクリーンが出るのか、
どうすれば、ブルースクリーンが出なくなるか、が分かりません。
教えて下さい!
102デフォルトの名無しさん:2008/05/05(月) 23:20:32
ブルースクリーンの内容も書かずに質問とな
大体、複数のPCで試したのか?落ちるコードは?ふざけてんの?
103デフォルトの名無しさん:2008/05/05(月) 23:21:10
むしろSerialPortクラスでOSが落ちるってどんなコードかいてるのかこっちが聞きたいよ。
っていうか、だからとりあえずチミの環境でその現象が起こる最小のコードを晒そうよ。
104デフォルトの名無しさん:2008/05/05(月) 23:54:22
ハード的な問題とか?
その辺素人なんでよく分からんけど。異常な電圧がかかってるとか?
105デフォルトの名無しさん:2008/05/05(月) 23:59:25
ブルースクリーンってハードかドライバだろ
106デフォルトの名無しさん:2008/05/06(火) 02:48:34
>>105
十中八九そうだろうね

ただ、「デバイス、ドライバ、etc.が異常である」とOSが判断した結果なわけだから
ソフトウェア的な要因も無きにしも非ず。2000/XPならほぼ無いと思うけど
107デフォルトの名無しさん:2008/05/06(火) 03:43:51
ブルースクリーンのエラーの内容を書くのが先じゃね
108デフォルトの名無しさん:2008/05/06(火) 04:57:10
あれ一瞬で消えること多いのに、MSのサポートにはエラー番号のページを参照してくださいとか書いてあるよね。
109デフォルトの名無しさん:2008/05/06(火) 05:42:36
んでエラー番号検索かけてみたら見つからないと・・・
110デフォルトの名無しさん:2008/05/06(火) 06:51:11
>>108
システムプロパティの[詳細設定]の[起動と回復]の
[自動的に再起動する]にチェックが入ってるからだろ。

大抵のエンドユーザーはブルースクリーン出たら再起動するだけで、
内容見てもわけわかんないんだから
Microsoftは親切にデフォルトで[自動的に再起動する]にチェックが入ってる。
111デフォルトの名無しさん:2008/05/06(火) 16:37:59
それすらも知らないって事はそれすらもしてないって事か
112デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/06(火) 17:05:36
きもちわるいです
114デフォルトの名無しさん:2008/05/06(火) 17:11:24
string用のSum書けば?
115デフォルトの名無しさん:2008/05/06(火) 18:44:14
ラムダ式は書き方によってうんこになりすぎるな。
116デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/06(火) 19:12:46
せめて、int i を引数に取る Aggregate 書くとかした方が。
118デフォルトの名無しさん:2008/05/06(火) 19:27:19
Array.ConvertAllだろどう考えても
せいぜいSelect
119デフォルトの名無しさん:2008/05/06(火) 19:37:01
なんだこの Where, return false, Count 厨は
120デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/06(火) 19:55:47
newobj[] list = Array.ConvertAll<object, newobj>(arg, (obj) => new newobj(obj));
こういったメソッドも用意されていたのですね。
SQL?の知識が無いためSelectの使い方がよく解らなかったのですがそういう風に使えるんですね。
Aggregateはヘルプ見たのですがいまいち使い方わからなっかのですが便利そうですね。様々な使い方できそうです。
皆様どうもありがとうございました。
122デフォルトの名無しさん:2008/05/06(火) 20:00:10
>>120
112の方、仕様満たせてないぞ
123101:2008/05/06(火) 21:11:59
>>102-111
レスありがとうございます。

>>110の設定は知りませんでした…ありがとうございます。
・ブルースクリーンのエラー内容を見たところ、以下の通りでした。

STOP: 0x000000D1 (0x00000000, 0x00000002, 0x00000000, 0xBABC9185)
vrcomIT2k.sys Address BABC9185 base at BABC8000, DateStamp 3ec3702e
http://www.uploda.org/uporg1408089.jpg.html

(FYI:
>>106「デバイス、ドライバ、etc.が異常である」ということで思い出したのが、
PCのUSB端子から、蛍光表示管メーカーが用意している仮想COMドライバを使って
蛍光表示管にデータ送信している、ということをやっています。
もしかしたら本件と関係があるかもしれないので、書いておきます。)

他PCでの再現性については、PCを1台しか持っておらず、
申し訳ないのですがすぐ確認できる状況にはありません。

最小のコードについては、現在調査中です。再現ができ次第、UPしたいと思います。
124デフォルトの名無しさん:2008/05/06(火) 21:41:38
> 蛍光表示管メーカーが用意している仮想COMドライバ

臭いな。というかたぶんこれだろう。
125デフォルトの名無しさん:2008/05/06(火) 22:50:39
>>123
エラー内容みるかぎり、蛍光管メーカーに問い合わせるのが正解かと
ここで聞いても、運よく同じメーカー同じドライバで同じトラブルに見舞われている人以外には分からないかと。
とりあえずは、ドライバがそのOSに対応しているのか、そのへんから全部チェックしてみたらどうだ?
2kとかついてるから、Windows2000専用とかそういうのないか?
126デフォルトの名無しさん:2008/05/07(水) 00:06:52
STOP: 0x000000D1 は、メモリエラーの可能性も無きにしもあらずだから、
念のためmemtest86かけてみたら?まあ、そのエラーでブルースクリーンは
シリアル周り(ハードウェアモデムとか)のエラーとしてすっごくありふれた
ものだから、たぶんドライバの問題だろうね。
127デフォルトの名無しさん:2008/05/07(水) 18:53:43
VS2008は起動してるだけでメモリアクセスしてるから
たまに起動してるだけでブルスク(0x9C)になることがあるぜ。
まあ原因は安物メモリのせいかもしれないが。
128デフォルトの名無しさん:2008/05/07(水) 21:46:29
それがみんな出ていたらFAQに入るわ
129デフォルトの名無しさん:2008/05/07(水) 21:59:12
あきらかにハードが原因だろ
130デフォルトの名無しさん:2008/05/08(木) 13:50:15
>VS2008は起動してるだけでメモリアクセスしてるから
そりゃそうだろ。
メモリアクセスしないアプリがあったら見てみたい物だ。
131デフォルトの名無しさん:2008/05/08(木) 21:42:28
132デフォルトの名無しさん:2008/05/08(木) 21:47:01
133デフォルトの名無しさん:2008/05/08(木) 21:50:47
134デフォルトの名無しさん:2008/05/08(木) 22:08:25
135デフォルトの名無しさん:2008/05/08(木) 22:20:16
136デフォルトの名無しさん:2008/05/08(木) 22:25:29
137デフォルトの名無しさん:2008/05/08(木) 23:13:00
138デフォルトの名無しさん:2008/05/08(木) 23:43:39
139デフォルトの名無しさん:2008/05/09(金) 06:10:53
140130:2008/05/09(金) 12:01:02
あれ?なんか変なこと言った?
141デフォルトの名無しさん:2008/05/09(金) 12:17:29
ArrayList arrayをDataGridViewに表示させたいのですが、DataSource=arrayとやっても何も出ません。
何か良い方法はありませんでしょうか?
142デフォルトの名無しさん:2008/05/09(金) 12:19:48
143デフォルトの名無しさん:2008/05/09(金) 13:03:35
144デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/09(金) 21:58:27
arrayが空っぽ
146デフォルトの名無しさん:2008/05/09(金) 22:10:19
そろそろ麻雀やろうか
147デフォルトの名無しさん:2008/05/10(土) 00:22:23
readonly(private setじゃなくてコンストラクタ以外で変更できないようにする方ね)にするためだけに
自動プロパティを使うのを諦めてフィールドを手書きするのが悔しい
148デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/11(日) 07:55:28
良くわかんないけど
C側のイメージとしては
struct T_INFO_DATA
{
DWORD Id;
DWORD Fixed;
BYTE * Array;
}
となっているわけですが、問題ないのですか?
150デフォルトの名無しさん:2008/05/11(日) 07:59:51
>>149
+アルルファ
byte [] Array の位置にはポインタが入っているわけでなく、メモリーブロックへのハンドルが入っています。
byte [] オブジェクトを確保して、そこに格納する必要があるのではとか?
ぱっとみ思いつく限り
151デフォルトの名無しさん:2008/05/11(日) 09:48:21
やったことはないけども、
int とか IntPtr にして MarshalAs でなんとかできないかな。
152デフォルトの名無しさん:2008/05/11(日) 09:55:02
153デフォルトの名無しさん:2008/05/11(日) 12:07:22
メモリハンドルをIntPtrで受け取っておいて、LocalLock、Marshal.Copy、かな。
あと、Arrayというメンバは名前をhMemとかに変えろ。
154デフォルトの名無しさん:2008/05/11(日) 13:16:46
>hMem
むしろキモイ
155デフォルトの名無しさん:2008/05/11(日) 13:23:41
そうか?
すぐAPIに渡すものなら、APIの引数名に合わせた方がわかりやすいだろ?
156デフォルトの名無しさん:2008/05/11(日) 13:34:18
C#を一から始める際に参考になるサイトとか教えてもらえませんか?
157デフォルトの名無しさん:2008/05/11(日) 13:38:40
ケースバイケースだろうね。
Win32APIはともかく、デバイス屋が提供している制御用のAPIなんて
意味不明すぎる命名がされてること多いし。
158デフォルトの名無しさん:2008/05/11(日) 13:45:03
>>156
「C# 入門」でぐぐって一番上。
159148:2008/05/11(日) 17:40:01
>>149
C側のイメージだと、
struct T_INFO_DATA
{
DWORD Id;
DWORD Fixed;
BYTE Array[48];
}

という認識です。
ポインタを送るほうがいいのでしょうか?
160デフォルトの名無しさん:2008/05/11(日) 19:23:15
>>159
構造体メンバの固定長配列は、
unsafe 限定で fixed って構文がある。

http://ufcpp.net/study/csharp/sp_unsafe.html#fixed
161デフォルトの名無しさん:2008/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かどうかの保証はない。
あとは調べてくれ。
162148:2008/05/13(火) 07:16:56
>>161
ありがとうございます。
構造体をその記述にするだけでうまくいきました。
163デフォルトの名無しさん:2008/05/13(火) 15:55:00
相談内容
RS232C通信のプログラムを作っているのですが、
デバックの効率化のために実際の通信内容を別Windownにてモニタリング
できないか検討してます。

本当はStreamにフックするだけで使えるものが他のデバックにも使えて
望ましいのですが、そんな便利なクラスってないれすか?
164デフォルトの名無しさん:2008/05/13(火) 16:02:31
.Net には、フックの類はないよ
自分がやるとしたら、Streamクラスから派生したクラスにフックコードを挿入したアダプタクラスを作って
RS232C通信をアプリ側でフックする
引き続いてWCFを使ってプロセス間通信ができるように、サービスを作って
別ウインドウで作ったデバッグウインドウは、そのサービスに接続して、状況を読み取るといった形式にすると思う。
ついでに、通信情報以外の各種情報もモニターできるようにするかな。
165デフォルトの名無しさん:2008/05/13(火) 16:09:14
昔、まさにそういうツールがフリーであって重宝したなあ。
NTで動いてたから、今でも使えるとは思うが何って言ったっけな。
166デフォルトの名無しさん:2008/05/13(火) 16:12:25
便利とは思うが、盗聴まがいのAPIはよろしくないから無くした方がいいと思う。
キーボードフックを筆頭に。
167163:2008/05/13(火) 16:38:31
>>164さん,165さん
レス有難う御座います。
アダプタクラスですか・・
腑抜けの私には、むりっぽそうですw。

申し訳ない、追加で質問なんですが、
フックがだめなら、
またStreamの中身を盗見することって難しいのでしょうか?

普通に考えると
ReadStreamは一度読み取ると消えちゃうし、
WriteStreamはそもそも読めないですよね。

これができれば、何とか簡易もどきが作れそうな気がするのですが
168デフォルトの名無しさん:2008/05/13(火) 16:47:43
>>167
中身みるよりアダプタの法がよっぽど楽だ、Streamクラスの抽象関数オーバーロードして、呼び出しをそのままReadStreamなりWriteStreamなりに渡せば以上終了だぞ。
169デフォルトの名無しさん:2008/05/13(火) 16:53:10
>>167
いい機会だからデザインパターンを勉強しような
170163:2008/05/13(火) 16:57:26
>>168
そうですか。了解です。

普段は組み込み関連の仕事が多いもので、
不慣れな環境なんで、他に良い手がないか、
無駄に時間をつぶして調べ回っていました。

アダプタ法で頑張ってみます。
勉強になります。有難う御座います!!
171163:2008/05/13(火) 17:20:28
ぐは、早くも生きづまった・・
SerialPortクラスのBaseStreamメンバはReadOnly・・・
Streamの継承クラスを渡せない・・
早くもだめぽw

そうすると専用のStreamReadrとWriterを自作するのが王道でしょうか?
それとも、SerialPortクラスを継承してメソッドを書き換えるか・・

>>169さん
アドバイス有難う御座います
今度本を買ってきます。
デザインパターンの根本的なところを理解していないのに、
何か作ろうとするから、いつもメタメタになる・・
172デフォルトの名無しさん:2008/05/13(火) 17:39:58
本買って読むのもいいが、この種の本は場数が足りんとどうせ読めんよ。
自分で頭をひねって考えるのが重要。
class MyStream : Stream
{
Stream rs232 = ここで、BaseStream を突っ込む
override 関数各種() { rs232.同名の関数() ; }
}
基本は、こうやって作る。とにかくオブジェクト図を描くこと。
オブジェクト間のメッセージ(関数の呼び出し)の接続が最少になるのはどういう時かよく考えること。
さっさとオブジェクト指向アプローチをおぼえて、古いやり方は捨てること。
173163:2008/05/13(火) 17:55:08
>>172さん
有難う御座います。
コードまで書いて頂き、お時間を取らせてしまって、
すいません。

なるほど!!、こうすればBaseStreamそのものがReadOnlyでも制御できる。
こうすれば、デフォルトのStreamReaderが使いまわせる。
つくづく自分の頭の固さが嫌になります。

>とにかくオブジェクト図を描くこと。
>オブジェクト間のメッセージ(関数の呼び出し)の接続が最少になるのはどういう時かよく考えること。
>さっさとオブジェクト指向アプローチをおぼえて、古いやり方は捨てること。
こういった、アドバイス非常にありがたいです。!!
自分でもあがいてはいるのですが、
周りにこういった話が出来る人がいないんです。

オブジェクト図ですね。書きまくって見ます!!
174163:2008/05/13(火) 18:04:07
>>172さん
まだいらっしゃるかな・・
>オブジェクト間のメッセージ(関数の呼び出し)の接続が最少になるのはどういう時かよく考えること。
もしよろしければ、この部分についてもう少し解説していただけないですか?
これは、どんなときに考えるのでしょうか。
クラスの責務の振り分け/分割時?
またメッセージの接続が最小になると、どんな良いことがあるのでしょうか?

質問ばかりですいません。
175デフォルトの名無しさん:2008/05/13(火) 18:11:30
オブジェクト指向のもっとも重要なポイントは、クラスではなくインスタンス。
インスタンスが主役であって、クラスはオマケ。継承がウンタラとかいう連中もいるが間違っているから相手にするな。
今四つのインスタンスがあるとする、それぞれ A , B , C , D
粒度が細かすぎて取り扱いにくいので、二つにまとめてみようと考えてみる。
インスタンスAがBを呼び出すなら
A --関数名--> B
と書いてみる。
まとめる方法は[A,B,C] [D]がよいか[A,B] [C,D]がよいか。
呼び出しが最少になるような図を考えてみよという事。
適当に矢印書きまくって、最小になるように分離してみるといい。
あとは応用。
176デフォルトの名無しさん:2008/05/13(火) 18:56:57
インスタンスが主役でクラスがおまけ、って俺には理解できない発想だマジで。
っていうか、それに類するような主張をこれまでに聞いたことがないよ。
177デフォルトの名無しさん:2008/05/13(火) 19:06:45
なにいってるかよくわからんが、継承か包含かちゅー話じゃないのか
178デフォルトの名無しさん:2008/05/13(火) 19:12:02
プロトタイプ指向のことなんじゃね
179デフォルトの名無しさん:2008/05/13(火) 19:16:53
インスタンスが主役w
180デフォルトの名無しさん:2008/05/13(火) 19:21:47
C#は型指向
181デフォルトの名無しさん:2008/05/13(火) 20:35:08
>>176
オブジェクト指向を扱っているサイトにいってみたら?
そうすれば無知も治るよ
182デフォルトの名無しさん:2008/05/13(火) 20:39:21
オブジェクト指向ではインスタンス(実体)は脇役だろう。
183デフォルトの名無しさん:2008/05/13(火) 20:40:36
>>182
今から15年前くらいは、確かにそういう事になっていたが、そのまま固まったか?
184デフォルトの名無しさん:2008/05/13(火) 20:43:19
Javaが登場して以降、体系的に研究されたオブジェクト指向もちょっとは勉強するといいよ。
でないと、デザインパターン意味や使い方など理解に及ぶことはできないし、上の例だって発想することすら難しいだろう。
185デフォルトの名無しさん:2008/05/13(火) 20:46:44
Javaと関係なく研究は進んでいたと思うんだけど。
186デフォルトの名無しさん:2008/05/13(火) 20:50:18
何言ってんの。
オブジェクト指向イコールJavaと言ってもいい程だよ。
187デフォルトの名無しさん:2008/05/13(火) 20:52:15
その進んだ研究を勉強していないのは駄目だという事だよ
今のライブラリは当たり前にその設計思想が入っているからな、知らないと使い方分らんだろ。
188デフォルトの名無しさん:2008/05/13(火) 20:53:17
>>186
ゴールじゃねぇよ、LINQとか見てみろ
189デフォルトの名無しさん:2008/05/13(火) 20:54:35
別にオブジェクト指向がどうとかこうとかどうでも良いよ
190デフォルトの名無しさん:2008/05/13(火) 20:55:05
インスタンスは実体。
お前はパソコンに文字を表示させるとき、直にVGAのメモリを書き換えるのか?違うだろう。
ドライバやらOSやらGDI+やらライブラリ郡など抽象化されたものを通してアクセスし表示させるだろう。

オブジェクト指向はインスタンス(実体)を直接操作せず、抽象化して利用しやすくする手法。
インスタンスがメインなわけがない。
191デフォルトの名無しさん:2008/05/13(火) 20:55:55
>>188
ゴールなんて関係ないこと持ち出して自ら否定して
結局何が言いたかったのかね。
192デフォルトの名無しさん:2008/05/13(火) 20:56:37
>>190
ヒント:言葉遊び
193デフォルトの名無しさん:2008/05/13(火) 20:56:38
>>190
そうだな、もう永久にそう思っていろよw
194デフォルトの名無しさん:2008/05/13(火) 20:59:04
>>190
そんな考えでも君のプログラムがちゃんと動くならそれでいいよ
それはそれで正しいわけだから
195デフォルトの名無しさん:2008/05/13(火) 21:00:26
良いコード:動くコード
悪いコード:動かないコード
196デフォルトの名無しさん:2008/05/13(火) 21:05:01
クラスが主役 に一致する日本語のページ 約 290,000 件中 1 - 10 件目 (0.30 秒)
インスタンスが主役 に一致する日本語のページ 約 1,790 件中 1 - 10 件目 (0.06 秒)
197デフォルトの名無しさん:2008/05/13(火) 21:11:37
タイヤキの型とタイヤキそのもの
どっちも主役です(ゆとり教育的発想)
198デフォルトの名無しさん:2008/05/13(火) 21:34:08
もうこの手の話がしたい奴はOOPスレ行った方がいいよ。
あそこは>>175的なトンチキな自説をぶってるアホが延々同じネタをループしてて楽しいと思うよ。
俺は正直吐き気がするけどねああいうの。

ちなみに>>190は半分はいいこと言ってると思うんだよね。
OOPというアイデアの肝は、>>190の言う抽象化(より正確には仮想化と言うべきだと思うけど)された
仮想機械をより直感的に表現するコーディング手法ということだと思う。

ただ「実体=インスタンス」ってのは全然意味不明だが。
199デフォルトの名無しさん:2008/05/13(火) 21:36:29
インスタンスの和訳が実体だろ・・・
200デフォルトの名無しさん:2008/05/13(火) 21:43:41
>>188
LINQはオブジェクト指向とはまた別だろ。
関数型プログラミングのほうが近い。
201デフォルトの名無しさん:2008/05/13(火) 21:45:09
なんか、こう訳わからん事になっているから、少し書くと
たとえば、C++でいう所の仮想テーブルは、virtual などなくても class のみで作り出すことができる。
これは非常に重要なことで、仮想テーブルは書き換えられないが、自分で作った仮想テーブルは書き換えられる。
このような実装は、Strategyパターンと呼ばれる。
つまり、classを使った抽象化は実は必要なく、ただ『頻繁に出てくるので言語上にvirtualとして実装しておくと便利であるという程度の意味』しかないのだ。
オブジェクト指向を理解する上で、この点について理解しているかどうかは決定的だ。
理解せずクラスと継承を中心に置くとやれる事が一気に限定されてしまうのだ。
さらには、継承には各種問題点も指摘されてり、特に深い継承は良くないと最近はされている。
また原則、継承を考える前にインターフェイスを検討するべきとされている。

参考コーディング規約
http://www.kawabata.com/dotnet/CodingStdCS.pdf
参考サイト
http://www.objectclub.jp/
202デフォルトの名無しさん:2008/05/13(火) 21:49:06
>>199
話の文脈を読まなきゃ。
>>190の言う「実体」とは「クラスによって抽象化される前の何者か」。

たとえばGDIならビデオカードやプリンタのハードウェアのことを「実体」といっている。
少なくとも話の前半ではね。
203デフォルトの名無しさん:2008/05/13(火) 21:51:16
>>201
それって結局、包含と委譲のことだろ。クラス対インスタンスという話ではない。
継承だけがクラスの特徴ってわけじゃないぞ。
204デフォルトの名無しさん:2008/05/13(火) 21:51:26
>>202
確かに変だな。
205デフォルトの名無しさん:2008/05/13(火) 21:53:21
>>203
つってもインスタンスを大量生産するための鋳型以上の意味もないだろ?
206デフォルトの名無しさん:2008/05/13(火) 21:55:38
>>175
ひょっとしてインターフェイスと書くところをインスタンスにしてしまって
引っ込みが付かなくなったとか。それなら文脈があうが・・・
207デフォルトの名無しさん:2008/05/13(火) 21:57:38
>>206
インターフェイスもインスタンスの一つと見なしてよいものだよ。
インターフェイスは取得するものだ。
208デフォルトの名無しさん:2008/05/13(火) 21:58:17
>>207
またまた荒れるような書き方をするな。
209デフォルトの名無しさん:2008/05/13(火) 21:59:06
いったい君たちは何の話をしてるの?
誰か頭のいい人ドラゴンボールに例えてくれよ
210デフォルトの名無しさん:2008/05/13(火) 22:00:06
ドラゴンボールの主人公はヤムチャなのか天津飯なのかと言う話
211デフォルトの名無しさん:2008/05/13(火) 22:27:53
実装と概念は分離して語れよ
212デフォルトの名無しさん:2008/05/13(火) 22:30:20
↑といいつつ乖離して語る馬鹿
213デフォルトの名無しさん:2008/05/13(火) 23:10:09
主役はキーボードを打つキミだ!!
214デフォルトの名無しさん:2008/05/14(水) 01:52:33
>>209
サイヤ人→クラス
悟空→インスタンス
215デフォルトの名無しさん:2008/05/14(水) 01:57:38
スーパーサイヤ人→スーパークラス
216デフォルトの名無しさん:2008/05/14(水) 04:08:51
ブルー将軍→サブクラス
217デフォルトの名無しさん:2008/05/14(水) 06:42:59
クラスもメタクラスのインスタンスだから、
インスタンスが主役ということでおk、みたいな話か?
218デフォルトの名無しさん:2008/05/14(水) 06:58:38
決定的な違いは、メタ視点を持てているかどうかだろうな
明らかに不自由な設計やコーディングをしているのは明白なのだが
目が見えていないので、それを理解するのが困難になっているような気がする。
219163:2008/05/14(水) 09:30:42
皆さん、いろいろとアドバイス頂き有難う御座います。

すこしスレが荒れ気味ですが、これは私の無知を175さんが丁寧に
ご指導してくださった点から始まっているかと思います。
原因は私にあります。スレを汚して申し分けありません。

最近良く思うのですが、OOPの浸透が何故遅いかと、
1)基本概念と実装に大きな開きがありすぎる。
2)考え方に様々な歴史や諸説があり、人や本によって解釈が異なる。
(人によって解釈が異なるのは、読んだ本の年代が大きく依存しているんでしょうか・・)
の2点に集約してるかと思います。

OOPが不慣れなものにとっては
具体的な実装論はなかなか本の中には出てこず、
また、こーいう現場的な定石というのか考え方が定まらなくて、
悩んでいることが多いんです。

だから、175さんを始め皆様より貴重なアドバイスを頂いた件は、
非常に感謝しております。

インスタンスの件は、2論に分かれているかと思いますが、
これは馬鹿な私にでも分かるように説明した為の、言葉の綾かと思います。

長文になってしまい申し訳ありません。
とても勉強になりますた。
皆様を師匠と仰ぎ、また伺わせて頂きます!!
220デフォルトの名無しさん:2008/05/14(水) 12:43:48
くだらない哲学論争は後回しにして、とりあえずクラスの利便性(哲学論争クンはこういう言い方に反発するようだけど)
を体得するのがいいと思うよ。っていうかそれが一番重要。
大して難しいことじゃないから使ってれば自然とわかるよそれは。

くれぐれもOOPを外から強制された義務的なものに過ぎない、などと考えないこと。
便利だから使われてるんだよ。

OOPが浸透してないとは俺には思えないけど、もしそうであるのなら
それはOOPが「つかえねえ」からじゃなくてこの業界に馬鹿が多いからだよw
221デフォルトの名無しさん:2008/05/14(水) 14:16:24
質問です
UDPで受信したメッセージをテキストBOXに表示する処理の方法論です。
今は、UDP受信を別スレッドで受信して。セマフォー同期ででString変数に渡し。
フォームのプロセスで、タイマー関数からセマフォーを同期で文字列を受け取って
テキストBOXに表示しています。
しかし、今一つスマートでないような気がしてなりません。もっと良い方法がないでしょうか?
222デフォルトの名無しさん:2008/05/14(水) 14:38:37
普通に Control.Invoke でいいんじゃねーの?
223デフォルトの名無しさん:2008/05/14(水) 15:20:18
タイマースレッド内に、Invokeで受信部分を入れてみたのですが。
ダメみたいな感じでした。
問題点1 Invokeスレッドが終了しない。
問題点2 結局、セマフォーで受信の確認を取るので処理的に同じ。
ただし、使い方が悪いのかもしれない。

別スレッドから、フォームに非同期イベントが出せればいいのだけど、その方法を知らない。
きっと有るような気がします。すごく初歩的な機能かも知れない…
224デフォルトの名無しさん:2008/05/14(水) 15:36:47
223が何を言ってるのか全く分からない
Invoke スレッドて何?
225デフォルトの名無しさん:2008/05/14(水) 16:14:15
>>224
んなこと言ったら、余計意味不明な説明が始まりかねん

で、結論
Invokeの意味を理解できてない
Invokeの使い方が間違っている
226デフォルトの名無しさん:2008/05/14(水) 16:18:18
>>225
>Invokeの意味を理解できてない
その可能性もある。
>Invokeの使い方が間違っている
この問題にInvokeが適用できない。又は、別つの方法があるが使用したくない。

ちなみに、Invokeの中は一つのスレッドであることは理解していますよね?
227デフォルトの名無しさん:2008/05/14(水) 16:54:08
>>221
Control.Invokeが解っていないなら、
http://codezine.jp/a/article.aspx?aid=139
228デフォルトの名無しさん:2008/05/14(水) 17:32:06
>>222-227
出来ました。 結論:Control.Invokeが解っていなかった。無知でした。
申し訳ありません。そしてありがとうございました。
229デフォルトの名無しさん:2008/05/14(水) 21:33:17
本当の主役はテレビの前のあなたです!!m9ビシッ
230デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/14(水) 23:37:25
enumハックを思い出した
232デフォルトの名無しさん:2008/05/14(水) 23:46:14
キモい命名法だ
233デフォルトの名無しさん:2008/05/14(水) 23:58:18
>>230
速さは一緒
値自体に意味があるならenumじゃなくてconstの方が適切
でもpublicならconstじゃなくてstatic readonlyにした方がいい
234デフォルトの名無しさん:2008/05/15(木) 00:14:07
>>233
知らなかった知識です、ありがとうございます。
235デフォルトの名無しさん:2008/05/15(木) 00:35:48
constと(static )readonlyは全く別物だから、
ちゃんと調べて使い分けるようにした方がいい
236デフォルトの名無しさん:2008/05/15(木) 02:28:29
>>235
どこがどう違うかを書いた方がいい
237デフォルトの名無しさん:2008/05/15(木) 02:44:41
自分で書けよ
238デフォルトの名無しさん:2008/05/15(木) 02:48:18
constに出来るものをstatic readonlyにした方がいい理由ってなんだよww
239デフォルトの名無しさん:2008/05/15(木) 03:26:42
>>238
メモリの節約。
240デフォルトの名無しさん:2008/05/15(木) 03:30:00
↑アホ
241デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/15(木) 07:48:45
constを他のアセンブリから参照すると、参照元のアセンブリにも定数が埋め込まれる。後で値を変えたらさあ大変。
数学定数みたいに、絶対に値が変わることがないもの以外は、static readonlyにしたほうが無難。
あとはSizeとかDateTimeみたいに初期化の必要なものを、定数っぽく扱いたいときに。
243デフォルトの名無しさん:2008/05/15(木) 09:05:11
それは完全に枝葉というか性質というか…全然別という意味分からないだろ
constはコンパイル時に値が確定される定数、readonlyは書き込み不可な変数。

見えてくる違いとしては、constはコンパイル時に評価されるので使える範囲がちょっと広い。
定数式しか許されない属性指定内部やswitchのcase句にも使用可能。これらに使用される場合境界越えで
あってもconstにする必要がある。

ちなみにenumの個々の値はconstなのでenumを等価に置き換えるならconstになる。
244デフォルトの名無しさん:2008/05/15(木) 09:25:48
enumの値が変わったら大変なことになるんだな
245デフォルトの名無しさん:2008/05/15(木) 09:27:54
外部に公開している列挙体を不用意に変更しちゃマズいのか。
246デフォルトの名無しさん:2008/05/15(木) 10:09:30
>>242
これは知らなかった。勉強になる
247デフォルトの名無しさん:2008/05/15(木) 14:15:35
ところでなんでcaseには定数しか書けないの?
248デフォルトの名無しさん:2008/05/15(木) 14:33:21
定数じゃないと、複数該当することもあるからじゃない?
まあ上から順番に比較するような仕様のやつもあるが。
249デフォルトの名無しさん:2008/05/15(木) 17:34:50
あとジャンプテーブル変換
250デフォルトの名無しさん:2008/05/15(木) 18:23:06
実装を簡単にするための手抜き
251デフォルトの名無しさん:2008/05/15(木) 22:20:36
かといってVBのSelectCaseは自由すぎると思わないか?
252デフォルトの名無しさん:2008/05/15(木) 23:37:20
selectっていうのは0,1,2,3,4...
みたいに連番で並んでると
それを関数ポインタの配列みたいにしてジャンプすることが出来る
だから定数じゃないとどうしようもない
253デフォルトの名無しさん:2008/05/16(金) 02:00:26
バカばっかw
254デフォルトの名無しさん:2008/05/16(金) 08:37:30
↑暴走中。
255デフォルトの名無しさん:2008/05/16(金) 10:48:23
>>251
バグを引き起こしかねない問題を含まない限り、自由度は高いに越したことはないよ
C#は新規なんだから、switch case の構文にこだわるべきじゃないとは思った
もともと、switch は C の特殊 goto label の構文な訳だし、考え方が古臭すぎる。
for 文からの脱出に break を使いたくても、switchにとられてしまうとかダサいと思うので。
256デフォルトの名無しさん:2008/05/16(金) 11:37:15
フォールスルー不可能にもかかわらずbreak必須って時点で(ry
257デフォルトの名無しさん:2008/05/16(金) 11:38:59
たしかに。
この辺何とかならなかったのか。
C、C++からの移行を意識してるならswitch caseと別の構文にすればいいしな
258デフォルトの名無しさん:2008/05/16(金) 11:57:33
>>252
stringにもswitchは使える
その場合はif(str=="a") /*case a*/ else if(str=="b") /*case b*/ else if…
みたいなコードにコンパイルされる
259デフォルトの名無しさん:2008/05/16(金) 16:01:00
>>258
たくさんあるとDictionaryを使うらしいぞ
260デフォルトの名無しさん:2008/05/16(金) 18:35:22
#regionはIDEで出来るようにした方がいいと思う。
261デフォルトの名無しさん:2008/05/16(金) 18:49:50
それを言語そのものに組み込むところはC#の特徴というかアピール
IDEサポートを謳ってる言語なんだから
262デフォルトの名無しさん:2008/05/16(金) 19:29:25
C#3.0の自動プロパティ作ると、[xxx]k_BackingField(うろ覚え)とかいうような変数が内部で生成されてるらしいんだが、これにソースコード上で属性を付加する方法ってありますか?
自動生成のプロパティにつけても自動生成される変数には付加されないみたいです。
263デフォルトの名無しさん:2008/05/16(金) 19:54:51
>>261
C++にもあるよ。
てかそれなら両方サポートすればいいじゃん。
264デフォルトの名無しさん:2008/05/16(金) 20:02:54
>>262
> 自動実装するプロパティ (C# プログラミング ガイド)
>
> 自動実装したプロパティでは、属性は使用できません。プロパティのバッキング フィールドで属性を使用する必要がある場合は、通常のプロパティを作成します。
265デフォルトの名無しさん:2008/05/16(金) 20:05:39
>>264 ('A`)マンドクセ
266デフォルトの名無しさん:2008/05/16(金) 21:21:12
プログラミングC#っていう本を買おうかと思ってるんだけど
これ2年前に第4版が出たのが最後で、C#2.0対応とかVS2005対応とか書いてるよね
もう今はC#3.5とかVS2008もでてるけど、近いうちに第5版とか出たりしそうかな?
それとも第4版の内容でまったく問題ない?
267デフォルトの名無しさん:2008/05/16(金) 21:27:06
普通に考えれば最新の機能には対応してない。それだけだ
268デフォルトの名無しさん:2008/05/16(金) 21:32:47
C#3.5って出てるの?
269デフォルトの名無しさん:2008/05/16(金) 21:39:45
>>267
まあ、そうだね。サンクス

>>268
ごめん、嘘ついた。NET Framework 3.5でもC#は3.0のままです

ちょっと調べてたら原書のProgramming C# 3.0ってのは去年末にでてるんだな
日本語版でないかなー
270デフォルトの名無しさん:2008/05/16(金) 23:43:57
始めたばかりの俺はそれを待っている
今は猫と初めてを併用して学習中
271デフォルトの名無しさん:2008/05/17(土) 01:02:27
原書買えよ
272デフォルトの名無しさん:2008/05/17(土) 02:10:19
質問です。
DataGridViewで自動カラム生成機能ってありますけれど
あれのカラムのフィールド名はこちらから指定できないんでしょうか?
(特にReflectionを使った手法で)
プロパティに属性つけるとかしたら上手くいくんじゃないかと思ってるんですが…

ご存知の方いましたらお教えください。
273デフォルトの名無しさん:2008/05/17(土) 03:11:04
自動生成したらフィールドも何もないと思うが、
カラムのフィールド名って具体的に何を指してる?

デザイナで列を追加したときにフォームに作られる
Column*フィールドの名前のことか?
274デフォルトの名無しさん:2008/05/17(土) 06:16:50
>>273
すいません、あまりにも説明不足でした。
フォームのカラムのヘッダに表示される文字列のことです。
プロパティ名がそのまま文字列変換されて表示されているようなので
多分どこかで設定できるんではと思っているのですが…
275デフォルトの名無しさん:2008/05/17(土) 07:41:53
Select()でプロパティ名を変えた匿名型にすればいい

var e1 = ...; // 元のデータソース: IEnumerable<Hoge>
var e2 = e1.Select(x => new { Bar = x.Foo, ... });
276デフォルトの名無しさん:2008/05/17(土) 08:36:22
知らない文法だなぁと思ったら2008ですか…。

ちょっと調べてみます。ありがとうございます。
277デフォルトの名無しさん:2008/05/18(日) 16:45:58
Seleは2005でもあるんじゃ?
ラムダはデリゲートになおせばいいよ
278デフォルトの名無しさん:2008/05/18(日) 16:47:00
Selectな
279デフォルトの名無しさん:2008/05/18(日) 16:50:05
ごめん嘘だ
http://msdn.microsoft.com/ja-jp/library/bb548891.aspx
3.5からだった
280デフォルトの名無しさん:2008/05/18(日) 22:57:12
2005でも似たようなのを作ることは出来るがラムダ式がないと使い物にならない
281デフォルトの名無しさん:2008/05/19(月) 06:12:12
2008に慣れてしまって、もうLastOrDefault()相当のコードを書くことすら面倒くさい。
282デフォルトの名無しさん:2008/05/19(月) 14:21:56
WindowApplicationを作っています。

別スレッド(固定周期)でDBの値を引いてきて、Form(メインスレッド)のラベル.Text属性に値を設定する
という処理を行なっていますが、
表示されるのは最初だけで、その後DBの値を変えてもラベルの値が変更されません。

どうしたらいいかご教授ください。
283デフォルトの名無しさん:2008/05/19(月) 14:29:09
>>282

>>227と同じかな?
284デフォルトの名無しさん:2008/05/19(月) 19:18:45
同一のストリームをBinaryReaderとBinaryWriteに食わせた場合、
Closeを呼び出す順番ってどうすればいいの?

ついでに、フィールドで持っているストリームをメソッド内のローカルの
BinaryReader/BinaryWriterに食わせた場合、仮にメソッド内でClose呼んだりusingを使ったり
することを避けたとしてもBinaryReader/BinaryWriterがGCに回収されるタイミングで
ストリームも強制的に閉じられてしまうんだろうか?
285デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/19(月) 20:57:42
>>285
今までC++使っていた人?

C++がstd::bind1stやstd::bind2ndをありがたがって使っているのは
今までC++に簡潔なラムダ式が存在しなかったという特殊事情もあるので
C# 3.0で無理してまねる必要は無いと思うよ。

C#だとSetArgみたいなのを作ってもインライン展開されないしね。
288デフォルトの名無しさん:2008/05/19(月) 20:59:06
なんかすごいレベルの高い話してる・・・
289デフォルトの名無しさん:2008/05/19(月) 21:00:24
慣れてないだけだよ
解ればそんなに難しくない
290デフォルトの名無しさん:2008/05/19(月) 21:10:48
>>284
Disposeは複数回呼び出されても大丈夫だから,続けて呼びさえしていれば問題ないんじゃね
BinaryReaderやBinaryWriterはファイナライザを実装してないから
それらがGCされるときにストリームが勝手に閉じられることはないよ
ストリームへの参照がどこかで繋がってる限りは大丈夫
291デフォルトの名無しさん:2008/05/19(月) 21:44:31
>>290
ありがと。
292デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/19(月) 22:29:40
いやそれは遅延のせいではないんじゃ…
294デフォルトの名無しさん:2008/05/19(月) 22:31:29
C#のデリゲートはクロージャでない
295デフォルトの名無しさん:2008/05/19(月) 22:34:25
遅延させたいんでしょう、つかその必要がなければ、Lambdaなど使わずにその場で計算すれば済むわけだし。
296デフォルトの名無しさん:2008/05/19(月) 22:39:05
Cocoaバインディング便利そうなんだけど、C#でUI作るとき同じようなもの作ったりしてる人おる?
297デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/19(月) 22:44:05
ListView.ItemSelectionChangedイベントで選択Itemが変化したのを検出し、
別の詳細表示フォームの表示を更新する、といったことをしています。

何も選択していないときは、詳細表示では何も表示したくないので全て消去しているのですが、
ItemSelectionChangedイベントは、選択が切り替わるときに「選択解除」と「選択」の2つのイベントを発生させます。
そのため「表示の解除⇒再表示」となってしまい、妙なチラツキが発生してしまっています。

1回目の解除用のItemSelectionChangedイベントでは、次に選択が入るかどうかが分からないので、
どうやってチラツキを抑えようか困っています。
この問題を改善する方法はないでしょうか?
299デフォルトの名無しさん:2008/05/20(火) 01:04:48
>>292
こういうので良いんじゃない?

var list = Enumerable.Range(0, 100).Select(i => (Func<int>)(() => i + 5)).ToList();
300デフォルトの名無しさん:2008/05/20(火) 01:25:06
>>298
SelectedIndexChanged使えば?
301デフォルトの名無しさん:2008/05/20(火) 02:04:34
>>297
やり方はそれでOK
そのコード自体はNullReferenceExceptionになるけどなw

てか、C#でラムダ式に(パラメータ以外の)変数を入れる場合は、
基本的にスコープを最小限して、参照型ならコピーを使うというのは
for文の条件に不動小数点数を使わないのと同じくらい常識だと思う

あと、ラムダ式をごちゃごちゃ弄る場合は式木使った方がいいと思う
MSDNのどこかに載ってるExpressionVisitor使えばいろいろ出来る
302デフォルトの名無しさん:2008/05/20(火) 02:15:36
intはいつから参照型になったんだ
303デフォルトの名無しさん:2008/05/20(火) 03:25:22
>>300
それも試してはいるのですが結果は一緒でした。
マニュアルには複数選択のListViewの場合は削除と追加の時に呼ばれるとありますが、
これはMultiSelect=falseの設定でも同じ仕様で動いていました。
何か設定が足りないのでしょうか?

 (アイテム選択状態)
⇒別のアイテムを選択する
⇒ListView.SelectedIndexChangedが呼ばれる(選択要素数を確認すると要素数0)
⇒ListView.SelectedIndexChangedが呼ばれる(選択要素数を確認すると要素数1)

SelectedItemsだけでなく、SelectedIndicesの内容も同様です。
304デフォルトの名無しさん:2008/05/20(火) 03:43:33
選択解除するタイミングはもっと限定できるんじゃないの
そのタイミングでだけ消せば
305デフォルトの名無しさん:2008/05/20(火) 08:46:40
>>303
何も選択してないときの処理を別コントロールにフォーカスが移ったらって条件にすれば?
306デフォルトの名無しさん:2008/05/20(火) 09:09:56
PictureBoxかPanelのようなコントロールをウィンドウ上に貼り付ける場合、
一画面でどれくらいの個数までが実用的な範囲なのでしょうか?
イベントをとりたいのでマーカーとして貼り付けたいのですが、
個数が多いとパフォーマンスが落ちそうで…

307デフォルトの名無しさん:2008/05/20(火) 09:51:26
>>306
で、君の環境で試したらいくつでパフォーマンスが落ちたんだい?
308デフォルトの名無しさん:2008/05/20(火) 11:06:46
Windowsアプリケーションから
非同期で、サービスプログラムの状態を知りたいんだけど、

1.別スレッドで周期的にサービスプログラムの状態を監視し、表示する。

以外に何かよい方法ありませんか?
309デフォルトの名無しさん:2008/05/20(火) 11:23:04
そのサービスは既存のもの?
310308:2008/05/20(火) 11:54:44
>>309
新しく作成したサービスプログラムなんですが、中身の仕様は変更できません。
311デフォルトの名無しさん:2008/05/20(火) 13:51:11
Panelの上にいくつかのボタン等をおいて、
そのPanelの上に同じようにPanelを重ねていって場面ごとに最前面にしたいんだけど、
Panelの大きさって全く同じじゃないとだめなのね。
大きさが違うとPanelの中のPanelって事になっちゃうみたい。
それとBringToFrontで最前面にするよりVisibleですかそうですか。
312デフォルトの名無しさん:2008/05/20(火) 13:59:09
よく分からんが、それはTabControlで済ませることができない操作なのか?
313デフォルトの名無しさん:2008/05/20(火) 14:03:50
>>310
相手が固定ならそれないりの方法あると思うけど、
それが何かは場合によるから、普通にポーリングでいいんじゃないかな。
サービスへの通知みたいに取れることを期待している?
314デフォルトの名無しさん:2008/05/20(火) 14:28:44
>>311
試してないけど、ツリーで位置を確認して移動すれば解決する事じゃないの?
315314:2008/05/20(火) 14:31:16
>>311
いやわかった。
最前面に置いたPanelが小さいと、下のPanelが見えるって事なのかな
だから最前面以外のVisibleをfalseにしなきゃいけないんだなっていうことを言いたいのかな
だとすればそれは当然。
316デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/21(水) 15:58:37
>>316
それこそ>>314で直るはずだろ
今VS起動できないから具体的になんて名前のウインドウだったか忘れたけど
ツリー表示でPanel2がPanel1の子になってるはずだからD&Dして兄弟にしてやればいい
318デフォルトの名無しさん:2008/05/21(水) 16:45:12
>>317
そんなツリーがあるんだ!?
従属関係を指定できれば解決する簡単な問題だったので疑問でした。
探してみます!
319デフォルトの名無しさん:2008/05/21(水) 16:57:26
ドキュメントアウトライン ビューだ!
320デフォルトの名無しさん:2008/05/21(水) 17:11:00
>>319
今ちょうど検索してて見つからなくて困ってたんだけどありがとう!!!
あった!
321デフォルトの名無しさん:2008/05/21(水) 17:23:16
ただ確認できるだけで従属の変更は出来ないのね。
>>317のように親子を兄弟にすると位置自体も変わってしまう。
まあでも確認できるだけでもかなり便利になりました。
322デフォルトの名無しさん:2008/05/21(水) 18:33:33
コントロールの親子あるいは包含関係なら変更できるけど?

そもそも、間違ってPanel2をPanel1に入れてる時点で自分に非があるのに
あたかも処理系やIDEが悪いかのような論調で書かれも困る

結論としては、デザイン時にコンテナを意識してないお前が悪い
てか、コンテナ意識しないとAnchorやDock使えんだろ
323デフォルトの名無しさん:2008/05/21(水) 19:15:49
↑なに言ってるの?w
324デフォルトの名無しさん:2008/05/21(水) 19:22:47
結論としては(キリッ

って事だろ。
何の役にも立たないレス。
325デフォルトの名無しさん:2008/05/21(水) 22:12:34
>>322の言っている意味が分からないような馬鹿が偉そうに書き込まないほうがいいぞ。
どう考えても
>親子を兄弟にすると位置自体も変わってしまう。
という頭の悪い考えに対する返答だろ。

コントロールの位置座標というのはコンテナに対する相対座標なんだから、
親コンテナが変われば当然Form上における絶対座標は変わるに決まってる。
そんなことも理解できない馬鹿はおとなしくWPFアプリケーションで視覚的に
階層構造を指定できるものを使っておけということ。

フォームデザイナに頼りっぱだからそうなる。
コード上で親コンテナ.Controls.Add()で追加していけば思うような構成にするのは極めて容易い
326デフォルトの名無しさん:2008/05/22(木) 00:40:50
コントロールの親子あるいは包含関係はどうやって変更するんですか?
327デフォルトの名無しさん:2008/05/22(木) 01:03:26
Controls.Addすれば子になるんだろ
Controls.Removeしてから別のコントロールにAddすればいいんじゃないか
328デフォルトの名無しさん:2008/05/22(木) 01:11:25
変更前親コンテナ.Controls.Remove(子);
変更後親コンテナ.Controls.Add(子);

329デフォルトの名無しさん:2008/05/22(木) 01:17:28
とういうことはPanel1に重ねてPanel2を配置して、
Panel2はFormの子にしたい場合はコードからしか設定できないってことでしょうか??
330デフォルトの名無しさん:2008/05/22(木) 01:32:28
タブコントロールで、タブ部分だけ消したほうが早そうな
331デフォルトの名無しさん:2008/05/22(木) 01:33:19
Panel2をFormに追加してから、サイズ変更でPanel1の内側に持ってけ。
332デフォルトの名無しさん:2008/05/22(木) 01:35:01
>>329
というよりも、最初にPanelを同一の親コンテナの中に重ねて配置したいという時点で、
デザイナで作成するのではなく、最初からコード上でNew Panel()して
それをControlsに追加していくようにすべき。
デザイナ上でそれやろうとすると、親切にもDesigner.cs上のコードは
最前面にあるコンテナ内にコントロールを配置しようとしてくれちゃうから希望通りにならない。

ためしにpanel1とpanel2をForm上に重ねるように配置して、
片方のBackColorをBlackにして、Button1のClickイベントで交互にBringToFrontするように
してみたが、問題なく入れ替わったぞ。お前のやりたいことはまさしくこれのことだと思うが。

333デフォルトの名無しさん:2008/05/22(木) 01:35:39
Windowsアプリケーションで、常に一つのフォームしか表示させなくて、色んなフォームにページ展開する時ってどのように実装しますか?
シングルトンで実装するのが普通なんでしょうか?
それとも1度開いたらHide()で見えなくするだけ?
よろしくお願いします。
334332:2008/05/22(木) 01:37:13
>>331
そりゃ盲点だったわ。
ためしにやってみたらそれでも大丈夫っぽいね
335デフォルトの名無しさん:2008/05/22(木) 01:37:38
タブコントロールのAppearanceをFlatButtons、ItemSizeを0,1、SizeModeをFixedにすれば、あら不思議
336デフォルトの名無しさん:2008/05/22(木) 01:43:58
>>330
そんなこと出来るんですかー。

>>331
ドキュメントアウトライン見ながら方向キーで調節したり、
Locateを手打ちしたりして注意しながら配置すれば出来るんですけど、
マウス操作だと親子関係が、ドキュメントアウトラインで親子関係を変えると位置が、それぞれ変わっちゃいますね。
特に後者の挙動は意味不明ですw
せっかくのGUIデザイナなのに感覚的に操作出来ないのは面倒ですね。。
337デフォルトの名無しさん:2008/05/22(木) 01:50:42
>>336
どうしてもデザイナにこだわるならExpressionBlend使ってWPFアプリ作れっての。
あれだとお前のやりたいことが全部感覚的にできるぞ。

あと、

>特に後者の挙動は意味不明ですw
>>325を百回読め。コンテナが変われば位置が変わるってことが理解できない頭なら
プログラミングなんて向いてないからやめておけ。
338デフォルトの名無しさん:2008/05/22(木) 01:51:51
>>332
最前面にあるコンテナの子にしてくれるのは感覚的にも動作的に問題ないけど
ドキュメントアウトラインで親子関係解消すると位置が変わっちゃうのは意味不明だけどね。
他の操作でその位置に出来るのになぜ変わるのかと。

>>335
あら不思議!
ありがとー。
339デフォルトの名無しさん:2008/05/22(木) 01:56:38
>>337
親コンテナが変われば相対座標が変わるって言いたいんだろうけど
それは問題になってないんですぅ。
GUIで親子関係を解消したら新親の座標に変換してくれたほうが直感的です。
しかもマウス操作したら旧親の子になってしまう座標ならなおさらです。
340デフォルトの名無しさん:2008/05/22(木) 12:38:53
>>339
何を言ってるんだか意味不明な気がする。
341337:2008/05/22(木) 13:59:41
>>339
いや、まあもう何も言わんからおとなしくWPFで作ったら?
君の言うGUIデザイナを使って「直感的」に作成できるからさ。
ツールに文句つけるわりには、それを解消したツールがあってもそっちを使おうとしないんだねぇ。
WPFとかXAMLの勉強するのは嫌だけどWPF&XAMLの機能を求めているわけだ。
だだをこねている子供にしか見えん。
342デフォルトの名無しさん:2008/05/22(木) 15:05:59
よく論点が違うって言われない?
343デフォルトの名無しさん:2008/05/22(木) 15:25:58
言われない
344デフォルトの名無しさん:2008/05/22(木) 15:27:59
聞く耳持たねえ
345デフォルトの名無しさん:2008/05/22(木) 15:28:40
WPFが直感的だと!?
346デフォルトの名無しさん:2008/05/22(木) 15:33:20
うん
347デフォルトの名無しさん:2008/05/22(木) 16:05:45
WPFはスレ違いだしもう何も言わなくていいですー
348デフォルトの名無しさん:2008/05/22(木) 18:38:28
337みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^
349デフォルトの名無しさん:2008/05/22(木) 18:41:12
348みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^
350デフォルトの名無しさん:2008/05/22(木) 19:41:28
どうでもいいけど関係ない話するな
351デフォルトの名無しさん:2008/05/23(金) 02:41:06
349みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^
352デフォルトの名無しさん:2008/05/23(金) 02:47:33
351みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^
353デフォルトの名無しさん:2008/05/23(金) 07:08:57
WPFがスレ違いならFormの話もスレ違いだろう
354デフォルトの名無しさん:2008/05/23(金) 07:12:31
Expression高いしVSのWPFエディタはうんこだし
WPFは爆死の臭いしかしない
355デフォルトの名無しさん:2008/05/23(金) 08:49:13
C#でDataGridViewから派生したクラスを使いたいんですけど
Form1.cs[デザイン]を開いて
そこにDataGridViewを張り付けて
そのあとに
Form1.Designer.cs

System.Windows.Forms.DataGridView

MyNameSpace.MyDataGridView
に書き換えるとかそういうことをするんですか?
そんなはず無いと思うので正しいやりかたを教えてください。
356デフォルトの名無しさん:2008/05/23(金) 08:52:30
派生させたクラスがツールボックスに出てるだろう。
357デフォルトの名無しさん:2008/05/23(金) 09:01:20
>>356
出てますね...
ありがとうございます。
358デフォルトの名無しさん:2008/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です。
359KKK:2008/05/23(金) 13:56:15
こんにちは。

はじめましてRayです。
私は大学4年生ですが、最近は大学は週に一回くらいしか行かないのですが、

就活の準備など、家にいることが多くなりました。

しかし、斜め向かいに住んでいる茨城という若い夫婦が嫌がらせをしてきます。

@近所をうろAしたり、家の窓から私の部屋を覗いてきて、部屋に「○○の本がある」などと近所のほかのオバサンに報告したり、

A布団たたきでものすごい音で布団をいつまでもたたきます。
(体格がいいオバサンなので、すごい音がします;;)

B私が家にいるのを知っていて近所のオバサンと大きな声で悪口を言ってきます
(「Rayが就職なんかできるわけないじゃない!」など・・)

C茨城(夫)は部屋を覗くだけでなく、夜になると咳払いなどをしていつまでも近所をうろついています。

気持ち悪いので、弁護士や市の職員に相談しましたが、なかA証拠が取れなく、裁判まで持ち込めない状況です。

D車のエンジンをいつまでもかけ、うるさくする。

とにかく精神的にも滅入っていて、解決したいのですが、できない状況です。

ほかの近所のオバサンも私が困っているのを見て喜んでいるみたいです。

なんとかしたいので、誰か相談にのってくださぃ。

アドバイス待ってます。
360358のつづき:2008/05/23(金) 13:56:37
amespace NAME1 {
 class A {
// メンバ
private x; ← ここで警告が出る
// メソッド
public void func_A( temp ) { x... }; ← ここでx=0として計算してしまう
// アクセッサ
public X { get; set; }
}}
361358のつづき:2008/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デフォルトの名無しさん:2008/05/23(金) 13:58:59
>>360 xの型もXの型もgetアクセサの中身もsetアクセサの中身も書け
363358:2008/05/23(金) 14:16:40
private double x;
public double X { get; set; }
です。アクセッサの表記は、.NETのver2かver3でこのように書けるので、それを利用してます。
364デフォルトの名無しさん:2008/05/23(金) 14:27:19
ヘルプなりで「自動実装するプロパティ」調べれ
どうして X が x を知ってる?
365358:2008/05/23(金) 14:49:06
ヘルプを読んだ結果、
>自動実装したプロパティでは、属性は使用できません。
>プロパティのバッキング フィールドで属性を使用する必要がある場合は、通常のプロパティを作成します
に関連がありそうだとは思うのですが、意味がよくわかりません・・・。
366デフォルトの名無しさん:2008/05/23(金) 14:56:54
X プロパティは x に対応しないよ。

367デフォルトの名無しさん:2008/05/23(金) 14:58:31
それだと、
private double _X;
みたいなのが内部で自動生成されて
public double X {
get { return _X; }
set { _X = value; }
}
368358:2008/05/23(金) 15:03:32
つまり、
class{
 double x;
 double X{get;set;}
}
と書くのは誤りで、
class{
 double x{get;set;}
}
と書けばよいということですか?
369デフォルトの名無しさん:2008/05/23(金) 15:37:57
ファイルの読み書き単位でエンコーディングを指定するのではなく、
プログラム全体でエンコーディングをしているする方法はないですか?
370デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/23(金) 15:59:52
>>369
CreateStreamReaderAsShiftJIS/CreateStreamWriterUTF8メソッドでも用意しとけば?
372デフォルトの名無しさん:2008/05/23(金) 17:04:01
初心者ですが質問させてください。

Webbrowserコンポーネント(Webbrowser1)でgoogleを表示しておいて、
ソフトのTextBox(TextBox1)に検索ワードを入力して、Button(Button1)を押したら、
Webbrowser側に検索ワードが読み込まれて自動で検索するようにしたいんですが、
どのようにすればいいか検討がつきません。

開発環境はVisualstudio2005、言語はC#です。
373デフォルトの名無しさん:2008/05/23(金) 17:07:41
コンポーネントでの表示が必要なの?
httpで通信するってんじゃだめかい?
374デフォルトの名無しさん:2008/05/23(金) 17:10:13
>>372
事前にgoogleを表示しとく意味があるのか?
取り敢えず適当にgoogleで検索して検索結果画面のURL調べれ
あとSystem.Web.HttpUtilityのUrlEncodeとUrlDecode調べれ
375デフォルトの名無しさん:2008/05/23(金) 17:11:44
>>373

webにいろいろと自動入力するシステムを作らないといけなくなりまして。
たとえばブログにあらかじめTextboxに入れておいたIDとパスを入れて自動ログインするとか
そういったものなんですけど、webのフォームに、Textboxから値を入れる方法が知りたくて、
Googleはそのたとえのつもりでした。
http通信?の意味がよくわからないんですが、ソフト内のブラウザ上で表示させる必要はあります。
376デフォルトの名無しさん:2008/05/23(金) 17:13:21
>>374
Googleっていうたとえが悪かったですね。ごめんなさい。
>>375で書いたように、Webサイト上のフォームにソフトのTextBoxで記載したワードを記入するのが目的です。
377デフォルトの名無しさん:2008/05/23(金) 17:27:16
WebRequest を使って WebResponse を取得し、
その内容を反映させては。
378デフォルトの名無しさん:2008/05/23(金) 17:30:01
素直にHTTP POSTしろよ低脳。
こんなの厨房でも出来るぞ
379デフォルトの名無しさん:2008/05/23(金) 17:39:43
>>377
どのメソッドを使えばいいかわからなかったので、ググってみたらできそうです、ありがとうございます。

>>378
HTTP POSTで検索したらそれらしいのがでてきました。ありがとうございます。
380デフォルトの名無しさん:2008/05/23(金) 17:40:12
おい小学生かもしれねえだろうが
381デフォルトの名無しさん:2008/05/23(金) 17:41:46
>>368
おそらくやりたいことは

public double X { get; private set; }

これだけでいいと思われる。

これでXのセッターはprivateになる。
382デフォルトの名無しさん:2008/05/23(金) 17:43:52
>>380
そのとおりです小学校3年生です。
バカな質問してすいませんでした。
383デフォルトの名無しさん:2008/05/23(金) 17:46:22
>>380
小学生に失礼だ
384デフォルトの名無しさん:2008/05/23(金) 17:48:58
>>381
自動プロパティのセッタゲッタの片方だけのプロテクションを帰ることは出来ないよ。
385デフォルトの名無しさん:2008/05/23(金) 17:52:20
>>384
いきなりどうしたの?
俺ができてるからそう書き込んでるんだけど。

386デフォルトの名無しさん:2008/05/23(金) 17:54:35
俺もプロパティはほとんど

public Foo Foo{ get; private set; }

だな
普通のプロパティなんてかったるくて書いてられん
387デフォルトの名無しさん:2008/05/23(金) 17:55:26
>>384
知ったか?
それとも何か他に深い意味があるの?
388358:2008/05/23(金) 18:08:21
うまく書けるようになりました。
ありがとうございました。
389デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/23(金) 18:34:21
便乗だけどオンラインゲームの自動ログインはどうやればいいの?
ttp://dobon.net/vb/dotnet/internet/webrequestpost.html
ここを参考にしたけどだめみたいなんだ。
たとえば
ttp://suddenattack.redbanana.jp/
ここに自動ログインするためにはどうしたらいいのかな?
391デフォルトの名無しさん:2008/05/23(金) 19:21:51
>>389さん、ありがとうございます!
検索してもわからず、困っていたところでした。
("q")と("f")のところにhtmlからそのフォームのnameをもってきたらいいということですか?
やってみます!またできたら報告しますね。
392デフォルトの名無しさん:2008/05/23(金) 19:28:24
Hashtableから値取り出すときにキャストしないでいい方法はない?
面倒くさいんですけどん。
393デフォルトの名無しさん:2008/05/23(金) 19:29:59
VS2005以降ならDictionaryを使う
394デフォルトの名無しさん:2008/05/23(金) 19:31:53
>>393
サンクスです。
こんなのがあったんですね。
395デフォルトの名無しさん:2008/05/23(金) 19:43:16
GenericはC#2.0の最大の目玉じゃないか…
396デフォルトの名無しさん:2008/05/23(金) 20:38:55
>>390
やろうと思えばできる。
IDとパスのINPUTタグのIDを調べ>>389のようにIDとパスを入力し、
こいつらを管轄するフォームでsubmitする。

ヒント:javascriptを実行してからsubmitを行う。
397デフォルトの名無しさん:2008/05/23(金) 20:52:21
windowsアプリなんですが、メインのフォーム内のメソッドで
そのフォームがもってるある型の変数全部の値を一括で変更
する方法はありますか?

おねがいします。
398デフォルトの名無しさん:2008/05/23(金) 20:56:16
リフレクションを使います
399デフォルトの名無しさん:2008/05/23(金) 20:58:34
>>396
javascriptは全然わからないから詰まってます。
submit()を実行すると無限に更新されるみたいなのですが・・・。
htmlソースみるとLoginLeftFormCheck()を呼び出してるみたいなのですが関係ないですかね。
400390:2008/05/23(金) 21:04:58
意味も分からずコピペなんですけど、
public Form1()
{
InitializeComponent();
webBrowser1.Url = new Uri("http://suddenattack.redbanana.jp/index.asp");
}
private void button1_Click(object sender, EventArgs e)
{
HtmlElement id = webBrowser1.Document.All.GetElementsByName("user_id")[0];
HtmlElement pass = webBrowser1.Document.All.GetElementsByName("user_pwd")[0];
id.SetAttribute("Value", "aaaaa");
pass.SetAttribute("Value", "bbbbbb");
}
こんな感じでフォームに文字が入りました。
あとはログインボタン押して、ゲームスタートボタン押すだけなんですが・・・
401デフォルトの名無しさん:2008/05/23(金) 21:05:33
>>396
いやそいつを実行するの。
402デフォルトの名無しさん:2008/05/23(金) 21:06:25
>>400
ログインボタン、エンターキーおしたらいけないの?
403デフォルトの名無しさん:2008/05/23(金) 21:06:26
>>399
JavaScriptもわからないようならC#とか無理だから諦めろ。
なでしこでもやってろ
404デフォルトの名無しさん:2008/05/23(金) 21:06:59
安価ミス
>>396>>399
405390:2008/05/23(金) 21:11:35
>>401
実行するってことはInvokeMember("LoginLeftFormCheck")ってことですかね?

>>402
フォーム上ならエンターキーでもログインできます。
406401:2008/05/23(金) 21:28:18
すまん。VS2005についているWebBrowserは詳しくないんだ。
COMコンポーネントのMicrosoft Web Browserコントロールと、Microsoft.mshtmlというライブラリでしか
俺はできないんだ。(メソッドやら何やらがわかりやすい。)
Microsoft.mshtmlは.NetFramework1.0にしかついてこんのだ。
で、このMicrosoft.mshtmlを使ったやり方で説明すると、
・・・・・
Dim id As mshtml.HTMLInputElement = doc.getElementById("ID_user_pwd")
id.value = "id"
Dim pwd As mshtml.HTMLInputElement = doc.getElementById("ID_user_pwd")
pwd.value = "password"
doc.parentWindow.execScript("LoginLeftFormCheck()") ' LoginLeftFormCheck()を実行
pwd.form.submit() ' フォームをsubmit(これはInvokeMemberでできるとおもわれ)

これでログインできる。
ゲームのスタートボタンはFlashであるために、プログラム上で操作する方法があるかもしれないが、
俺は残念ながらわからんかった。
まえ、ガンストの自動ログインツールを作成したときは、画面にブラウザを貼り付けて、
ゲームのスタートボタンが確実に見えるサイズに広げて、APIでマウスを操作するプログラムを書くという
逃げ道でやった。
407デフォルトの名無しさん:2008/05/23(金) 21:52:19
Windowsアプリケーション学習用にC#をやろうと思っています。
Microsoft Visual C# 2008 Express EditionをSDKとSQL Serverつきでインストールしました。
しかし何をどう作っていったらいいかわかりません。
プログラム経験はPHPでWebプログラム(こちらは趣味で3年以上やっていて2ch風掲示板ぐらいのものは作れます)、
あとオブジェクト指向の勉強にJavaを少しいじった程度です。
Javaでは簡単なファイル操作から、オブジェクトの継承や例外処理など基本的な勉強しかしていません。
Webプログラムはイメージ的にわかるので、ASP.NETあたりはなんとか理解できると思うのですが、
Windowsアプリケーションとなると右も左もわかりません。
まずは何をやったらいいのでしょうか?
408デフォルトの名無しさん:2008/05/23(金) 21:54:25
何をやりたいの?
409デフォルトの名無しさん:2008/05/23(金) 21:55:56
410407:2008/05/23(金) 22:04:58
>>408
とりあえずWebアプリケーションでいうチャットやカウンターのような位置づけなものを作ってみたいです。
(ようするに簡単なものです)
おそらくメモ帳のようなものになるのでしょうか?
ペイントのようなものも作ってみたいですが、メモ帳に比べると難易度はあがりそうですね。
簡単なテーブルゲームなんかも作ってみたいですが、アルゴリズムの勉強はしてないので少し厳しそうです。

>>409
了解です。そちらで質問しなおします。
411390:2008/05/23(金) 22:15:45
>>406
どうもありがとうございます。
webBrowser1.Url = new Uri("javascript:" + Uri.EscapeDataString("LoginLeftFormCheck();"));
で無理やり実行してみたらfalseが返ってきちゃいました。
マウス操作も考えたんですけど、ブラウザやマウスが勝手に動く様が見えちゃいますよね。。
412397:2008/05/23(金) 22:32:25
すいません。リフレクションを使っても取り出せるのは
型情報でインタンスの値は取り出せないのではないでしょうか?

もう少しキーワード教えてください。
413デフォルトの名無しさん:2008/05/23(金) 22:43:15
型情報からフィールド一覧取れるだろ
FieldInfoから値取得できる
414401:2008/05/23(金) 22:51:20
>>406
いや、LoginLeftFormCheckは単に実行するだけでOK。
submitすりゃ、ログインされる。
javascriptは多分InvokeScriptでできない?

マウスは勝手に動くようにみえちゃう。これは仕方ない。
415デフォルトの名無しさん:2008/05/23(金) 23:23:57
416デフォルトの名無しさん:2008/05/23(金) 23:34:10
ここはなにを話すスレ?
417デフォルトの名無しさん:2008/05/23(金) 23:36:31
C#プログラマの雑談スレ
418デフォルトの名無しさん:2008/05/23(金) 23:44:16
>>1
>(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

C#プログラマの雑談スレなんて限定的には書いてないけど?
しかもスレタイは「相談室」だぞ
419397:2008/05/23(金) 23:44:32
FieldInfoのGetValue,SetValueでできました。
ありがとうございます。
420デフォルトの名無しさん:2008/05/23(金) 23:55:28
JRq8rZjk7c

鳥解析4649
421デフォルトの名無しさん:2008/05/24(土) 00:04:49
私怨乙
422390:2008/05/24(土) 01:09:12
>>414
ありがとうございました。
ゲームスタートのFlashもjavascriptを呼んでいましたので直接呼んだら開始できました!
423デフォルトの名無しさん:2008/05/24(土) 01:53:52
>>416
C#、.NET(ただし、C#を使っている前提)に関することで、
主にふらっとだとアレな話題や雑談とかのスレ
と、俺は解釈してる

ここで質問すること自体は悪いとは思わないが、
ふらっとの方がより適切だとも思ってる
424デフォルトの名無しさん:2008/05/24(土) 04:07:26
ふらっとは初心者用だから。
回答者も初心者スレにいなかったら結局このスレに質問しに来るのでは?
たらい回しはいかんよ。
425デフォルトの名無しさん:2008/05/24(土) 04:09:08
俺はふらっとが初心者用でこっちが中級者の集まりだと思っていた。
こっちでの質問はOOPとか言語仕様なりの高度な質問になる感じ
426デフォルトの名無しさん:2008/05/24(土) 04:11:33
>>425
元の趣旨はそうだが実情は逆
427デフォルトの名無しさん:2008/05/24(土) 04:44:53
そんなの主観的なんだからどっちだっていいだろ。
質問者が初心者と自覚した場合ふらっとに行けばいいと思うよ。
ただそれだけ。
428デフォルトの名無しさん:2008/05/24(土) 04:57:34
複数あるのは害でしかない
みんなわかってるはずだ
429デフォルトの名無しさん:2008/05/24(土) 05:05:02
>>424
心配無用。
どうせ皆も両方見てるんでしょ。
430デフォルトの名無しさん:2008/05/24(土) 05:42:36
どっちか削るとしたら明らかに初心者用だよな。
で、もし削ったとしたら初心者隔離スレも欲しくなるよな。
ここまで言えばわかるよな。
431デフォルトの名無しさん:2008/05/24(土) 10:55:50
ぬるぽ
432デフォルトの名無しさん:2008/05/24(土) 12:40:47
>そんなの主観的なんだからどっちだっていいだろ。
>質問者が初心者と自覚した場合ふらっとに行けばいいと思うよ。

えてしてその主観が間違ってるから問題になるんだが。
433デフォルトの名無しさん:2008/05/24(土) 15:28:08
オレが全部答えてやんよ
だからもう喧嘩するな
434デフォルトの名無しさん:2008/05/24(土) 17:44:12
整数5ずつにしたいのですが……うまく言えないのですが、例えば、
96なら95、98なら100、53なら55、42なら40
と言うふうにしたいのですが、どうすればいいでしょうか?
435デフォルトの名無しさん:2008/05/24(土) 17:46:22
C#で自作した外部アプリケーションを呼び出したいのですが、
Process process = new Process() ;
process.StartInfo.FileName = "hoge.exe" ;
process.Start() ;
こんな風に実行することが出来るようなのですが、
外部アプリケーション側に文字列を複数与えたいのです。
その場合呼び出す側と呼び出される側はどのような準備をすればいいのでしょうか?
436デフォルトの名無しさん:2008/05/24(土) 17:49:25
>>434
問題を定義しなおしてから来い。
>>435
Process.Start(hoge.exe,"arbitrary string");
437デフォルトの名無しさん:2008/05/24(土) 17:52:06
俺は>>434の言いたい事がわかったが次にどう書いてくるか楽しみなので伏せておく。
438デフォルトの名無しさん:2008/05/24(土) 17:53:32
>>434
int number;

number = 適当な数値;

if (number % 10 < 4) number = number - (number % 10);
else number = number + 10 - (number % 10);

適当に今思いついたがこんなんで良いか?
439デフォルトの名無しさん:2008/05/24(土) 17:58:08
あ、5ずつか普通に四捨五入してるわこれ
440435:2008/05/24(土) 18:00:09
>>436
文字列を複数渡したいのですが
Process.Startの第二引数はstring[]でもいいのですか?

それと受け取る側はどうすればいいのでしょう?
441デフォルトの名無しさん:2008/05/24(土) 18:01:03
>>438
ありがとうございます。
さっそく導入してみたのですが、これだとただの10ずつになってしまうのですが……。

っと書いていたら439の返事がきました。
ありがとうございます。
こういうのも四捨五入というのですか……。
勉強になりました。
442デフォルトの名無しさん:2008/05/24(土) 18:02:00
>>440
無理。記号を決めてそれを受け取る側で改行と見なすくらいしかない
443デフォルトの名無しさん:2008/05/24(土) 18:02:40
>>438の使って
if (number % 10 < 5) number = number - (number % 10)+5;
else number = number + 10 - (number % 10);
でいいんじゃね?
444デフォルトの名無しさん:2008/05/24(土) 18:02:43
あ、ちょっといじったらできました。
もうちょっとテストして、また報告させていただきます。
本当にありがとうございました。
445デフォルトの名無しさん:2008/05/24(土) 18:04:33
連投失礼します。
>>443
ありがとうございます。
それでいけそうです。
これまたもう少しテストしてきます。
446デフォルトの名無しさん:2008/05/24(土) 18:06:56
こうでしょ。
int mod = x % 5;
x += mod > 2 ? 5 - mod : -mod;
447デフォルトの名無しさん:2008/05/24(土) 18:08:21
>>442
string一つだけなのですか。

受け取る側はどうすればいいですか?
受け取る側はコンソールではなくフォームアプリケーションです。
448デフォルトの名無しさん:2008/05/24(土) 18:17:35
>>447
スペース区切りとかで渡して、
splitで分割するなりすればいいんじゃね?
449デフォルトの名無しさん:2008/05/24(土) 18:19:37
>>446
ありがとうございます。
>>443さんの方法だと、きりのいい数字だとちょっとおかしくなるようでした。
446さんの方法は私程度にはどういう処理をしているのかさっぱりなのですが、
問題なく使えます。

みなさん本当にありがとうございました。
450435:2008/05/24(土) 18:30:42
Environment.CommandLineで受け取るか、
コンソールと変わらずにエントリポイントから受け取ればいいんですね。
451デフォルトの名無しさん:2008/05/24(土) 18:40:20
>>431
AutoNullpoOudaki gattu = new AutoNullpoOudaki();
gattu.Execute();
452デフォルトの名無しさん:2008/05/24(土) 19:11:50
文字列から動的にExpressionTreeやFuncを得ることって出きるん?
ttp://ufcpp.net/study/csharp/sp3_expressionsample.html
ここで書いてあるような子としてみたかったんだが、CodeDom.GetExpressionFromとか見あたらず、いろいろググってもそれらしいのにたどり着けず・・・
CodeDomでFuncを返すメソッドを持つクラスをコンパイルして実行して呼び出せば出来無くないんだけれどもう少しまともな方法で・・・
453デフォルトの名無しさん:2008/05/24(土) 19:31:07
>>452
そのページにある「ソース一式」のところからソース落して、
中身の「MyMath\CodeDom.cs」の中にその GetExpressionFrom の実体がある。
454デフォルトの名無しさん:2008/05/24(土) 19:32:55
ちなみに、そのソースの GetExpressionFrom はまさに、その
「CodeDomでFuncを返すメソッドを持つクラスをコンパイルして実行して呼び出せば」
をやってるだけ。

もう少しまともな方法、確かに欲しいよね。
455デフォルトの名無しさん:2008/05/24(土) 19:47:03
>>453
さんくすこ。
てっきり.NET3.5以降で追加されたのかと思ってた・・・orz

CocoaのようなKVCとかやるためにリフレクションからコード生成→lambdaにしてそれなりに高速にアクセスみたいなことしたかったんだが・・・
場合によって、無理やりコンパイルでlambda変換するようにしようかな・・・
あぁ書いてて思ったが、式ツリー手動でいじくればいいのか。よくわからんがやってみるノシ
456デフォルトの名無しさん:2008/05/24(土) 20:04:19
Compact Frameworkでやっててもこっちで大丈夫ですか?
もし適切なところが他にありましたら誘導お願いします(´・ω・`)

ボタン押したらwavファイルをプログラムに埋め込んで、ボタン押されたらそれを再生させたいんですが、上手く再生されません。
hi.wavが再生させたいファイルです。

private void button1_Click(object sender, EventArgs e)
{
   System.Reflection.Assembly a = System.Reflection.Assembly.GetExecutingAssembly();
   string file = a.GetName().Name + ".hi.wav";
   System.IO.Stream s = a.GetManifestResourceStream(file);
   SoundPlayer player = new SoundPlayer(s);
   player.Play();
}

サンプルを見ながらこのようなソースを組んで、
プロジェクトのプロパティのリソースのところにhi.wavを追加して、
Persistenceを「.resxに埋め込まれました」に設定しました。
しかし、動かしてみると標準のビープ音しかなりません。
デバッガで見ると、sがnullのままのようで、ファイルを読み込んでいないようです。
埋め込み方が間違ってるんでしょうか・・・。
よろしくお願いします(´・ω・`)
457デフォルトの名無しさん:2008/05/24(土) 20:26:10
>>456

SoundPlayer player = new SoundPlayer("path");
player.PlaySync();

458デフォルトの名無しさん:2008/05/24(土) 20:37:51
メッセージとしてスウェーデン語文字を表示させたいのですが、
なぜか読み込んでくれずにエラーが起きてしまいます
どうしたらよいのでしょうか
459456:2008/05/24(土) 20:42:51
>>457
ありがとうございます。実際にwavファイル置いてパス指定して音を鳴らすことは問題なくできるんですが、
埋め込めたら良いなぁ・・・ってことなんです。
もしかして、埋め込みは無理ってことですか?
460デフォルトの名無しさん:2008/05/24(土) 20:42:50
>>452
これがクエリ式のパーサ持ってたと思う。使い回せるかも。
ttp://www.codeplex.com/nlinq

使い方は"poorman's linq"でぐぐる。
461デフォルトの名無しさん:2008/05/24(土) 20:45:46
>>458
取りあえずエラーとやらに付随してるメッセージを読み上げるといいよ
462デフォルトの名無しさん:2008/05/24(土) 20:46:10
>>458
OSにスウェーデン語パックを導入しる
463デフォルトの名無しさん:2008/05/24(土) 20:48:49
>>462
今からググってきます。ありがとうございました
464デフォルトの名無しさん:2008/05/24(土) 22:09:12
レベルの低い質問で申し訳ありません。
出力の種類を「クラスライブラリ」としてあるプロジェクトを、スタートアッププロジェクトに設定した他のプロジェクトに参照させるにはどうすればよいのでしょうか。
そのままusingしようとしても「名前空間がない」と言われてしまいます。
465デフォルトの名無しさん:2008/05/24(土) 22:12:54
>>464
ソリューションエクスプローラで参照したいプロジェクトを右クリックして
参照の追加 → プロジェクト
466デフォルトの名無しさん:2008/05/24(土) 22:16:17
>>434
今更だけど、要は「5の倍数への丸め」、もしくは「丸め幅5での丸め」でしょ?
個人的には汎用的なこれを使いたいところ

var y = (int)Math.Round((decimal)x / n) * n;

まあ、整数型に限定してもこんなところじゃないか

var y = (x + (n / 2)) / n * n;

因みに、後者はaway from zeroだが、前者はRound()のmode指定で選択可
対象が整数値で、かつ丸め幅が奇数ならどちらでも同じ
467デフォルトの名無しさん:2008/05/24(土) 22:37:56
>>465
ありがとうございます。
468デフォルトの名無しさん:2008/05/24(土) 22:54:56
>>456
もしかしたら、Compact Frameworkじゃ違うかもしれないけど
多分、その方法はファイルをresxに埋め込まない古いやり方。

wavファイルをプロジェクトに追加して
ビルドアクションを「埋め込まれたリソース」にすれば、
その方法で鳴る筈。

んで、2005以降は、リソースエディタを使ってresxに埋め込んで、
"HI"がリソース名になったとしたら、

System.IO.Stream s = Properties.Resources.HI;
SoundPlayer player = new SoundPlayer(s);
player.Play();

で一応鳴る。

でも、ストリームのWAVEデーターの再生は、
GC絡みで問題があるらしい。
詳しくはこれを。

ttp://dobon.net/vb/dotnet/programing/playembeddedwave.html
469デフォルトの名無しさん:2008/05/24(土) 23:05:15
ブロック崩しを作ったのですが、ボールが宙に浮いているときにスペースキーを押すと、
ボールが画面外に飛び出してしまうのです。どうにかなりませんか?
ちなみにソースはこれ

http://www.borujoa.org/upload/source/upload18960.txt
470デフォルトの名無しさん:2008/05/24(土) 23:24:40
ソースを解析したうえでデバッグしてくれと。
471デフォルトの名無しさん:2008/05/24(土) 23:27:03
>>469
ソース見て吹いたw
472デフォルトの名無しさん:2008/05/24(土) 23:31:36
>>469
こういうifの書き方好きなの?
473デフォルトの名無しさん:2008/05/24(土) 23:31:59
ってそもそもスレ違いじゃん
474デフォルトの名無しさん:2008/05/24(土) 23:32:51
何でもう消えてるんだよ。ちょっと見てみたかった
475デフォルトの名無しさん:2008/05/24(土) 23:56:20
キャッシュ漁ったら見つけた
476デフォルトの名無しさん:2008/05/24(土) 23:59:51
型に格納できる値の最大値、最小値を返す関数はありますか?
例えば、unsigned intなら0か4294967295を返せる、といったような。
変数の型の範囲を超えるような値が格納されそうになった場合、エラーを出すような関数を作ろうと思っているので。
477デフォルトの名無しさん:2008/05/25(日) 00:03:33
MaxValue/MinValueじゃ足りんのか?
478デフォルトの名無しさん:2008/05/25(日) 00:19:23
そんなの、泣けりゃじぶんで定義して返せよ
479デフォルトの名無しさん:2008/05/25(日) 00:24:16
LL言語のWWW::Mechanize的なのを探してます。
C#や.NET Framework向けのwebスクレイピングライブラリはないですか?
検索してたのですが、なかなか見つからないや・・・
480デフォルトの名無しさん:2008/05/25(日) 00:24:27
スレ違い
481デフォルトの名無しさん:2008/05/25(日) 00:24:56
>>478
いやいや、476はMaxValue/MinValueを知った上でそういう関数が欲しいんじゃなくて、
ただ単に MaxValue/MinValueの存在を知らないだけじゃないかと。
482デフォルトの名無しさん:2008/05/25(日) 00:27:41
関数はまあ見逃すとしてもunsigned intなんて言ってる時点でスレ違いである事に気付こうな
483デフォルトの名無しさん:2008/05/25(日) 00:28:51
>>479
MS は文法のゆるい HTML を機械処理するのはあまり好きじゃないみたい。

HTML2XHTML みたいなものを通して文法の正しい XML にした上で、
XmlReader やら LINQ to XML でアクセスするのがいいかと。
↓でそういうことやってるんだけど、
http://d.hatena.ne.jp/uesama99/20080219/1203394007
HTML2XHTML が微妙臭い。
484デフォルトの名無しさん:2008/05/25(日) 00:29:53
>>482
しっかり読んでなかったw

それはちゃんと、「C# は C/C++ とは違いますよ」誘導してやろうよ。
485デフォルトの名無しさん:2008/05/25(日) 00:52:32
>>477
ありがとうございます。
>>481
その通りです。低レベルすぎてすみません。
>>482
C#ではUInt32って書くんですね。ありがとうございます、勉強になりました。
486デフォルトの名無しさん:2008/05/25(日) 01:45:22
>>483
クッキーとか面倒なところを良きにはからってくれるのはないっぽいですね。

LLと組み合わせるしかないか・・・
GUI楽したいので.NET使いたかったけど、うまくいくかなあ

とりあえうずありがとう。
いろいろ試してみます
487デフォルトの名無しさん:2008/05/25(日) 07:57:54
2005のPropertyGridについて質問
プロパティタブをいくつか追加したりしてるんだが
ボタンに使われる画像の色が PropertyTab.Bitmap で retuen した Format32bppArgb の画像と微妙に違う
見た感じは大体同じなんだが、実際のRGBを調べるとほんの少しずれてたりする
何か色数の制限があるのなら、それに合わせた画像にするんだけど分かる人いる?
488456:2008/05/25(日) 08:59:21
>>468
ありがとうございます。
ビルドアクションを「埋め込まれたリソース」には一応変更していたんですが、鳴りませんでした。
・・・とおもったら、hi.wavが(.resxに埋め込む操作したとき)Resourceフォルダの中に入ったままビルドアクションを変更していたので、
常識的に考えて鳴りませんね。プロジェクトのディレクトリ直下に移して無事鳴りました。

あと、
System.IO.Stream s = Properties.Resources.HI;
SoundPlayer player = new SoundPlayer(s);
player.Play();
も、そのサイトを見つけたときにやってみたんですが、
CompactだとProperties.Resources.hiがstreamじゃなくてbyte[]を返してくるんで使えませんでした。
・・・って思ってたんですが、
byte[] hibyte = Properties.Resources.hi;
MemoryStream s = new MemoryStream(hibyte);
player.PlaySync();
すればすむ話ですねo. . ...rz

昨日の数時間は何だったんだ・・・
1日置くと急に分かったりするもんですね(´・ω・`)
本当にありがとうございました。




489456:2008/05/25(日) 09:03:19
byte[] hibyte = Properties.Resources.hi;
MemoryStream s = new MemoryStream(hibyte);
SoundPlayer player = new SoundPlayer(s);
player.PlaySync();

の誤りです。すいません。

あと、>>456ではPlay()使ってますが、
特に非同期再生が必要なわけではないので、GC絡みのを回避するためにもPlaySync()を使おうと思います。
490デフォルトの名無しさん:2008/05/25(日) 11:27:09
質問です
ネットの初心者向けサイトを見ながらC#をやっていたんですがそろそろきつくなってきました
とくにデリゲートをイベントハンドラとして実装するところと、イテレータがよくわかりません
初心者から中級者にレベルアップするために買うべき本を教えてください
491デフォルトの名無しさん:2008/05/25(日) 14:11:02
C#用のDXライブラリと言うものがあったので早速使ってみたのですが、エラーが出ました。

空のプロジェクトに参照をDLLを追加し、Class.csファイルを作り、メインメソッドに
DxLibrary.DxLib_Init();
と書いただけなのですが、
DLL 'DxLibDll.dll' を読み込めません: 指定されたモジュールが見つかりません。 (HRESULT からの例外: 0x8007007E)
と出てしまいます。

DLLはあらゆる場所に配置して試したのですが、
やはり同じようにエラーがでます。
何か特別な書き方が必要なのでしょうか?
492デフォルトの名無しさん:2008/05/25(日) 14:17:45
DXライブラリの公式サイトで提供されてる方のC#用DXライブラリを使え
使い方も丁寧に書かれてる
493デフォルトの名無しさん:2008/05/25(日) 14:19:29
>>492
ありがとうございます。

いつのまにか出てたのですか!?
なぜエラーが出たのかは未だ不明ですが、早速使ってみたいと思います。
494デフォルトの名無しさん:2008/05/26(月) 15:17:26
質問です。
2つのスレッドでそれぞれフォームを作成し表示します。
このとき、これらフォームの表示順位(重なり)を
コントロールすることは可能でしょうか?

なんか、デバッカ上とSetup後のプログラムで表示順がことなって
メッセージボックスが隠れたりする・・
495デフォルトの名無しさん:2008/05/26(月) 17:06:52
構造体の中で1次元配列メンバを持つには
struct A{
public fixed double b[123];
};
でいけますが、
構造体の中で2次元配列メンバを持たせるために
struct A{
public fixed double b[123][234];
};
などとやってもエラーになります。
構造体の中で2次元配列メンバを持たせることは可能でしょうか?
496デフォルトの名無しさん:2008/05/26(月) 17:10:31
494です。自己レスします。
とりあえず以下HPを参考にし、隠れていたダイアログが表示されるようになりました。(暫定対応ですが・・)
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34347&forum=7&start=0
端的に言うと、複数のアプリをダブルクリックしたときと同じで、
後から立ち上げた方が優先されて表示される。のと同じみたいです。

お騒がせしました。
497デフォルトの名無しさん:2008/05/26(月) 17:17:20
>>495
fixedである以上は無理
498デフォルトの名無しさん:2008/05/26(月) 18:17:56
質問です。
クラスの配列をインスタンス化するのにforを使って次のようにやってるんですが、
もしもっとスタンダードな方法があったら教えてください。
for文の中でインスタンス化すると、スコープから出ると消えちゃうような感覚がして気持ち悪いんです。

classA{}

A[] a = new A[n]
for(int i = 0; i < n; i++){
a[i] = new A();
}
499デフォルトの名無しさん:2008/05/26(月) 18:20:50
狂っているその感覚を修正する事をお勧めします。
500デフォルトの名無しさん:2008/05/26(月) 18:21:08
それで十分スタンダード

> for文の中でインスタンス化すると、スコープから出ると消えちゃうような感覚がして気持ち悪いんです。
この感覚を何とかしたほうがいい
501デフォルトの名無しさん:2008/05/26(月) 18:23:51
もしかして
A[] a = new A[n] ← classA型の変数を宣言
a[i] = new A(); ← 実際に代入
つまり、for文の中では代入行為しかやってないから消えない、ということですか?
502デフォルトの名無しさん:2008/05/26(月) 18:29:29
GCのアルゴリズムを理解した方がいいよ。

GCってのは「参照できる限りは消えない」

例えばnが1なら、forを抜けても a[0]を参照できるでしょ?
で、参照できるので消えない。
503デフォルトの名無しさん:2008/05/26(月) 18:34:42
了解しました。勉強します。
504デフォルトの名無しさん:2008/05/26(月) 19:18:27
というかスコープを勉強したほうがいいだろ
505デフォルトの名無しさん:2008/05/26(月) 19:20:45
スコープは割と正しく理解出来てるような発言に見えるけど?
506デフォルトの名無しさん:2008/05/26(月) 19:30:39
GCとは全く関係ないだろ。
スコープの話をしてると思うんだが。
507デフォルトの名無しさん:2008/05/26(月) 20:26:57
コンストラクタでフィールドにインスタンスを代入したら不自然か
508デフォルトの名無しさん:2008/05/26(月) 23:14:09
なんでGCが出てきたんだw
509デフォルトの名無しさん:2008/05/26(月) 23:16:05
↑遅れてきたアホ
510デフォルトの名無しさん:2008/05/26(月) 23:36:55
確かにマオは四川省だったから ヤバスwww
511デフォルトの名無しさん:2008/05/26(月) 23:37:37
スマソ、誤爆った
512デフォルトの名無しさん:2008/05/26(月) 23:41:06
newしたものはアクセスできるなら消えない
513デフォルトの名無しさん:2008/05/27(火) 00:18:08
>>505
できてないできてない。
514デフォルトの名無しさん:2008/05/27(火) 00:46:13
.NETのGCはスコープより早く働くことがあるから要注意なんだよね。たとえば
static void Main() {
 Hoge hoge = new Hoge();
  hoge.Foo();    // hogeが参照されるのはここが最後
  // 時間のかかる処理
}
hogeがまだスコープ内にあるにもかかわらず、時間のかかる処理の最中にGCされることがある。
515デフォルトの名無しさん:2008/05/27(火) 00:50:36
↑あほ?wwwwww
516デフォルトの名無しさん:2008/05/27(火) 00:53:20
そんなものに注意は不要
517デフォルトの名無しさん:2008/05/27(火) 01:00:18
ttp://dobon.net/vb/dotnet/process/checkprevinstance.html
ここの真ん中くらいの「補足:ニュースグループ・・・」あたりにその例が出てる。
KeepALiveを使ってる箇所。
518デフォルトの名無しさん:2008/05/27(火) 01:14:44
これもスコープ終了以前にGCされて落ちる例だね。

「ふらっとC#,C♯,C#(初心者用) Part22」
ttp://pc11.2ch.net/test/read.cgi/tech/1197802312/850-877

>876 名前: 875 [sage] 投稿日: 2008/01/08(火) 00:46:17
>>850
>あーもしかしてと思ってと思って>>875のコードから
>GC.KeepAlive(func); 抜いたら確かにAccessViolationExceptionおきるね。
>言ってるのはこれのことじゃろか。

>P/Invokeにデリゲートを渡す場合、そのデリゲートの寿命管理は.NET側の責任。
>実は元のるびま記事にも書いてある。
ttp://jp.rubyist.net/magazine/?0021-RubyWithCSharp#fm05
519498:2008/05/27(火) 01:56:25
もしかして>>501の理解も間違いだらけなんでしょうか?
もう少し詳しく教えていただけませんか。
520デフォルトの名無しさん:2008/05/27(火) 02:21:58
>>498はGCと関係ないよ。
厳密には関係なくないとしてあえて言うと、
new A[n]したオブジェクトはA[] aの寿命(参照が外れるまで)生きてる。
521デフォルトの名無しさん:2008/05/27(火) 05:51:20
初歩的なことだとうじゃうじゃ煽りレスがついたりするのに
ちょっと難しい質問だとなかったかのようにスルーするお前らワロスw
522デフォルトの名無しさん:2008/05/27(火) 08:25:46
>>521
最近はROM主体だが、お前の発言が一番醜く見える。
そんなに無視されたのがくやしいのか? ちなみにどの質問なのか示してみ。
523デフォルトの名無しさん:2008/05/27(火) 08:56:45
どこが難しいの?直前のネタはフラットでもスルーだろ・・・C#関係ないし
524デフォルトの名無しさん:2008/05/27(火) 09:04:01
>>518
それはスコープが終了するとGCされるから、プログラマの責任でスコープを終了させんな、って話だ。
525デフォルトの名無しさん:2008/05/27(火) 09:12:10
>>522
わざわざROM主体とか前置きしないとレスできないのかよw
526デフォルトの名無しさん:2008/05/27(火) 09:14:26
ROM主体と言うのを何か言い訳に使ってるなら
>>525のレスは理解出来るが、別に言い訳に使ってないじゃん
まあ、無駄な前置きではあるけど
527デフォルトの名無しさん:2008/05/27(火) 09:40:12
>>526
まあ、第三者を装ってるあたりはみっともないな
528デフォルトの名無しさん:2008/05/27(火) 10:23:17
>>524
それはるびまの記事の話だろう。
あのスレの>>875はこんなコード。GC.KeepAliveを抜いたらクラッシュする。

static void Main(string[] args)
{
VALUE state = 0;
Ruby.ruby_init();
const string funcdef =
"def foo\n" +
"s=\"FOO\"+nil\n"+
"end";
Ruby.rb_eval_string_protect(funcdef, ref state);
VALUE hoge = Ruby.rb_intern("hoge");
Ruby.CallbackArg0 func = arg => Ruby.rb_funcall(Ruby.Qnil, hoge, 0, 0);
VALUE result = Ruby.rb_protect(func, Ruby.Qnil, ref state);
GC.KeepAlive(func);
}
529デフォルトの名無しさん:2008/05/27(火) 13:20:13
アンマネージな世界に渡したデリゲートを安全に保持しとくには
アンマネージ側で不要になるまでGC対象にならないようにしとかなきゃならない。

てだけの話?
530デフォルトの名無しさん:2008/05/27(火) 13:41:36
>>529
そういうこと。
他にも、インライン展開されたコンストラクタが完了する前にファイナライザが実行されることすらあるよ。
この場合もアンマネージな世界のハンドルの早すぎる解放であぼんする場合がある。
531デフォルトの名無しさん:2008/05/27(火) 13:44:19
>>529
9割9分そういう理解でOK。>>514もアンマネージなmutexやロックのためのファイルを
開いたままにする場合などに影響が出る。
アンマネージが関係しないケースはまれなのだが、なぜかそのレアケースが、
MSDNに載ってたりする。サンプルソースは2種類あるが最初のほう。
http://msdn.microsoft.com/ja-jp/library/system.gc.keepalive(VS.80).aspx
532デフォルトの名無しさん:2008/05/27(火) 14:44:45
非同期ゲリゲートの動きを止めたいときはどうすればいいですか?
533デフォルトの名無しさん:2008/05/27(火) 15:07:42
>>532
フラグやEventを使ってスレッド自身にそうさせるのが基本。
534デフォルトの名無しさん:2008/05/27(火) 16:06:12
関係ない話題を知ったかでひけらかすより質問に的確に答えてあげたら?
535デフォルトの名無しさん:2008/05/27(火) 16:10:55
いったい何の話だ?
536デフォルトの名無しさん:2008/05/27(火) 16:12:20
すっげーすぐにレス来たww
お前が関係ない話してレスが流れたんだろ。
自分で見返せ。
537535:2008/05/27(火) 16:19:20
>>536
えーと、俺はこのスレには初めて書いたものだが
流れがわからんからアンカーつけてくれないか?
どの質問の話かわからないから、答えようが無いわ。
538デフォルトの名無しさん:2008/05/27(火) 16:22:12
>>531
そこのサンプル例1の解説が不正確で、プロパティの取得処理が
時間のかかる処理のためデストラクタが先に動いてしまうと読めるがそれは誤り。
もしそうであれば.NETのGCなんて安心して使えない。
それはデストラクタの使い方に重大な欠陥があるために発生する。
具体的にはExampleクラスのデストラクタで他のクラス、
この場合hashValueが参照を持つArrayクラスの後処理を書いたらいかんということ。
マネージドだけの場合は基本的にKeepAliveのことは考えなくてよい。
539デフォルトの名無しさん:2008/05/27(火) 16:57:12
デストラクタが呼ばれるときには、既にメンバは解放された後なんだっけ?
540デフォルトの名無しさん:2008/05/27(火) 17:11:04
微妙に違う。
ファイナライズメソッドの実行順序には何の保証もないという話。

だと思うけどリンク先見てないから確かなことは分からん。
541デフォルトの名無しさん:2008/05/27(火) 17:11:27
>>539
メンバに参照型を持つ場合でも、オブジェクトとして独立してるので
デストラクタが動くタイミングやメモリが回収されるタイミングは不順。
順番が必要な場合はDispose(true)のパターンを使う。
542デフォルトの名無しさん:2008/05/27(火) 17:13:17
あいや、ずっと前に読んだことあるはずでかすかな記憶によると
解放された後っていうか自分で解放してんじねーかよw
って話だったかも…
543デフォルトの名無しさん:2008/05/27(火) 17:48:04
>>537
半年ROMれ。
544デフォルトの名無しさん:2008/05/27(火) 18:08:24
>>543
それはない
545デフォルトの名無しさん:2008/05/27(火) 19:47:37
一匹キティが沸いてんな・・・フラットじゃないのに
546デフォルトの名無しさん:2008/05/27(火) 21:16:53
フラット!フラット!!
547デフォルトの名無しさん:2008/05/28(水) 00:24:52
質問です。

フォームを2つ使うアプリを作っています。
メニューはメイン側にはありますが、サブ側は何もありません。

で、サブ側にフォーカスがある時に、メイン側のメニューのショートカットを叩いても、
フォーカスがサブ側にあるため、イベントが発動してくれません。
出来ればこのショートカットを共有したいと思っています。

サブ側でもOnKeyDownなんかで同じ関数を呼ぶようにすれば可能といえば可能ですけれど、
あまりにも美しくないなと思ってます。何か上手い方法は無いでしょうか?
548デフォルトの名無しさん:2008/05/28(水) 00:38:50
ほかのウィンドウのイベントが別のウィンドウのショートカットをたたくというのは美しくないだろ。
ルートのフォームまでで処理されなかったイベントがアプリケーションのハンドルで処理されるというのが正しい形だと思う。
549デフォルトの名無しさん:2008/05/28(水) 00:47:27
サブフォームでメインのOnKeyDown呼べばいいじゃん
550デフォルトの名無しさん:2008/05/28(水) 00:50:05
返信ありがとうございます。

>>548
そもそもメインのフォームでイベントを処理している、ってのがおかしいってことですかね?
メインにしろサブにしろ、フォームはイベントを発行するだけで、
その実際の処理はアプリケーション級のオブジェクトがハンドルするわけですか。
551デフォルトの名無しさん:2008/05/28(水) 07:35:33
MDIにしる
552デフォルトの名無しさん:2008/05/28(水) 11:10:54
2重起動を防いで、後から起動された方に渡されたコマンドライン引数を
最初に起動された方に渡したいです。
ttp://dobon.net/vb/dotnet/process/checkprevinstance.html
ここにVB.NETでのやり方が書いてあり、C#でも似たようなことは出来ると思ったんですが
Microsoft.VisualBasic.ApplicationServices
これが存在しないエラーというが発生しました。
C#だと別のプロセスにデータを渡したりって事が無理なんでしょうか?
553デフォルトの名無しさん:2008/05/28(水) 11:20:52
参照の追加
554デフォルトの名無しさん:2008/05/28(水) 11:21:18
それでやるなら該当のdll参照すれ
555デフォルトの名無しさん:2008/05/28(水) 11:31:31
>>553
>>554
参照追加したらありました。
たんにusingを記述するだけじゃダメだったんですね。
これでなんとかなりそうです。
ありがとうございました。
556デフォルトの名無しさん:2008/05/28(水) 11:37:44
ttp://blogs.dion.ne.jp/anis7742/archives/6905607.html
ここでも聞いてるやついるな。
当たり前すぎて書かないからなー、普通。
557デフォルトの名無しさん:2008/05/28(水) 14:13:09
なんつう偉そうなコメントだw
558デフォルトの名無しさん:2008/05/28(水) 19:16:03
なぜSystem.Arrayクラスから派生クラスを作れないんですか?
559デフォルトの名無しさん:2008/05/28(水) 19:17:31
CLR的に配列は特別なオブジェクトだから
560デフォルトの名無しさん:2008/05/28(水) 21:55:06
System.Arrayクラスから派生クラスが作れると何の不都合があるんですか?
561デフォルトの名無しさん:2008/05/28(水) 22:15:37
CLRべったりの低レベルで特殊な実装になってるから派生したところでどうせ何もできないよ
っていうかSystem.Arrayなんかそんなによく使うか?
IList使えよ
562デフォルトの名無しさん:2008/05/28(水) 22:20:42
CLR自体、StringとかArrayとか、その内部構造自体に
依存した最適化がかかってるからだ、
ってどっかにあった希ガス。
563デフォルトの名無しさん:2008/05/29(木) 10:14:13
C++だとコンストラクタは出来るだけ初期化のみにした方がいいけど、
C#では初期化以外にもメソッド呼び出したり処理を始めちゃってもいいの?
564デフォルトの名無しさん:2008/05/29(木) 10:15:32
いいよ
565デフォルトの名無しさん:2008/05/29(木) 10:30:20
いかんよ
566デフォルトの名無しさん:2008/05/29(木) 10:51:19
C++でコンストラクタでは継承先でオーバーライドされる仮想関数は呼べないんだったっけ
C#では出来るよ
567デフォルトの名無しさん:2008/05/29(木) 11:03:33
>>563
してもいいけど、内容によっては立ち上がりが異常に時間がかかるプログラムになる。
その場合、最小限の初期化コンストラクタとクラス初期化メソッドを作る場合もある。
568デフォルトの名無しさん:2008/05/29(木) 11:53:48
visual studioみたいなGUIのソフト作りたいんですけど
そのためのサンプルとか無いでしょうか?
具体的には
フォームにメニューがいくつかあって
ツールボックスがあって
左側にはエクスプローラ的な表示があって
下側にはテキストのログウィンドウがあって
残りの領域にはMDIの子フォームを生成するようなGUIです。
いかがでしょうか。
569デフォルトの名無しさん:2008/05/29(木) 14:01:25
Visual StudioというGUIのサンプルがそこにあるではないか。
570デフォルトの名無しさん:2008/05/29(木) 14:09:14
Visual Studio のドッキングを自前でがんばったらマジで死ねるなw
571デフォルトの名無しさん:2008/05/29(木) 14:14:20
Visual Studio以上の物ができたら教えてね
試してあげるから
572デフォルトの名無しさん:2008/05/29(木) 17:24:15
DockPanelSuiteマジオススメ
573デフォルトの名無しさん:2008/05/29(木) 18:41:08
MonoDevelopのソースじゃ参考にならんか…
574デフォルトの名無しさん:2008/05/29(木) 18:43:22
>>572
すげーなこれw
575デフォルトの名無しさん:2008/05/29(木) 19:49:33
>>572
凄いが、これを駆使したプログラムを少人数で作る気になれない。
576デフォルトの名無しさん:2008/05/29(木) 20:04:01
577デフォルトの名無しさん:2008/05/29(木) 21:52:40
WinFormsか・・・
WPF版がほしい。
578デフォルトの名無しさん:2008/05/29(木) 22:24:21
>>577
お前はこっち池カス

WPF(XAML,XBAP,.NET3.5)GUIプログラミング
http://pc11.2ch.net/test/read.cgi/tech/1211453941/
579デフォルトの名無しさん:2008/05/30(金) 05:22:08
C#からWin32APIを使って子プロセスを起動し、
Win32APIのCreatePipe, WriteFile, ReadFileを用いてプロセス間通信をしようとしています

このとき、立ち上げた子プロセスはコマンドを標準入力から読み込みんで処理をし、
結果を標準出力へコマンドごとに出力し、入力にEOFが来たら終了、みたいなプログラムです

ここで、子プロセスがEOFを認識してくれず、子プロセスが終了してくれません
なにかいい方法があるのでしょうか?
それともWin32APIの質問ということでよその板の方がいいでしょうか?

やっていること:
ハンドルを用意
親プロセスが無名パイプを作成する
パイプの一端のハンドルAを継承可能にする
STARTUPINFO構造体のhStdInputに継承可能にしたパイプのハンドルAを指定
CreateProcess()
継承可能にしたパイプのハンドルAを閉じる
パイプの閉じていない方のハンドルBにWriteFile()
ハンドルBを閉じる ←ここで子プロセスに終了してもらいたい

よろしくお願いします

580デフォルトの名無しさん:2008/05/30(金) 06:02:32
そもそもWin32API使う意味がいったいどこに?
581デフォルトの名無しさん:2008/05/30(金) 06:08:55
C++でパイプを使った経験があったのでパイプをやろうとして、
C#でパイプをやるためにWin32APIを使うことにしました
582デフォルトの名無しさん:2008/05/30(金) 06:18:59
ProcessStartInfo.RedirectStandardInput
Process.StandardInput
この辺使う
583デフォルトの名無しさん:2008/05/30(金) 06:59:47
なるほど
他プロセスの標準入出力を通した通信は明示的なパイプ以外に用意されていたのですね
自分で調べてた限りでは見つかってなかった情報なのでとても助かりました
試してみます
ありがとうございました
584デフォルトの名無しさん:2008/05/30(金) 10:37:20
string str = File.GetLastWriteTime(Path).ToString();
このようにファイルの最終更新時間を取得すると、
そのファイルのプロセスが使用中のままになるのですが、
CloseやDisposeのようにすぐに開放させるにはどうすればいいのでしょうか?
585デフォルトの名無しさん:2008/05/30(金) 11:06:44
ならんが
586584:2008/05/30(金) 11:10:07
すみません。
File.GetLastWriteTimeのせいじゃありませんでした。
File.GetLastWriteTimeタンごめんんささい。
587File.GetLast:2008/05/30(金) 22:49:58
んもー
588デフォルトの名無しさん:2008/05/31(土) 00:36:30
何言ってんだお前らは?釣りか?
|  問  1
|(ア) (イ) (ウ) (エ) (オ)
|D D D D D
|C C C C C
|B B B B B
|A A A A A
|@ @ @ @ @
589デフォルトの名無しさん:2008/05/31(土) 00:37:34
誤爆りました。スマソ
590579:2008/05/31(土) 05:59:48
アドバイスいただけた方法でうまくいったので(ありがとうございます)報告します
ちょっとはまった点としては、
改行コードをWriteしてもフラッシュされない
 →出力がほしい時はちゃんとフラッシュ
子プロセスのStdinに対するエンコーディングはProcessStartInfoから設定できない
 →StandardInput.BaseStreamを取得して新しくStreamWriterを作る
ぐらいでした
当初の問題だったEOF云々は、Process.StandardInputのストリームを閉じると
問題なく処理されました

求めていた処理を考えていたやりかたよりずっと簡単に得られたので大満足です
591デフォルトの名無しさん:2008/05/31(土) 17:29:19
今、とあるゲームの画面の各部をキャプチャして画面を認識し、指定した部分をクリックしたり文字を送ったりするプログラムを作っています。

VisualC#のデバッグモードで動かしていると、画面上の指定部分をキャプチャする関数の中で使っている、Graphics.GetHdc()の部分で、
「ArgumentExceptionはハンドルされませんでした。  使用されたパラメータが有効ではありません」
のメッセージがでて止まってしまいます。10回に1回くらいの頻度かな。
ローカル画面で変数の値をチェックしても、キャプチャ範囲に異常な値は無く(bmpのサイズなど正常)、何でこうなるのか心当たりがありましたら指摘してもらないでしょうか。
#複数の呼び出し元から、この関数が同時に呼び出されているときにこんなことおこるのかな・・・?

ちなみに、キャプチャやってる関数を下に貼り付けてみます。
-----------
public Bitmap CapturePartFromA(int[] capval)
{
//capval[] はキャプチャ範囲を収めた配列。ここでは[3]と[4]のみ利用
Bitmap bmp;
//座標系を変換する関数の戻り値保存用
int[] xxx = new int[4] { 0, 0, 0, 0 };
IntPtr hWnd = FindWindow("A Game", null);
RECT winRect2 = new RECT();
GetWindowRect(hWnd, ref winRect2);
//座標を変換する関数(クライアントの原点←→デスクトップの原点)
xxx = ConvertCoordinates(capval);
bmp = new Bitmap(capval[3], capval[4]);
Graphics g = Graphics.FromImage(bmp);
IntPtr hDC = g.GetHdc(); //←ここで 例外頻発
IntPtr winDC = GetDC(hWnd);
BitBlt(hDC, 0, 0, bmp.Width, bmp.Height, winDC, xxx[0], xxx[1], SRCCOPY);
g.ReleaseHdc(hDC);
g.Dispose();
ReleaseDC(hWnd, winDC);
return bmp;
}
592デフォルトの名無しさん:2008/05/31(土) 17:44:08
>>591
チートスレ池
593デフォルトの名無しさん:2008/05/31(土) 19:41:13
MMORPGの自動プログラムを作ってどうする、それほど他を出し抜きたいのか?
こんな所に来るな。
594デフォルトの名無しさん:2008/05/31(土) 22:52:58
C# = D♭
595デフォルトの名無しさん:2008/06/01(日) 15:20:56
>>591
評:もっとオブラートに包んだ質問のやりかたを覚えましょう。
596デフォルトの名無しさん:2008/06/01(日) 19:22:52
エロシーンまだ?
597デフォルトの名無しさん:2008/06/01(日) 19:27:52
せめて「GUIのテストを自動化したいです」位のうそをつく常識を持て
598デフォルトの名無しさん:2008/06/01(日) 19:48:59
HttpWebRequest使ってゆうちょダイレクトのサイトから振り込み状況を確認するアプリ作ってるんだけど、
誰かできた人いる?
UserAgentとかいじってもなぜかはじかれる。
同じアプリでほかのhttpsサイトとかはログインできるんだけどなぁ。
599デフォルトの名無しさん:2008/06/01(日) 20:02:32
いません
600591:2008/06/01(日) 20:49:22
ここで知恵ある人いるかと思ったのですが・・・残念。
自助努力するしかないですね。
どうもでした。
601デフォルトの名無しさん:2008/06/01(日) 20:49:25
なぜかって、なんのエラーで帰ってきてるの?
602デフォルトの名無しさん:2008/06/01(日) 22:21:28
UDP通信で、C#のクライアントにVC++のCプログラムからソケットでメッセージを送って表示
しているのですが。漢字が正しく表示できません。何かのコード指定だと思うのですが、
探してみたのですが見つからず。よろしければ教えてください。
C++の手順
WSAStartup(MAKEWORD(2,0), &wsaData);
sock = socket(AF_INET, SOCK_DGRAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(XXXXX); // 送信先のポート番号
addr.sin_addr.S_un.S_addr = inet_addr("XXXXXXXX"); // 送信先のIP
sendto(sock, str2.c_str(), str2.size(), 0, (struct sockaddr *)&addr, sizeof(addr));
closesocket(sock);
WSACleanup();
必要であればC#受け側も出します。
ちなみにc++側のプロジェクトの文字コードを有る分変えても変わりませんでした。
603デフォルトの名無しさん:2008/06/01(日) 22:25:33
C#側も書こう
604デフォルトの名無しさん:2008/06/01(日) 22:26:42
文字コード意識せずにネットワークとか

大方StreamReaderをEncoding未指定でnewしてんだろ
605デフォルトの名無しさん:2008/06/01(日) 22:32:39
技術ある人はゆうちょダイレクトにログインするプログラムをC#でHttpWebRequestつかって組んでみてほしい。
思いのほかはまるよ。
606デフォルトの名無しさん:2008/06/01(日) 22:33:57
>>601
サーバー側のエラーで帰ってきてログイン不可能。
エラーコードが書いてあるけど、意味がわからないので対応が難航してる。

607デフォルトの名無しさん:2008/06/01(日) 22:36:26
>>606(=605)
そのエラーコードを書けってことじゃないのか?
イミが分からないとか、技術ある人は作ってみ?とか
根本的にダメダメwww
608デフォルトの名無しさん:2008/06/01(日) 22:38:18
サーバー側(cgi)のエラーコードなんてC#とまったく関係ないから書かなかっただけだが。
609デフォルトの名無しさん:2008/06/01(日) 22:40:27
>>608
オマエには無理って事で終了
610デフォルトの名無しさん:2008/06/01(日) 22:42:59
TP1/Webのエラーコードっぽいけどな。
マニュアルある人ならわかるかもしれん。
今ゆうちょダイレクトメンテ中でエラーコード再取得できなかった。
611デフォルトの名無しさん:2008/06/01(日) 22:43:26
>>609
お前には聞いてないってw
612デフォルトの名無しさん:2008/06/01(日) 22:45:14
>>603  >>604の指摘でC#側を見て下記の点ではないかと思い
enc = System.Text.Encoding.UTF8;
// enc = System.Text.Encoding.Unicode;
// enc = System.Text.Encoding.BigEndianUnicode;
localPort = XXXXX;
udp = new System.Net.Sockets.UdpClient(localPort);

コメント部分を追加してみましたが変えましたが、半角英数もまともに表示できなかったです。
元々はUTF8でした。 何がいけないのだろう?
613デフォルトの名無しさん:2008/06/01(日) 22:45:51
逆ギレw
614デフォルトの名無しさん:2008/06/01(日) 22:47:03
技術もないのにあおるだけのアホは放って置いてできる人よろしく!
615デフォルトの名無しさん:2008/06/01(日) 22:50:06
>>614
ここで聞く前に、先ず質問の仕方を勉強してきてね
616デフォルトの名無しさん:2008/06/01(日) 22:51:20
だなw
617デフォルトの名無しさん:2008/06/01(日) 22:52:55
>>615,616
キメェw
618デフォルトの名無しさん:2008/06/01(日) 22:55:16
ゆうちょダイレクトは特に妙なところはなかったように記憶しているけど、
どこでひっかかってるの?
今確認しようとしたら、ちょうどサービス停止中だな。
619デフォルトの名無しさん:2008/06/01(日) 23:03:10
C# 側のコードです。 どのコードを指定しても正しく表示されなかった。orz
System.Net.Sockets.UdpClient udp;
private Button button1;
System.Text.Encoding enc;

enc = System.Text.Encoding.UTF8;
// enc = System.Text.Encoding.UTF7;
// enc = System.Text.Encoding.ASCII;
// enc = System.Text.Encoding.Unicode;
// enc = System.Text.Encoding.BigEndianUnicode;
localPort = XXXXXX;
udp = new System.Net.Sockets.Udp

System.Net.IPEndPoint remoteEP = null;
byte[] rcvBytes = udp.Receive(ref remoteEP);
string rcvMsg = enc.GetString(rcvBytes);

udp.Close();

バッファーを見たら、シフトJISが送られてくるようでした。
わからない…orz
620デフォルトの名無しさん:2008/06/01(日) 23:05:29
一部切れていました。
udp = new System.Net.Sockets.UdpClient(localPort);
621デフォルトの名無しさん:2008/06/01(日) 23:08:29
Shift_JISで送られてきてるのにUTF-8でデコードとかおかしいと思わないか?
622デフォルトの名無しさん:2008/06/01(日) 23:11:50
思わないでーす
623デフォルトの名無しさん:2008/06/01(日) 23:17:29
なんか、荒らされてるな。
IDない板だから、釣りや煽りに反応するのはやめましょう。
質問者の暴言は、たいてい騙り。
もちろん、ときどきとんでもない質問者もいるが、いずれにせよ放置で。
624デフォルトの名無しさん:2008/06/01(日) 23:19:15
技術ある人に作れって時点でネタだろ
625デフォルトの名無しさん:2008/06/01(日) 23:23:40
>>620
すみません、どの記号がどの文字コードかの知識が不足しています。orz
626デフォルトの名無しさん:2008/06/01(日) 23:55:12
とりあえず、ゆうちょに不正アクセスしてる奴がいると通報しとくか。
3人くらいで通報すれば目付けられるから
627デフォルトの名無しさん:2008/06/02(月) 01:27:36
何が不正?
628デフォルトの名無しさん:2008/06/02(月) 06:31:07
.Text.Encoding.GetEncoding(932)
629デフォルトの名無しさん:2008/06/02(月) 06:59:26
>>628
出来ましたありがとうございます。
630デフォルトの名無しさん:2008/06/02(月) 08:16:51
とりあえず、ゆうちょにログインも出来ないアホはほっとけよ
631デフォルトの名無しさん:2008/06/02(月) 12:59:43
ゆうちょの件一晩頭冷やして考えたらできました。
お騒がせしました。
632デフォルトの名無しさん:2008/06/02(月) 13:09:14
633デフォルトの名無しさん:2008/06/02(月) 13:35:31
結局何がまずかったの?
634デフォルトの名無しさん:2008/06/02(月) 13:39:21
態度
635デフォルトの名無しさん:2008/06/02(月) 15:04:41
>>634
いや、頭だろ・・・
636デフォルトの名無しさん:2008/06/02(月) 17:46:07
そもそも質問してないだろ
意外とはまるからやってみぐらいの勢いだったんだが。
それを勘違いしたこまったちゃんが質問の仕方が悪いだの、態度が悪いだのってこんな匿名掲示板で言われてもなw
637デフォルトの名無しさん:2008/06/02(月) 17:48:37
>>636
ヨチヨチwww
638デフォルトの名無しさん:2008/06/02(月) 17:51:25
>>636
明らかに誰か作って教えてくれってスタンスだったけどなw

ヨチヨチwww
639デフォルトの名無しさん:2008/06/02(月) 17:55:30
それはそうと、ゆうちょ興味あったら挑戦してみ。
興味なかったらいいけど。
640デフォルトの名無しさん:2008/06/02(月) 19:57:56
ゆうちょダイレクトのアカウントなんて普通持っとらんがな(´・ω・`)
嵌るとかは単純に質問者の技術力不足だと思う
641デフォルトの名無しさん:2008/06/02(月) 20:16:54
そうだね。
俺はそもそも技術者じゃないから技術力不足は認めるよ。
ネットショップを経営しててそれに必要な入金チェックをちょっと作ってみようかなって思っただけだし。
642デフォルトの名無しさん:2008/06/02(月) 20:24:42
つ Python
無理にC#を使う必要性はない。
643デフォルトの名無しさん:2008/06/02(月) 20:32:46
PythonってWinアプリ簡単に作れるの?
644デフォルトの名無しさん:2008/06/02(月) 20:35:08
うん。GUIを扱うライブラリがあるし、IronPythonを使えば.netも使える
645デフォルトの名無しさん:2008/06/02(月) 20:36:30
ゆうちょ房のスレ荒らしw
646デフォルトの名無しさん:2008/06/02(月) 20:47:33
なるほど。
Python調べてみよう。Excelファイルいじくれるライブラリもあるといいけど。
C#始めて1ヶ月だけどフリーで開発環境まで全部まとめてインストールできるのが楽ではじめたんだよね。
今度は今手作業で集計してるバイトの勤怠管理でも作ってみるか。
647デフォルトの名無しさん:2008/06/02(月) 21:08:48
ゆうちょが出てきてからスレの雰囲気がすごく悪くなった
648デフォルトの名無しさん:2008/06/02(月) 21:21:13
過去スレ読んだが同じようなもんだぞ
ゆうちょに粘着している奴が悪くしてんじゃね?
649デフォルトの名無しさん:2008/06/03(火) 00:14:43
>>648
ヨチヨチwww
650デフォルトの名無しさん:2008/06/03(火) 00:21:49
なんかヨチヨチレスしかできないかわいそうなやついるな
651デフォルトの名無しさん:2008/06/03(火) 00:52:27
なんで技術者、学生以外でこんな板見てんだか・・・
652デフォルトの名無しさん:2008/06/03(火) 02:16:25
初心者スレで同様の質問をしたのですが、相手にされなかったのでこちらで再度お聞きします。
ListViewのdetail表示時に行間を広くするにはどうしたらいいのでしょうか?
653デフォルトの名無しさん:2008/06/03(火) 02:42:12
ListViewItemのStyleあたりで設定できなかったっけ?
出来なかったらごめん。
654デフォルトの名無しさん:2008/06/03(火) 09:19:23
ImageList使う
655デフォルトの名無しさん:2008/06/03(火) 12:20:34
お前には無理だからさっさと諦めろ。
656デフォルトの名無しさん:2008/06/03(火) 13:35:14
>>652
>初心者スレで同様の質問をしたのですが、相手にされなかったのでこちらで再度お聞きします。
馬鹿じゃないの?
まじめな話。
657デフォルトの名無しさん:2008/06/03(火) 14:07:08
UserControlを継承したクラスを作って
クリックされた箇所に丸印を描画するようなプログラムを作るとしたとき。
Click()イベントで、クリックされた箇所を記憶し
Invalidate()でPaint()イベントを呼び出してクリックされた箇所を描画する。
という動きになるのでしょうか?
658デフォルトの名無しさん:2008/06/03(火) 15:01:12
はい
659デフォルトの名無しさん:2008/06/03(火) 15:19:56
フォームエディタで上にコントロールを乗せないなら、
UserControlじゃなくて、ただのControlからの継承でいい。
660デフォルトの名無しさん:2008/06/03(火) 17:57:36
>>658
>>659
どうもありがとうです。

ところで、趣旨が変わるんですが
折れ線(複数)グラフを書きたいのです。
ひとつの表示窓に複数のラインを書きたいのです。
そのライン単位でオブジェクトにしたいのですが、
(1)そのラインオブジェクトはControlから派生させて自分でライノブジェクト自身で描画させるべきでしょうか。
(2)それとも単なる(Control派生ではなく)オブジェクト化して、親表示窓Controlに個別に描画ルーチンを呼ぶ形にするべきでしょうか?
一般的にどうなのかなと思いまして。

(1)だったら、表示窓側の親オブジェクトは特に何も考えずに子が思いのままに描画する。
と思っていたのですが、背景処理が手間かと思えてきました。
子に当たるラインオブジェクトを描画すると親部分を上書きするからです。
リージョンを切れば親の描画部分を塗りつぶさなくても描けそうですが、折れ線なのでPATHが複雑になりすぎるかと思います。

(2)だったら特に背景塗りつぶし過ぎに関しては何も考えなくてよいのですが、
Paintルーチンで子オブジェクトにGrapicsオブジェクトを渡すサブルーチンコール形式になると思うのですが、なんだか嫌なのです。
一般的にこういうことをやりたい場合にはどうしますか?
変なことを言っているようだったら指摘してください。
661デフォルトの名無しさん:2008/06/03(火) 18:02:28
拡張性を考えれば当然後者だろ
662デフォルトの名無しさん:2008/06/03(火) 19:57:03
WPFなら前者だね
663デフォルトの名無しさん:2008/06/03(火) 20:56:09
Excel使え
664デフォルトの名無しさん:2008/06/03(火) 21:37:46
どこかにチャートコントロールあったはず
665デフォルトの名無しさん:2008/06/03(火) 21:39:16
ZedGraphとか
666デフォルトの名無しさん:2008/06/03(火) 22:37:23
ZenGraphってスクロール機能つけられる?
667デフォルトの名無しさん:2008/06/03(火) 22:45:33
便乗で質問なんですが
ZedGraphとかNplotを仕事(商用)として使ってる人いますか?
668デフォルトの名無しさん:2008/06/03(火) 23:25:12
ListViewの編集はなんで先頭のカラムしかダメなの?
面倒だね。
669デフォルトの名無しさん:2008/06/04(水) 00:59:59
WPFなら自由自在
670デフォルトの名無しさん:2008/06/04(水) 01:18:50
いやそういう話じゃなくて。
671660 :2008/06/04(水) 10:13:48
皆さま。
ZenGraphとかNplotとかあるんですね。
これらを使うかどうかはともかく、これらの実装を参考にさせてもらいます。
どうもありがとう。
672デフォルトの名無しさん:2008/06/04(水) 20:17:36
Personクラスの派生クラスとして
Man,Woman,Noneを考えます。
Man,Woman,NoneはPersonクラスのstaticなメソッドを介して生成されるものとします。
Man,Woman,Noneのコンストラクタのアクセシビリティをそれぞれ
public,protected,privateにしております。
publicなManは生成されます。
protectedなWoman,privateなNoneは生成できません。
こういうときはコンストラクタのアクセシビリティをinternalにすればいいようです。
こういうinternalの使い方は正しいでしょうか?
673デフォルトの名無しさん:2008/06/04(水) 20:20:56
クラスライブラリを作ってるなら全然アリ
単一プロジェクトなら無意味
674デフォルトの名無しさん:2008/06/04(水) 20:29:34
他のアセンブリに公開するつもりがないならinternalでいいんじゃね
675デフォルトの名無しさん:2008/06/04(水) 20:49:20
Man,Woman,Noneクラスは外部に見せる必要がないならこういう手もある。
やりたいこととは違うと思うがクラス自体を見えなくすればコンストラクタの隠蔽は不要になる。
public enum PersonType { Man, Woman, None };

public class Person {
 public static Person GetInstance(PersonType x) {
  switch (x) {
   case PersonType.Man: return new Man();
   case PersonType.Woman: return new Woman();
   default: return new None();
  }
 }
 private class Man : Person { public Man() {} }
 private class Woman : Person { public Woman() {} }
 private class None : Person { public None() {} }
}

class Startup {
 static void Main() {
   Person man = Person.GetInstance(PersonType.Man);
   Person woman = Person.GetInstance(PersonType.Woman);
   Person none = Person.GetInstance(PersonType.None);
 }
}
676デフォルトの名無しさん:2008/06/04(水) 20:53:36
C++から入ると、friendが無いのがちょっと不便に感じるね。
677デフォルトの名無しさん:2008/06/04(水) 20:56:41
friendは邪悪だからなくていいよ。
678デフォルトの名無しさん:2008/06/04(水) 21:22:41
partial使えば内部型でもファイルを分けて書けるよ
679デフォルトの名無しさん:2008/06/04(水) 21:31:51
>>676
主にテスト用途だけどFriend Assemblyってのがある。
通常はprivateな型やメソッドをテストするのに使う。
680デフォルトの名無しさん:2008/06/04(水) 21:57:45
>>675

コレって変だと思うのはオレだけ?

681デフォルトの名無しさん:2008/06/04(水) 22:03:44
お前だけ
Comparer<T>.Defaultとか例を挙げたらキリがない
682デフォルトの名無しさん:2008/06/04(水) 22:10:23
ああすまんComparer<T>.Defaultは違うね
Stream.Null(実際の型はStream+NullStream)とか
683デフォルトの名無しさん:2008/06/04(水) 23:40:00
>>680
君だけではないよ。
Factoryってこうやらないだろ?

684デフォルトの名無しさん:2008/06/04(水) 23:59:22
XmlReader.Createとかあるでしょ
一応MS的にはこういうのも「ファクトリメソッド」と呼ぶらしい
685デフォルトの名無しさん:2008/06/05(木) 00:09:09
どこが変だとか、どうあるべきかとか書いてくれないと答えようがない

GetEnumerator()の実装例でyield returnを使わないケースで内部クラスを使っている
なおC#の内部クラスはJavaのstaticな内部クラスと同等だから誤解のないよう
686デフォルトの名無しさん:2008/06/05(木) 01:55:39
というか基底クラスであるPersonクラスが具体的な派生クラスを知っているのが不自然。
気持ち悪い。
687デフォルトの名無しさん:2008/06/05(木) 03:35:19
既定クラスがBuilderを兼ねてるのがいやだったらPersonとファクトリーを分離するのは問題ない。
ただ、拡張可能なようにBuilderやStrategyパターンで作ってゆくと、
クラスやインターフェイスの数がすごいことになるから過剰な汎用化には反対したい。
688デフォルトの名無しさん:2008/06/05(木) 04:39:40
突然質問してごめんなさい。

皆さんはC#とかってどうやって勉強してるんですか?
こないだはじめたんだけど、資料が少なくて、学習がすすみません。
いい勉強法とかオススメの書籍があれば教えてください。

ちなみに今は実際にソフトウェア作ってみて、わからないことがあったら調べて・・・って感じです。
689デフォルトの名無しさん:2008/06/05(木) 07:52:47
C#で資料が少ないとか言ってたら何も覚えられん。
690デフォルトの名無しさん:2008/06/05(木) 08:05:32
MSDNに全て有る
691デフォルトの名無しさん:2008/06/05(木) 08:47:31
>563-567 >690
の質問とかぶると思うのですが。
 オープンなC#ソースでストラテジーパターンを実現しているらしき所を見かけたので、
newのコストについて教えてください。

【ソース概要】
・クラスConcreteAとConcreteBは同じParentStategyクラスの派生。
・それぞれのクラスには違う条件でこの方法で状態遷移する。
void override update(){
  ・・・
  if(hoge<hage)
    {parentStategyInstance = new ConcreteA()}
  else
    {parentStategyInstance = new ConcreteB()}
  ・・・
}
・update()は頻繁に発生する。
・各コンストラクタはメンバを一つ更新する一行のみ。
・ガベコレでメモリ使用量のコストが無いことは解ったつもり。

 C++ならキャスト一択の所と思うのですが、JITのおかげでこの書き方が
実は最高にスマートって事になっちゃいないか知りたいんです。

※JITのおかげさまで、簡単にベンチテストが作れない事が問題なんです><
※オブラートに包んだ所にミソがありそうなら、どんどん公開します。 O!S!I! O!S!I!
692デフォルトの名無しさん:2008/06/05(木) 09:07:15
Stategy自体選択ミスに1票
693デフォルトの名無しさん:2008/06/05(木) 09:08:56
switch最強伝説を更新するんですか? ('A`) >692
694デフォルトの名無しさん:2008/06/05(木) 09:14:22
C#自体の選択ミスに1票
695デフォルトの名無しさん:2008/06/05(木) 09:19:38
C#のEnum型とswitchの相性の良さは無敵だぉ!! デザパタ厨涙目! プギャー(^0^)9
696デフォルトの名無しさん:2008/06/05(木) 09:27:05
>695
私もそう言う事が聞きたかったので、ありがとうございました。

是非参考になるサイトをご紹介頂きたくお願い致します。 m(_ _)m
697デフォルトの名無しさん:2008/06/05(木) 09:28:56
 ペイントを操作して、絵を描こうとしているのですが、
ドローイングエリアをうまくクリックしてくれません。
どなたか、どうすればいいのか教えていただけませんでしょうか?

[StructLayout(LayoutKind.Sequential)]
public struct RECT {
public int left;
public int top;
public int right;
public int bottom;
}
const uint WM_LBUTTONDOWN = 0x201;
const uint WM_LBUTTONUP = 0x202;

public void RemotePaint() {
IntPtr hWnd;
string sClassName = "MSPaintApp";
string sWindowText = null;
sClassName = "AfxFrameOrView42u";
sWindowText = null;
hWnd = FindWindowEx(hWnd, IntPtr.Zero, sClassName, sWindowText);
SetForegroundWindow(hWnd);
RECT winRect = new RECT();
GetWindowRect(hWnd, ref winRect);
System.Threading.Thread.Sleep(1000);
PostMessage(hWnd, WM_LBUTTONDOWN, 100, 100);
System.Threading.Thread.Sleep(500);
PostMessage(hWnd, WM_LBUTTONUP, 100, 100);
}
698デフォルトの名無しさん:2008/06/05(木) 10:39:13
>>566
サブクラスのコンストラクタが動く前に
オーバーライドされた仮想関数が呼び出されるわけで
ちょっと気持ち悪いですね。
699デフォルトの名無しさん:2008/06/05(木) 10:41:09
>>691
あまりにも頻繁にUpdateが呼ばれるならやや効率は悪いだろうな。
でも多分誤差レベル。
大抵ほかの処理でそれ以上にメモリ使ってるだろうから。

ただ、作りとしてはぱっとしないな。
700デフォルトの名無しさん:2008/06/05(木) 11:18:52
>ぱっとしないな
ぶっちゃけそこなんです。

 上の話の終わり方だと、ConcreteAとConcreteBを継承した大きなクラスを作って
処理部分だけ、switchかdelgate型で置き換え可能にする。
・JITはswitchが強いってことは何処までか?
・一つの処理がどの程度長いとdelgate型が有利になるか?
でバッチテストが作れるなと思ってました。
  っていうか、そういうテストした人の本や社員のサイトがあっても良いなと。

これも「ぱっとしないな」と思ってくれたら、むしろ愉快なんですけどね。

あと
>大抵ほかの処理でそれ以上にメモリ使ってるだろうから。

私の
>・ガベコレでメモリ使用量のコストが無いことは解ったつもり。
への返事でそんなに深い意味は無いですよね?

※最大メモリ使用量より速度優先
※速度ねらいで、ConcreteA、ConcreteBに変数名の重複を許さないぐらい程度は妥協範囲。
701デフォルトの名無しさん:2008/06/05(木) 11:22:09
delegateの"e"が抜けてる。
702デフォルトの名無しさん:2008/06/05(木) 11:25:28
デリゲートなんかは下手に保持しとくより毎回newした方が速いらしいね
703デフォルトの名無しさん:2008/06/05(木) 11:32:07
thx
delegateは捨てましょう。

…C的には、関数ポインタよりnewが早i(ry

JITのnewまわりの最適化を見られれば、それでも疑問は解決できます。
704702:2008/06/05(木) 11:36:07
>>703
意味わかってる?
デリゲートが遅いって言ってるんじゃなくて,デリゲート型のオブジェクトをnewするときの話だよ
705デフォルトの名無しさん:2008/06/05(木) 11:45:56
>704
ミスリードです>< すいません。

 最初に戻ると、元parentStategyInstanceを持ってるクラスを作った時に、
デリゲート型のオブジェクトをnewできます。

あとは
  if(hoge<hage)
    {exceDelege = ConcreteAexceDelege}
  else
    {exceDelege = ConcreteBexceDelege}

あと、
>※速度ねらいで、ConcreteA、ConcreteBに変数名の重複を許さないぐらい程度は妥協範囲。
これ、 ConcreteA、ConcreteBでずらずら並んで、20個ぐらいあったら一気に話が不毛になるな。('A`)

706デフォルトの名無しさん:2008/06/05(木) 11:51:10
だから、逆なんだ。
  if(hoge<hage)
    {exceDelege = ConcreteAexceDelege}
  else
    {exceDelege = ConcreteBexceDelege}

よりも >702は
  if(hoge<hage)
    {exceDelege = new exceDelegater(ConcreteAexce)}
  else
    {exceDelege = new exceDelegater(ConcreteAexce)}
707デフォルトの名無しさん:2008/06/05(木) 12:05:13
newの最適化っつっても、確保に関しては基本的にマネージヒープの
未割り当て領域へのポインタをオブジェクトサイズ分進めるだけだぞ。
もちろん頻繁にnewすればGC起動の機会を与えることになるから、
パフォーマンスを気にするならインスタンスのキャッシュは基本ではあるが。
708691:2008/06/05(木) 12:34:44
 話を長引かせる様な書き方をしてしまってすいません。
>696 >700-701 >703 >705-706
まで私ですね。

>ConcreteA、ConcreteBでずらずら並んで、20個ぐらい
は失言でしたが、>707にはそこまで考慮して貰ってありがとうございます。
「インスタンスのキャッシュは基本」
これを確認出来て良かったです。

ソースの出所が良い所ぽかったので、>704みたいな事は無いか色々勘ぐったんです。

<ちら裏>
switchしかりnewも、CLRやJITの最適化って非線形で決めてナシなんだな。
皆さん好きですか?
私は、規模が変わるたびにバッチテスト・ベンチマークテストする事になりそうで('A`)
709デフォルトの名無しさん:2008/06/05(木) 12:51:30
大抵現実に影響があるようなパフォーマンス問題は
そんな細かい話ではない。
710デフォルトの名無しさん:2008/06/05(木) 12:53:58
デリゲートがキャッシュするよりnewってのは初めて聞いたな。
どこででた話?
それかひょっとして非常に使用頻度の低いデリゲートの話?
711デフォルトの名無しさん:2008/06/05(木) 12:56:14
>709 けどそれって、C#の開発経験があるって言えるんですか?
毎日好きな言語で遊んで、顧客が限定してきた時だけC#って奴と差がないじゃん。
712デフォルトの名無しさん:2008/06/05(木) 13:03:29
visual studioでメッドを全部折りたたむ技ってないですか?
713デフォルトの名無しさん:2008/06/05(木) 13:05:09
>>711??
何のことを言ってるんだ?
714デフォルトの名無しさん:2008/06/05(木) 13:06:11
こういう事を
>そんな細かい話
って言い捨てること。
715デフォルトの名無しさん:2008/06/05(木) 13:18:25
>>714
プロならコストと効率を考えて、大して効果の上がらない箇所の最適化に
拘って労力を注ぐくらいなら、もっと他にすることがあるだろうと思うがな
そういうところをいじくり倒せるのはむしろ趣味で遊んでる奴のほうじゃね
716デフォルトの名無しさん:2008/06/05(木) 13:25:04
>715
>プロならコストと効率
そりゃどの言語でもそうだよ。
話をループさせてることに気付いてる? 会話下手?

俺は優しいから"C#でのコストと効率"の経験って解釈してあげるよ。
717デフォルトの名無しさん:2008/06/05(木) 13:28:38
>>716
煽る以外に言い返す言葉が見つからないならレスするなよ
718デフォルトの名無しさん:2008/06/05(木) 13:33:19
>715のプロとしてのコストと効率の経験と、趣味で遊んでる奴との混同具合が心配です。
719デフォルトの名無しさん:2008/06/05(木) 13:46:50
usingを使ってStreamReaderを読んでますが、
whileで最後まで読んで、もう一度whileで読みたいのですが、
どうすればいいんでしょうか。
720デフォルトの名無しさん:2008/06/05(木) 13:52:18
>>719
こういうこと?
streamReader.BaseStream.Seek(0, SeekOrigin.Begin);
721デフォルトの名無しさん:2008/06/05(木) 13:54:51
>>712
アウトラインのことなら、編集 - アウトラインで
722719:2008/06/05(木) 14:00:03
>>720
おお!!出来ました!助かりました!
ありがとうございます!
723デフォルトの名無しさん:2008/06/05(木) 14:16:28
優先度の問題。
そんな細かい話を気にする必要があることだってあるが、
現実には引っかかるのはもっと別のところであることがほとんど。
もっと気をつけるべきとこは他にいっぱいある。
ってだけの話、無意味とは言わん。
724デフォルトの名無しさん:2008/06/05(木) 14:19:08
だろうね。 大概解ってるだろ。
俺、>709って初見じゃないもん。 定期的に湧く厨だと思った。
725デフォルトの名無しさん:2008/06/05(木) 14:19:37
条件分岐の効率なんて、文字列処理一発でも挟まれば全く無意味。
だから処理効率より設計の方を重視する方がいい、ほとんどの場合は。
726デフォルトの名無しさん:2008/06/05(木) 14:24:24
>>724
誰かさんはこの程度でベンチテスト毎回やるんだと言ってるから相当優先度が高いんだろ
解ってるとは思えん
727デフォルトの名無しさん:2008/06/05(木) 14:29:50
次のようにXMLファイルを読み込もうとしてるのですが、
どうやら読み込みに失敗している環境があるらしいのです。
if (File.Exists(Directory.GetCurrentDirectory() + "\\" + "data.xml") == true)
{
 Type[] et = new Type[] { typeof(Data) };
 System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(ArrayList), et);
 using (System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory() + "\\" + "data.xml", System.IO.FileMode.Open))
 {
  DataList = (ArrayList)serializer.Deserialize(fs);
 }
}
そこでまず、本当にXMLファイルの読み込みに失敗しているのかメッセージボックスでチェックしたいのですが、
try
{
 using (System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory() + "\\" + "data.xml", System.IO.FileMode.Open))
 {
  DataList = (ArrayList)serializer.Deserialize(fs);
 }
}
catch
{
MessageBox("読み込み失敗");
}
こんな風に書いちゃってもいいのでしょうか?
728デフォルトの名無しさん:2008/06/05(木) 14:32:37
その時も文字列処理を引き合いに出してたな。
だいたい、その辺りにC#の用途の向き不向きボーダーラインがあるんかな。
More Effective C++みたいなイメージでは不毛と。
729デフォルトの名無しさん:2008/06/05(木) 15:00:24
>>727
肝心の例外情報握り潰したら話にならんだろ
つか今時CurrentDirectoryかよ
730デフォルトの名無しさん:2008/06/05(木) 15:02:22
>729は catch の後ろに何もない事を言っている様だ。
try .. catchのヘルプに戻ろう。
731デフォルトの名無しさん:2008/06/05(木) 15:35:17
CurrentDirectoryの何が悪いのかわからん。
まさかレジストリやマイドキュメントに保存するのか?W
732デフォルトの名無しさん:2008/06/05(木) 15:39:09
カレントにするやつは無知か手抜きだろ
733デフォルトの名無しさん:2008/06/05(木) 15:46:27
exeのフォルダならともかく、
カレントは起動方法によって変わるから問題だろ
元々そういう仕様なら関係ないけど
734デフォルトの名無しさん:2008/06/05(木) 15:46:32
カレントディレクトリがショートカットとかで変更されたらどうするんだ?
735デフォルトの名無しさん:2008/06/05(木) 15:49:56
俺の負けだ。 言わせてくれ。
そこは

   throw; //スルー

だろ。
俺は敗者だ。 だけどなんかスッキリした。

質問者おいてこぼりだが、確かに>728の模範解答は期待。
736727:2008/06/05(木) 15:54:41
聞きたいのはCurrentDirectoryのところではなく、
usingステートメントをtryで囲んでもいいのかな?と思ったのです。

読み込み失敗時の例外情報はヘルプでFileStreamを調べたのですが例外の種類がわかりませんでした。
例外の種類はどうやって調べたらいいんでしょうか?
737デフォルトの名無しさん:2008/06/05(木) 16:00:52
起きえる例外がわからなければSystem.Exceptionで受ければいいだろ。
起きる例外はMSDNに載ってると思うけど。
738デフォルトの名無しさん:2008/06/05(木) 16:13:54
MSDNでFileStream コンストラクタ (String, FileMode)を引いたら例外の種類が書かれていました。
try
{
 using (System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory() + "\\" + "data.xml", System.IO.FileMode.Open))
 {
  DataList = (ArrayList)serializer.Deserialize(fs);
 }
}
catch(System.Exception e)
{
 MessageBox(e.ToString());
}
としましたが、usingをtryで囲ってもいいのかが知りたいです。
739デフォルトの名無しさん:2008/06/05(木) 16:15:36
どうして駄目だと思った?
740727:2008/06/05(木) 16:31:25
>>739
usingステートメントって例外が起きた時にステートメント内のdisposeを保証してくれるんですよね。
なのでtry句が複雑にネストしてしまう気がしたからです。
例外が自分の環境でも再現出来ればいいのですが、
他人の環境なので再現できないので、メッセージボックスを仕組んで原因を調べようかなと思いました。
741デフォルトの名無しさん:2008/06/05(木) 16:43:55
try句が複雑にネストしてしまう、の意味が分からない。
742デフォルトの名無しさん:2008/06/05(木) 16:45:18
usingをtry-finallyに展開してみる。
try { 
 readonly System.IO.FileStream fs = new System.IO.FileStream("data.xml", System.IO.FileMode.Open);
 try { DataList = (ArrayList)serializer.Deserialize(fs); }
 finally { fs.Dispose(); }
} catch(System.Exception e) { 
 MessageBox(e.ToString()); 

usingではcatchしてないからDeserializeで例外が起きた場合は外側のtry-catchブロックが補足する。
問題になるとすればcatchの段階でまだ開いている状態のfsにアクセスしたい場合。
Deserializeとfs.Dispose()の両方で例外が起きた場合。
こういったことが気になるなら、usingを使わずtry-catch-finally構造に変える。
743デフォルトの名無しさん:2008/06/05(木) 16:50:38
蒸し返してすまんが、CurrentDirectoryでひとこと。
コンソールアプリならカレントディレクトリは普通に使う。
GUIの場合は意味がない。
exeのあるディレクトリがカレントディレクトリであると考えているなら明らかに間違い。

Directory.GetCurrentDirectory() + "\\" + "data.xml", 
この部分は余計。相対パスならカレントからの相対パスになるので
"data.xml"
だけでで十分。
744727:2008/06/05(木) 17:04:26
>>742
分かりやすい説明ありがとうございました。

>>743
参考になりました。ありがとうございます。
745デフォルトの名無しさん:2008/06/05(木) 17:21:07
>>742
>Deserializeとfs.Dispose()の両方で例外が起きた場合。
キャッチされるのは後からの例外の方だったよね?
746デフォルトの名無しさん:2008/06/05(木) 20:00:17
質問させていただきます。
フォーム上に画像を表示するプログラムを書きたいのですが、
イベントとして、フォームが表示されたと同時に描画したいのです。
このような場合、イベントはどのように記述すればよいのでしょうか。
もしくは、イベントを使わない方法があればそちらもご教授ください。
747デフォルトの名無しさん:2008/06/05(木) 21:01:16
GUIのプログラムの中で
GUIとは何の関係もないオブジェクトAが居ますが
デバッグ用途でGUIのとあるメッセージウィンドウに文字列を出力させたいとします。
オブジェクトAのようなGUIに無関係なオブジェクトが大量に居るような場面で
それらの出力文字列をGUIのとあるメッセージウィンドウに文字列を出力させたいわけですが。
どうやってそのオブジェクト達とメッセージウィンドウ間をインターフェイスさせればよいでしょうか?
Qtをちょこっと触ったことがあるのですが、その場合はsignal/slot機構を使って、わりと簡単に実現できたのですが
C#の場合はsignal/slotの代わりにeventを使うことになるかと思います。
eventの型となるdelegateをどこで宣言するかなぁ〜と考えるのですが、
どこにも宣言したくありません。
どうすればいいですか?
748デフォルトの名無しさん:2008/06/05(木) 21:50:02
メッセージ表示するもしくは通知するTraceListenerでも作ればいいんでない?
749デフォルトの名無しさん:2008/06/05(木) 22:16:43
>>735ってどういう意味?
750デフォルトの名無しさん:2008/06/05(木) 23:15:02
>>743
逆に言えば、カレントディレクトリがexeのあるディレクトリであることを
プログラム側で保障すれば問題ないということでもある

まあ、その場合でも相対パス使うだろうから、
Directory.GetCurrentDirectory()は不要だけどな
751デフォルトの名無しさん:2008/06/05(木) 23:18:57
>>750
Open/Saveダイアログを使うとカレントディレクトリが動いたりしなかったっけ。
以前はまった記憶がある。
752デフォルトの名無しさん:2008/06/05(木) 23:37:16
ていうか、おまいらデリゲート使うときに毎回宣言してるの?
自分はDelegate<Result,Param1>とか宣言しといて全部それつかってる。
おかげでFuncとどう整合性とろうか思案中だがなぁorz
753デフォルトの名無しさん:2008/06/05(木) 23:42:08
イベントハンドラはEventHandler<TEventArgs>使え
754デフォルトの名無しさん:2008/06/05(木) 23:59:49
outやrefに対応できないんだよな…
755デフォルトの名無しさん:2008/06/06(金) 00:05:31
class Reference<T> { public T Value { get; set; } }
こんなの作っとけば
756750:2008/06/06(金) 00:07:58
>>751
確かに、FileDialog使うときは

RestoreDirectory = true

にしないとまずいな
てか、既定値がfalseとかありえん
757デフォルトの名無しさん:2008/06/06(金) 00:48:22
>>755
世の中そうもいかんこともあるのよ。
リモーティングとか。
758デフォルトの名無しさん:2008/06/06(金) 01:29:58
>>752
まさにこういう使い方をするために、宣言時に識別子を省略出来たらいいのに。
759デフォルトの名無しさん:2008/06/06(金) 04:03:17
>>754
それは知恵が足りないだけ。
できるよ。
760デフォルトの名無しさん:2008/06/06(金) 07:08:25
マルチプルアイコンを含むIconインスタンスから、各アイコンを取得したいのですが、
どうすればよいのでしょうか。
761760:2008/06/06(金) 07:46:58
自己解決しました。
Icon.Save()でバイナリデータを得て、それを分割した上でIconコンストラクタに与えればいいですね。
もっとスマートな方法がありそうな気もしますが、とりあえずそれでいきます。
762デフォルトの名無しさん:2008/06/06(金) 09:30:47
コンストラクタでSize指定だけはできる
763747:2008/06/06(金) 12:09:04
>>753
>>イベントハンドラはEventHandler<TEventArgs>使え

どうもです。
こういうのがあるんですね。
ただこれだとEventArgsカスタムクラスをどこかで定義しなければならないです。
EventArgsカスタムクラスに依存するのがなんだかシャクなんで。

たとえば
talkerインターフェイスを用意するとして

interface ITalkter{
        public delegate void printf(string fmt,prams object[] args);
}

こういうことができたら、
ITalkerを継承したクラスを作ってしまえばそれでOKなんですけど
ITalkerインターフェイスに依存するのは納得できるんで。
ただ、interfaceでは型宣言出来ないらしく。。。
なんで出来ないんだろう。。。。
ちなみにtalkerは大量に居ます。
listenerは1個だけっていう想定。

何かいい方法はありませんか。
764747:2008/06/06(金) 12:19:13
もしくは
public event void delegate(object sender,params object[] arg) printf;
のような感じで
名無しの型を宣言すると同時に変数定義みたいなことができたらそれだけでいいですね。
こういうことって可能なんでしょうか?
765デフォルトの名無しさん:2008/06/06(金) 12:25:10
interface ITalkter{
 string PrintString{ get; }
}

こうとか

interface ITalkter{
 void Print(Action<string> print);
}

こうとか

interface ITalker{
void Print(IListener listener);
}

こうとかじゃだめなの?
766デフォルトの名無しさん:2008/06/06(金) 12:46:17
DebugListener/TraceListenerで十分だと思うけど。
767デフォルトの名無しさん:2008/06/06(金) 13:27:34
>>763
talkerの役割がよくわからないな。
実際に表示する部分なのか、それともメッセージを発行する元なのか?
それからdelegateをeventと1対1で作らなければいけないとか思ってないか?
768デフォルトの名無しさん:2008/06/06(金) 14:49:41
>>761
P/InvokeでExtractIconExとか。
769デフォルトの名無しさん:2008/06/06(金) 17:41:02
EventHandler<TEventArgs>を使いたくないのだったら、普通にAction<T>でも使うってのは?
オブジェクトAの中に
public event Action<string, object> printf;
を実装する。

これならカスタムクラス使わんで済むでしょ。
770デフォルトの名無しさん:2008/06/06(金) 23:54:33
>>747>>764
デリゲートを使うにはデリゲート型が事前に作成されている必要がある
また、匿名メソッドやラムダ式を使った場合でも、型が自動的に作成されることはない

なので、君がやりたいと考えていること(デリゲートを使用して云々)は恐らく不可能

まあ、本来の目的からすると、出力タイミングをGUI側で制御するなら>>765
オブジェクト側で制御するなら

interface ITalker {
  void SetPrintCallback(Action<string> print);
}

もしくは

interface ITalker {
  void SetListener(IListener listener);
}


>>769
void (object sender, T e) where T : EventArgs

に合致しないデリゲートをイベントにするのはやめれ
# MSのガイドラインなんて知らん、というなら止めはしないが

さらに言うと、
・デリゲート型の名前のサフィックスは EventHandler
・第2パラメータの型(上記 T)の名前のサフィックスは EventArgs
・2つのパラメータ名は上記の通り(sender, e)
771デフォルトの名無しさん:2008/06/07(土) 00:33:51
正直msのガイドラインなんか知ったこっちゃ無い
772デフォルトの名無しさん:2008/06/07(土) 00:55:01
なら使うな
773デフォルトの名無しさん:2008/06/07(土) 06:58:46
ここはCompact Frameworkの質問はおk?
774デフォルトの名無しさん:2008/06/07(土) 07:01:03
だから使わないんだって
775デフォルトの名無しさん:2008/06/07(土) 07:01:24
C#にからめればOK
776デフォルトの名無しさん:2008/06/07(土) 07:03:46
Compact FrameworkでWindows Mobile用2chブラウザを作ってるんだが、
スレ一覧にListViewを使ってるんだ。
ListViewItemCollectionにAddRangeが無くてforeachでスレデータ回してアイテム作ってAddさせてるんだが
どうにも低速なんだ。
AddRangeの代わりになるものは回してAdd以外ないだろうか。
777デフォルトの名無しさん:2008/06/07(土) 07:19:17
BeginUpdateやってる?
778デフォルトの名無しさん:2008/06/07(土) 07:20:04
>>777
やってる。
779デフォルトの名無しさん:2008/06/07(土) 07:53:10
ListViewへの追加はPCでもかなり遅いからなあ
1000件くらいになりそうなときはVirtualModeにしてるけど、Compactじゃ使えないのか
780デフォルトの名無しさん:2008/06/07(土) 07:55:15
>>779
2chの板のスレ一覧データだし、700項目くらいPCでやった場合ドパァッって表示されるんだがなあ。
VirtualはCFからは使えないな。
781デフォルトの名無しさん:2008/06/07(土) 08:36:09
自分で擬似的なものを描画するのが一番速いのかな
782デフォルトの名無しさん:2008/06/07(土) 08:56:03
MSのガイドライン無視したクラスライブラリって見てて恥ずかしい
783デフォルトの名無しさん:2008/06/07(土) 09:15:58
Formの上でGridクラス作ったが、20万件でも一瞬で追加・表示されるようになった(´・ω・`)
784デフォルトの名無しさん:2008/06/07(土) 09:17:25
ListViewってMSの中の底辺プログラマが作ったんだろうか
785デフォルトの名無しさん:2008/06/07(土) 11:12:31
作ったのがだいぶ昔のことで、
ここまで大量のデータが取り扱われるとは考えられなかったからだと思う。
786デフォルトの名無しさん:2008/06/07(土) 11:29:20
描いた円を上キーでジャンプさせるにはどうすればいい?
787デフォルトの名無しさん:2008/06/07(土) 11:41:02
意味が分かりませんがKeyDownイベントでそういう処理書けばいいんじゃないでしょうか
788デフォルトの名無しさん:2008/06/07(土) 11:54:23
いや、そのKeyDownの中身が分からなくって
789デフォルトの名無しさん:2008/06/07(土) 11:56:34
KeyDownイベントの中身で円を描く場所を変えて描画処理に投げる
790デフォルトの名無しさん:2008/06/07(土) 11:56:35
円をどうやって描いてるかジャンプってどういう意味なのか分からなくって
791デフォルトの名無しさん:2008/06/07(土) 11:58:45
プログラミングが下手な人って質問も下手だよね
792デフォルトの名無しさん:2008/06/07(土) 12:00:20
ダブルバッファにしろよ
画面ちらつくぞ
793デフォルトの名無しさん:2008/06/07(土) 12:20:11
上向きの初速を与えて、一定の下向きの加速度を受けながら運動するようにしたい。
例えば、20進んで一瞬停止して、15進んで一瞬停止して、の繰り返しでいいのか
794デフォルトの名無しさん:2008/06/07(土) 12:26:27
v = v0 + gt と言う式を当てはめれば良いだけじゃん
795デフォルトの名無しさん:2008/06/07(土) 12:32:28
↑アホ
796デフォルトの名無しさん:2008/06/07(土) 12:37:46
tをどうすれば?
797デフォルトの名無しさん:2008/06/07(土) 12:40:12
タイマーでも使ってろ
798デフォルトの名無しさん:2008/06/07(土) 12:48:39
変数tを入れれば位置まで出せる公式があったろ
リアルにやるならtをタイマーを使って現実時間とぴったり合わせりゃいい
799デフォルトの名無しさん:2008/06/07(土) 14:58:07
加速度を9.8/sずつ減らせばいいんでね?
800デフォルトの名無しさん:2008/06/07(土) 15:15:33
p0 : 初期位置
v0 : 初期速度
g : 重力加速度(約-9.8)
p(t) : 初期時刻からの経過時間tの時の位置

p(t) = p0 + v0*t + 0.5*g*t*t
801デフォルトの名無しさん:2008/06/07(土) 15:23:50
つかいつの間に重力加速度の話になったんだ
802デフォルトの名無しさん:2008/06/07(土) 15:44:46
>>800
それをwhileに入れれば出来そうだけど、ジャンプ中も左右移動したい
803デフォルトの名無しさん:2008/06/07(土) 15:46:52
なんかこのスレ方向性分かんなくなってきたなw
804デフォルトの名無しさん:2008/06/07(土) 15:55:23
ジャンプ中左右移動したいなら

new Timer( () =>
{
 位置更新
 描画
});

void KeyDown(...)
{
switch(key)
case ←:
   左にちょっとずらす
...
}
こんな感じで出来るのかな
普通は
while(true)
{
入力ゲット
 位置更新
 描画
 時間が来るのを待つ
}
こんな感じなのかな
よく知らん
805デフォルトの名無しさん:2008/06/07(土) 16:46:12
>>802
物理的に表現したいならこんな感じです

a:加速度 v:速度 p:位置 dt:微小時間
とすると、こういう微分方程式が成り立ちます

v(t)/dt = a
p(t)/dt = v(t)

dtはゲームなら1フレームの時間(約16.7ms)と考えるのが普通です
この式を例えば前進差分(ぐぐってね)で微分項を近似するとこうなります

( v(t+dt) - v(t) ) / dt = a
( p(t+dt) - p(t) ) / dt = v(t)

t+dt時間における速度と位置を知りたいので式を変形します

v(t+dt) = dt * a + v(t)
p(t+dt) = dt * v(t) + p(t)

この式をゲームのプログラムなんかではこう表現します

void Update( float dt )
{
 velocity += dt * acceleration;
 position += dt * velocity;
}

で、左右移動したいとき、というのは速度に値が加えられている状態なんで、
velocityに対して基本速度を加えておけばOKです
806デフォルトの名無しさん:2008/06/07(土) 16:51:23
って書き終わって凄く後悔した
スレ違いにもほどが
807デフォルトの名無しさん:2008/06/07(土) 19:23:48
>805はY方向だけなので、Xは別にしないとだめだぞ。
横への移動を表す加速がY方向へは関係しないとき、XとYは独立して扱えるからよい子のみんなは気をつけよう。
808デフォルトの名無しさん:2008/06/07(土) 19:40:07
気をつけるまでも無く自明だと思うのですが!
809デフォルトの名無しさん:2008/06/07(土) 21:07:23
型を書いてないからアレだけど
ベクトル型を使うのが普通なんで
810デフォルトの名無しさん:2008/06/08(日) 10:51:16
過疎
811デフォルトの名無しさん:2008/06/08(日) 11:54:09
IDEの使い方に関するおすすめの書籍は?
812デフォルトの名無しさん:2008/06/08(日) 17:17:44
ListViewで特定のカラムだけ非表示にすることは出来ますか?
リストには追加するのに非表示にするという、一見無意味な操作なのですがそうしたいのです。
813デフォルトの名無しさん:2008/06/08(日) 18:36:00
>>812
ListViewのColumnHeaderで特定のカラムだけWidth=0にすることが出来ませんか?
リストには追加するのに非表示にするという、一見無意味な操作なのですがそうしたければそうすることもできるでしょう。
814デフォルトの名無しさん:2008/06/08(日) 19:05:09
>>813
非表示にしたいカラムだけ幅調整不可って出来ますか?
Widthを0にしただけでは幅調整されて見えてしまうので・・・。
815デフォルトの名無しさん:2008/06/08(日) 20:00:43
ListViewItemから派生させたクラスで持つようにして
そのオブジェクトをListViewに追加すれば?
816デフォルトの名無しさん:2008/06/08(日) 20:12:26
つかTagで十分だろ
817デフォルトの名無しさん:2008/06/08(日) 21:27:03
>>815
なるほど。ありがとうございます。
>>816
Tagは使ったこと無いので調べてきます。
ListViewの方ではなくListViewItemの方ですよね?
818デフォルトの名無しさん:2008/06/08(日) 22:33:03
ColumnResizingとかそんな感じのイベントあるから、
そこで非表示にしたいカラムが幅調整されそうになったら制限すればいい。
819デフォルトの名無しさん:2008/06/08(日) 22:34:14
>>818
なるほどありがとうございます。
Tagを使ったものがまさに用途にあった使い方でした。
820デフォルトの名無しさん:2008/06/09(月) 10:09:01
821デフォルトの名無しさん:2008/06/09(月) 12:07:21
メソッド呼び出し中にキー入力を受け取るにはどうすればいいですか?
822デフォルトの名無しさん:2008/06/09(月) 12:16:03
>>821

メソッド呼び出しを別スレッドにして、メインスレッドでキー入力を
待てばいいんじゃない? 全然はずしてたらご免。
823デフォルトの名無しさん:2008/06/09(月) 12:17:01
モードレスダイヤログ?

全然外してるかも。
824あにす ◆sGTL1yK0.6 :2008/06/09(月) 18:46:26
DoEvents()?
外してるかな…。
825デフォルトの名無しさん:2008/06/10(火) 05:54:09
>>702
for (int i=0; i<1000; i++) Hoge((a) => a + 1);
のようなコードは次にように最適化されるようだ。
HogeDelegate f = null;
for (int i=0; i<1000; i++) {
 if (f == null) { f = (a) => a + 1; }
 Hoge(f);
}
826デフォルトの名無しさん:2008/06/10(火) 06:30:01
>>825
ということは>>702はデマってことか
827デフォルトの名無しさん:2008/06/10(火) 07:01:43
デマというかもうちょい境界線が上なんだろうな。
828デフォルトの名無しさん:2008/06/10(火) 11:32:48
質問
以下のようにListのSyncRootで排他処理を行っている最中に
Listの実体を入れ替えた場合、
この排他でLock開放待ちをしていたほかのスレッドはどうなるのでしょうか?
lock (((ICollection)(mylist).SyncRoot)[

if(xxx){
mylist = new List();
}
}
829デフォルトの名無しさん:2008/06/10(火) 12:23:17
とりあえずそんなキモいことするな

mylistの置き換えより先に別スレッドがmylist.SyncRoot取得してたら古い方でロック待ちするし
置き換え後にSyncRoot取得したら新しい方でロック待ちする
古い方でロック待ちに入ったらロック取得したスレッドのlockステートメント終了でロックに入る
新しい方ならロックされてないから待たないでそのままロック取得するだろう
830828:2008/06/10(火) 12:45:29
やっぱり駄目ですよね。
コレでは排他処理の意味をなさない。

わかりました!!有難う御座います。
831デフォルトの名無しさん:2008/06/10(火) 21:33:47
ListViewのTagで思い出したが、なんでシリアル化してもTagは保持されないのですか?
832デフォルトの名無しさん:2008/06/10(火) 21:51:45
何が入ってるか分からないから
保持しても意味がないものが入ってるかもしれないから
833デフォルトの名無しさん:2008/06/10(火) 22:53:07
あまり納得できんが、そういうことなんだと納得しておきます。
834デフォルトの名無しさん:2008/06/10(火) 23:06:12
ADO.NET 2.0で、System.Data.SqlClientを使って、バッチ処理ってどうやんのが普通なの?
なんかSqlCommandSetってのが昔はあったらしいけど、今は隠されてしまったみたいだし、
ていうか、
var cmd = new System.Data.SqlClient.SqlCommand();
cmd.CommandText = "begin transaction;" +
"insert into t values(1,2,3);" +
"insert into t values(2,3,4);" +
....
"commit transaction;";
みたいにカンマで区切っただけのSQL文でも一応できたみたいなんだけど、
C#/ADO.NET2.0/SQL Serverでほかの人はどういう風にバッチ処理してるのか知りたいです。
835デフォルトの名無しさん:2008/06/10(火) 23:19:11
ストアドプロシージャです。
836デフォルトの名無しさん:2008/06/10(火) 23:21:23
リンクの冒険
837デフォルトの名無しさん:2008/06/10(火) 23:30:44
>>835
お返事ありがとうございます。
ところで、クライアント側でユーザーが複数項目を選んで、
編集して、それで更新みたいな処理の流れだと、可変引数が
使えないストアドでは対応しきれないのでわないでしょうか?
838デフォルトの名無しさん:2008/06/10(火) 23:40:52
>>836
えーと……ゼルダの伝説?

それはともかく、C#のバージョンが分からんが3.0ならLINQがおすすめ
GUIでD&Dするだけでエンティティクラスが作れて、デフォルトでトランザクション処理

LINQ to SQLがSQL Server限定なのがあれだけど
839デフォルトの名無しさん:2008/06/11(水) 14:58:07
>>837
「バッチ処理のパラメータを格納しておくテーブル」を作るという手もある。
そのテーブルにINSERTしてからバッチ用のストアドプロシージャを起動して、
ストアドの中でテーブルを読み込んで、それを元に処理を行う。
結果のサマリーも格納するようにすれば、バッチ処理の履歴も兼ねることができる。
840デフォルトの名無しさん:2008/06/11(水) 20:40:20
C#中でエクセルのファイルを開こうとすると、下記のエラーが発生します。
ちなみに.NET Framework 2.0を使っています。

System.Runtime.InteropServices.COMExeption(0x80040154):CLSID{00024500-0000-0000-C000-000000000046}を含むコンポーネントのCOMクラスファクトリを取得中に、次のエラーが発生しました。:80040154
3台あるPC(XP)で1台で起こりますがその原因が分かっておりません。
作成したプロジェクトのbin\release以下には3個のCOMと関係がありそうなDLLがあります。
・Interop.Excel.dll
・Interop.Microsoft.Office.Core.dll
・Interop.VBIDE.dll
これら3個を
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe
を使って登録しても結果は同じです。
どういった原因が考えられるでしょうか?

841デフォルトの名無しさん:2008/06/11(水) 21:21:57
そこにはExcelがインストールされていないなんてオチじゃないよな。

「00024500-0000-0000-C000-000000000046 80040154」でググって
最初に出てきたところに書いてあった事例がまさにそうだっただけだけど。
http://forums.msdn.microsoft.com/en-us/netfxbcl/thread/5a338c18-b2e5-44b5-b15a-530d99a34656/
842840:2008/06/11(水) 21:26:24
確認させていただきたいのですが、
Excelがインストールされていない環境では、COMを通じたエクセルファイルの操作というのはやはり出来ないものでしょうか?
というのは、
動作確認をした3台のうち
1台にだけExcelをインストールしていたつもりだったのですが、実際には2台にインストールされており、
上記の
System.Runtime.InteropServices.COMExeption(0x80040154):CLSID{00024500-0000-0000-C000-000000000046}を含むコンポーネントのCOMクラスファクトリを取得中に、次のエラーが発生しました。:80040154
このエラーはエクセルがインストールされていないパソコンでだけ起こっていました。
レジストリのCLSIDに無理やりエクセルを登録たところエラーが変わって
System.IO.FileNotFoundException: CLSID {00024500-0000-0000-C000-000000000046} を含むコンポーネントの COM クラス ファクトリを取得中に、次のエラーが発生しました: 80070002。
   場所 NFSAutoGui.Tettou.product(String path)
こういうことになってしまいました。
FileNotFoundExceptionってようするにExcel.exeが見つかりませんよ、ということかと思いますが。

ということで
Excel.exeがインストールされていない状態では、COMを通じたエクセルファイルの操作というのはやはり出来ないものでしょうか?
843デフォルトの名無しさん:2008/06/11(水) 21:31:00
>>842
そりゃ、できんわな。それができたら、みんなExcel買ってくれなくなってMSが困っちゃう。
844デフォルトの名無しさん:2008/06/11(水) 21:36:37
>>841
>>843
どうも。。。
インストールしてないつもりのPCで動いたと思ってたんで動くかと思っていました。
アホ過ぎ。

ところで
Excelのバージョン10が開発マシンに入っております。
COMの参照設定で、Microsoft Excel 10.0 Object Library のバージョン1.4を設定しているのですが、
これで配布した場合って、Excelのバージョン10.0が入っていないと動かないんですかね?
Excel 2007しか入っていないようなPCでは動かないんですか?
845デフォルトの名無しさん:2008/06/11(水) 21:43:55
>>842
だって、そのExcelファイルの操作って、
Excelが持っている機能を呼び出しているだけだ。
普段目にするUIはExcelの1つの顔にすぎない。
846デフォルトの名無しさん:2008/06/11(水) 21:59:28
>>844
YES
847デフォルトの名無しさん:2008/06/11(水) 22:01:05
解放忘れとかやりまくってそうだな
848デフォルトの名無しさん:2008/06/11(水) 22:10:55
こんなこと言ってる奴がまともに作れてるわけないだろ

でバージョン依存したくないならせめてVB.NETにしとけ
849デフォルトの名無しさん:2008/06/11(水) 22:15:41
WSHのVBSとか呼び出すのが楽だよ
850デフォルトの名無しさん:2008/06/11(水) 22:19:02
>>845
そういうことですね。
>>846
了解しました。
>>847
一応タスクマネージャのプロセスタブにEXCELは居ないので大丈夫かと...

ところで、
開発マシンにEXCEL10しか入っていませんが、
その他のバージョンのEXCELも扱いたい場合に必要になってくるのが
PIAとかいうものなのでしょうか?
851デフォルトの名無しさん:2008/06/11(水) 22:40:52
YES
852デフォルトの名無しさん:2008/06/11(水) 22:42:04
あんたは質問を有料にしたいわ
853デフォルトの名無しさん:2008/06/11(水) 23:58:05
DateTime型のToString()の書式設定はどんな環境の場合に変わるんでしょうか?
たとえば("d")ならカルチャによって変わりますが、
カスタム書式の("yyyy/MM/dd")も環境によって変わるようです。
どんな環境で変わるんでしょうか??
854デフォルトの名無しさん:2008/06/12(木) 00:37:13
>>853
質問の意味がよくわからないけど「カルチャが異なる環境で変わる」ということが聞きたいのかな。
CurrentThreadのCurrentCultureとかCurrentUICultureとかを色々変えながら動かしてみると
わかりやすいかもしれない。
わかりにくいかもしれない。
855デフォルトの名無しさん:2008/06/12(木) 00:37:53
カルチャによって変わるよ。

"/" はカルチャ依存の日付区切り文字だし、
この世には和暦とかヒジュラ暦とかあるだろ。
856デフォルトの名無しさん:2008/06/12(木) 00:47:15
>>854-855
ありがとうございます。
"/"はカルチャ依存なのですね。
カスタム書式なら"/"も表示してくれると思っていたのですが、それすらも期待してはいけないのですね。
自分の環境では再現できない&相手の環境がよくわからないので質問しました。
では"yyyyMMdd"ならどの環境でも期待通り"20080612"になることを前提にしていいのでしょうか?
857デフォルトの名無しさん:2008/06/12(木) 01:11:03
>>856
>>855の最後の行を読んで下さい><

DateTimeFormatInfo.InvariantInfoわたしとけばいいよ。
858デフォルトの名無しさん:2008/06/12(木) 01:17:15
>>856
CultureInfo ci = new CultureInfo("ja-JP", true);
ci.DateTimeFormat.Calendar = new JapaneseCalendar();
Thread.CurrentThread.CurrentCulture = ci;

Console.WriteLine(DateTime.Now.ToString("yyyyMMdd")); // 200612
Console.WriteLine(DateTime.Now.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo)); // 20080612
859デフォルトの名無しさん:2008/06/12(木) 01:17:26
>>857
なるほどありがとうございました!
yyyyでも和暦だと20とかになるんですね。
DateTimeFormatInfo.InvariantInfoで解決しました。
860デフォルトの名無しさん:2008/06/12(木) 01:18:12
>>858
ありがとうございました。勉強してみます。
861デフォルトの名無しさん:2008/06/12(木) 04:18:07
Compact FrameworkのWebBrowserでDocumentTextにHTML設定するとプログレスバーが出てくるのが嫌なんだけど
非表示にする方法はあるだろうか?
それともHtmlView.dllをラップしたほうが賢明だろうか
862デフォルトの名無しさん:2008/06/12(木) 11:14:25
できるだけメモリ使用量を減らすため、
IDisposableを実装したほうが良いクラスの判断でまよっています。

クラスA DataSetをプロパティとして保持
クラスB stringをプロパティとして保持
クラスC byte配列をプロパティとして保持

クラスAはDisposeメソッドを用意してデストラクタから呼び出していますが、
クラスBとCもDisposeを用意したほうが良いでしょうか?

また、stringやbyte配列はDisposeメソッドがないので、どうやってメモリを解放するのかもわからないです。
863デフォルトの名無しさん:2008/06/12(木) 11:38:41
全部IDisposable無用
864デフォルトの名無しさん:2008/06/12(木) 11:48:12
Disposeを実装するのは、自前でネイティブリソースを扱う時か
Disposeを持つクラスをメンバとして持つ時だけで良い。

それ以外ではメモリの開放はGCにまかせた方が一般的にパフォーマンスは高い。
なんとなくメモリは少ないほうがいいよね的な考えしかないなら逆効果にしかならんよ。

性能を犠牲にしてでもどうしても局所的にワーキングセットの縮小をせまられるのなら
参照をnullにしてGC.Collectを呼び出す。
865862:2008/06/12(木) 12:58:06
>>863-864
ありがとうございます。

なるほど、ではどうしても実装するならクラスAだけで
良いのですね。

Webアプリなのですが、特定のページにアクセスが集中し
使用メモリが大きくなってしまうので、できるだけ解放できるところは
解放したかったのです。

処理終了時にGC.Collectを呼び出すことにします。
866デフォルトの名無しさん:2008/06/12(木) 13:22:05
GCでオブジェクトが回収されるときの動作は
1 デストラクタ(ファイナライザ)があればそれを実行する
2 メモリの回収
Disposeは1を代行するもので、メモリの回収はあくまでもGCが行う。
867デフォルトの名無しさん:2008/06/12(木) 14:22:22
質問
RichTextBoxに画像を挿入したいんですが、無理?
868デフォルトの名無しさん:2008/06/12(木) 14:27:55
とりあえずクリップボード越しなら可能
869デフォルトの名無しさん:2008/06/12(木) 14:35:42
>>868
サンプルコード貼ってある所知りませんか?
870デフォルトの名無しさん:2008/06/12(木) 14:41:09
検索エンジン様が知ってることを知ってる
871862:2008/06/12(木) 17:31:00
>>866
ありがとうございます!
だいぶ勘違いしていました。
デストラクタでDispose呼んでも意味ないのですね。
872デフォルトの名無しさん:2008/06/12(木) 23:05:15
え、デストラクタとGCは関係ないんだと思ってた…。
じゃあデストラクタが実行されるタイミングってスコープを抜けた瞬間とは限らないの?
873デフォルトの名無しさん:2008/06/12(木) 23:10:28
C#でデストラクタ?
874デフォルトの名無しさん:2008/06/12(木) 23:13:38
>>872
全然関係ない。スコープと一致させたいときにはusingを使わないといけない。
逆に言えばそれがIDisposeとusingの存在意義。

>>873
まあC# 1.0のころはデストラクタって言っていたはずだし、いいじゃないか。
875デフォルトの名無しさん:2008/06/12(木) 23:16:20
DisposeとGCも全く関係ないよ
種も仕掛けもない本当にただの普通のメソッド
876デフォルトの名無しさん:2008/06/12(木) 23:18:11
あ、そっか。C#はデストラクタなんてほとんど書かないや。
877デフォルトの名無しさん:2008/06/12(木) 23:20:35
本当にどうしてもどうしても必要な場合でなければむしろ書いてはいけない
878デフォルトの名無しさん:2008/06/12(木) 23:56:46
IDisposeを実装するときの基本パターン

class DispBase : IDisposable {
 ~DispBase() { Dispose(false); }
 public void Dispose() { Dispose(true); System.GC.SuppressFinalize(this); }
 public virtual void Dispose(bool disposing) {
  if (disposing) { }
 }
}

GCとの関係といえばこの命令だけ。
System.GC.SuppressFinalize(this);
後片付けが終わったからファイナライザは呼び出さなくていいとGCに指示している。
これでファイナライザは呼び出されなくなる。
879デフォルトの名無しさん:2008/06/13(金) 00:03:21
パフォーマンスとかメモリとかやたら気にする奴が
こういうでたらめやって事態を悪化させやがるんだよな…

GC呼ぶなんてやめとけよ、特にWebではな…
880デフォルトの名無しさん:2008/06/13(金) 00:05:54
余計な一言はいいから、ね
881デフォルトの名無しさん:2008/06/13(金) 00:07:23
いつでも回収できるメモリは空いていると同じということを理解できるまでには修行が必要じゃて
セッションにでっかいオブジェクトの参照抱え込んだままで、GC.Collect呼びまくるとかやってそう
882デフォルトの名無しさん:2008/06/13(金) 00:08:02
これくらい言っとけばたまたま見かけて疑問を持つ奴が増えて好都合
883デフォルトの名無しさん:2008/06/13(金) 00:12:21
そういやあれ不思議なんだよな。
メモリとか異様に気にするのにセッションとかは湯水のように平気で使うのな。
884デフォルトの名無しさん:2008/06/13(金) 00:21:12
結局、明確にスコープ抜けたときにリソースを即座に解放して欲しいという場合で複数から参照されてる場合には参照カウント的なものが必要になるんだ世根(´・ω・`)
885デフォルトの名無しさん:2008/06/13(金) 00:27:41
COM InteropのRCWがそういう具合になってますね。
もう少しスマートにできなかったものか。
886デフォルトの名無しさん:2008/06/13(金) 18:37:51
ファイル書き込みじのフォーマットのことですが。
下記プログラムを実行すると。
=====================
static void Main(string[] args)
{
    StreamWriter sw = new StreamWriter("test.txt",false,Encoding.GetEncoding(932));
    sw.WriteLine("{0,10} => {1}","ABCD",1234);
    sw.WriteLine("{0,10} => {1}","あいうえ",1234);
    sw.Close();
}
=====================
結果として
=====================
      ABCD => 1234
      あいうえ => 1234
=====================
こういった出力になります。
説明を添えると、
ABCDの前に半角スペース文字6文字
あいうえの前に半角スペース文字6文字。
という出力結果になります。

理想としては、
ABCDとあいうえの右端をそろえたいので
あいうえの前に半角スペース文字2文字が入って欲しいのです。(あいうえは8文字とみなす。)

そのようなことは可能でしょうか?
どのようにすれば可能でしょうか?

887デフォルトの名無しさん:2008/06/13(金) 21:34:01
ttp://unicode.org/Public/UNIDATA/EastAsianWidth.txt

ここに、UnicodeにおけるCJKの表示幅の規定があるから、
適当に文字列の表示幅を計算して残りを埋めれば良い
888デフォルトの名無しさん:2008/06/14(土) 06:42:57
>>886
つまり、いわゆる全角文字を半角文字2文字分として処理したいってことか?
Encoding.GetByteCount()で、各文字コードにおけるバイト数が得られるから、
Shift-JISにおけるバイト数を使ってスペースの文字数を計算すればいいだろう。
こんな感じで。

Encoding sjisEnc = Encoding.GetEncoding(932);
string text = "あいうえ";
string space = new String(' ', 10 - sjisEnc.GetByteCount(text));
Console.WriteLine("{0}{1} => {2}", space, text, 1234);
889デフォルトの名無しさん:2008/06/15(日) 14:35:46
インストーラーの起動条件でJ#2.0再配布パッケージを
必須にする方法教えて下さい。
890デフォルトの名無しさん:2008/06/15(日) 15:12:29
スレ違い
891デフォルトの名無しさん:2008/06/15(日) 17:16:12
いや 殆どC#で一部だけJ#使ってるんすよ…
892デフォルトの名無しさん:2008/06/15(日) 17:17:38
いや、その理屈はおかしいだろ…
893デフォルトの名無しさん:2008/06/15(日) 20:01:44
その発想はなかったわ
ってかVSスレで聞いたら?
894デフォルトの名無しさん:2008/06/15(日) 20:03:22
ほい 逝ってきます。
すまぬかった
895デフォルトの名無しさん:2008/06/16(月) 12:56:58
delegateを使用して(使用しなくても同様のことができればいいのですが・・・)

using System;
using System.Collections.Generic;

delegate int getItem();

class DelegateTest
{
public static void Main()
{
List<int> liList = new List<int>();
getItem a = new getItem(A);
a += new getItem(B);
a += new getItem(C);

liList.Add(a());
}

static void A(){return 1;}
static void B(){return 2;}
static void C(){return 3;}
}

この様なプログラムを走らせてliListに[1,2,3]が入って欲しいのです。
(当然ながらというか、)実際には[3]しかはいりません。
マルチキャストデリゲートにしたのは実行したいメソッドの数が実行時にしか分からず
できればif文分岐を少なくしたいと思ったからなのですが、
やはりメソッドを一つ一つ実行しなければ無理でしょうか?
もしくはメソッドの戻り値をリストにして、そのリストを次のメソッドの引数をリストにして、最後にaddrangeでしょうか?
何か上手いテクニックがあれば、どなたかご教授下さい。
896デフォルトの名無しさん:2008/06/16(月) 13:04:03
普通にgetItemコレクション作ってforeachでList<int>にAddしてけばよくね?
897デフォルトの名無しさん:2008/06/16(月) 13:09:34
デリゲートの引数にコレクション渡してAddしてもらえば?
898デフォルトの名無しさん:2008/06/16(月) 14:14:43
>>895
複数の、戻り値を持つデリゲートを一括で管理したい場合は、
マルチキャスト- ではなく、デリゲートのコレクション/リスト などを使う

例えば、こんなふうに

var funcs = new List<Func<int>> { A, B, C };
var values = funcs.Select(f => f()).ToList();

あと、A,B,Cはvoidじゃなくてintな

>>897
それだと、仕様外の操作(複数追加、Insert、Clear、etc.)まで出来てしまうのであまり良くない
自分しか触らないから何でもいいっていうなら構わないけど
899デフォルトの名無しさん:2008/06/16(月) 15:34:56
add/remove付きのイベントにしてしまえばマルティキャストっぽく見せられるかも
List<getItem> evlist = new List<getItem>();
public event getItem ItemsEvent {
  add { evlist.Add(value); }
  remove { evlist.Remove(value); }
}

this.ItemsEvent += () => 1;
this.ItemsEvent += () => 2;
this.ItemsEvent += () => 3;
evlist.Select(f => f()).ToList();
900デフォルトの名無しさん:2008/06/16(月) 19:01:37
>>897の考え方が一番正当でしょ
コレクションをそのまま渡すんじゃなくて,値を登録するためだけのクラスを作って引数に渡す
901900:2008/06/16(月) 19:05:54
考え方は,ってだけだよ
マルチキャストは使うのはあんまり良くないかも
902895:2008/06/16(月) 20:14:14
皆さんレスありがとうございます。
とりあえずはコレクションを引数に渡すやり方で実装できました。
ラムダ式を使った方法を教えてくださった898,899さんのやり方は
ちょっと理解ができませんでした・・・申し訳ありません。
デリゲートのコレクションは使ったことがないので勉強してみたいと思います。
903デフォルトの名無しさん:2008/06/17(火) 01:28:26
ITfMessagePump(TSFのInterface)をC# Formアプリで使ってる人いる?
メッセージループが競合してどうすりゃいいか、分からんのだが・・・。
904デフォルトの名無しさん:2008/06/17(火) 01:32:33
いません
905デフォルトの名無しさん:2008/06/17(火) 02:39:48
そうか。だよなー。
906デフォルトの名無しさん:2008/06/17(火) 02:53:11
>>903
ご想像通りメッセージループを自前のものに置き換えるしかない。
907デフォルトの名無しさん:2008/06/17(火) 03:09:54
その方法を知りたいな
908デフォルトの名無しさん:2008/06/17(火) 03:26:33
>>907
メッセージディスパッチャに関してはP/Invokeで動くというか、
普通にITfMessagePump::GetMessage[A,W]でメッセージ取ってきて
P/InvokeでDispatchMessageすればおk。
必要ならWinFormのApplicationクラスのソースでも眺めて見れ。
折角公開されたんだし。WPFももう公開されたんだっけ?
WPFアプリケーションでWinFormsを併用するときのドキュメントも参考になるかも。

というかメッセージディスパッチャにWPFのApplicationクラスを使いつつ
WinFormsを表示するのが楽かもしれんな。XP以降専用になっちまうが。

あとはExecutionContextの実装もちゃんとやっておくとベター。
909907:2008/06/17(火) 03:29:53
>あとはExecutionContextの実装もちゃんとやっておくとベター。

SynchronizationContextの間違い。すまそ。
http://msdn.microsoft.com/ja-jp/library/system.threading.synchronizationcontext.aspx
910デフォルトの名無しさん:2008/06/17(火) 03:31:08
ぐあ
909==908ね。
911908:2008/06/17(火) 04:00:28
実際試してみた。WPFのApplicationクラスでWinForms。
一応動くことは動くみたい。
この方法ならWPFのSynchronizationContextが使われるので
SynchronizationContextはそのままでOK、なはず。
---------------
// PresentationFramework.dll
// System.Windows.Forms.dll
// WindowsBase.dll
using System;
static class Program
{
  [STAThread]static void Main(){ new CustomApplication().Run(); }
}
public class CustomApplication : System.Windows.Application
{
  protected override void OnStartup(System.Windows.StartupEventArgs e)
  {
    base.OnStartup(e);

    var form = new System.Windows.Forms.Form()
    {
      Width = 640,
      Height = 480,
      Text = "Test Window",
    };
    form.Disposed += (_o, _e) => this.Shutdown();
    form.Show();
  }
}
912デフォルトの名無しさん:2008/06/17(火) 04:03:10
>>908
ありがと。
Application.csは見ていて、FPushMessageLoopでGetMessageWしてるのは確認したんだが、
ThreadContextの処理と整合性を取りつつも、
ITfMessagePump::GetMessageする確実な手段が分からなくてね。

ThreadContext周りの処理はinternal/privateがひしめいていて、
うかつに手を出せないし、お手上げ状態。

WPFは要件的に採用は厳しいかな。

いずれにせよ、overrideなり、Filter的なものでGetMessegeを自前の処理を行う仕組みはなさそうだね。

>普通にITfMessagePump::GetMessage[A,W]でメッセージ取ってきて
>P/InvokeでDispatchMessageすればおk。
おkな理由を教えてもらえると嬉しいな。
913デフォルトの名無しさん:2008/06/17(火) 04:24:01
>>912
>おkな理由を教えてもらえると嬉しいな。

PresentationFramework.dllが中でやっていることがまさにそれだから、で説明になる?
System.Windows.Threading.Dispatcher.PushFrameImplおよび
System.Windows.Threading.Dispatcher.GetMessageと全く同じことをすれば動く。
で、納得してもらえるんだろうか……
914デフォルトの名無しさん:2008/06/17(火) 10:36:47
たとえばNetworkStreamのBeginReadでAsyncCallbackを指定したとする。

このコールバック中にEndReadで例外が発生したらアプリが強制終了してしまう。

この例外をメインスレッド、少なくとも呼び出したスレッドで処理するにはどうすればよろしいでしょうか?
915デフォルトの名無しさん:2008/06/17(火) 10:42:52
例外を補足できない?
916デフォルトの名無しさん:2008/06/17(火) 14:27:34
>>914
Windowsアプリなら、Control.BeginInvokeでEndRead呼べば
発生する例外もメインスレッドの管轄になるはず
ただ、例外チェインの最後のエラーしか取れないかも

コンソールアプリならしらね
917デフォルトの名無しさん:2008/06/18(水) 10:06:15
xmlファイルからデータを取得する方法について教えてください。

下記のxmlファイルtest1.xmlを作成しました。
test1.xml
 <?xml version="1.0" encoding="utf-8" ?>
  <Items>
   <Item ID="001">
    <Name>aaaa</Name><Age>10</Age>
   </Item>
   <Item ID="002">
    <Name>bbb</Name><Age>20</Age>
  </Item>
 </Items>

test1.xmlのデータを下記のプログラムで読み込みました。
001  XmlDocument xmlDoc = new XmlDocument();
002  xmlDoc.Load("c:\\test1.xml");
003
004  string wID = "002";
005  XmlNode xmlNode = xmlDoc.SelectSingleNode("//Items/Item[@ID='" + wID + "']");
006  string wName = xmlNode.SelectSingleNode("//Name").InnerXml;
007  string wAge = xmlNode.SelectSingleNode("//Item/Age").InnerXml;

私の予想ではwNameには"bbb"、wAgeには"20"が入ると思っていたのですが
実際にはwNameには"aaa"、wAgeには"10"が入ります。

プログラムの005行目の処理でxmlNodeには確かに<Name>bbb</Name><Age>20</Age>が抽出されています。
006-007行目で、そこから更に//Nameを抽出したのにwNameに"bbb"が入らず"aaa"が入ってしまうのは何故ですか?

また,このような絞込みっぽい処理を行うには、どのようにすれば良いでしょうか。
918デフォルトの名無しさん:2008/06/18(水) 10:10:56
そこで // 使っちゃ駄目だろ
919917:2008/06/18(水) 10:17:43
>>918
Σ(゚д゚lll)
//はずしたら上手くいきました。

なぜこういう事になるのか勉強して出直してきます。
ありがとうございました。
920デフォルトの名無しさん:2008/06/18(水) 19:16:35
javaばっかりでいつも不思議に思っているんですが、
キーワードでas base isとかがかぶったらどういう回避方法があるんでしょうか。
921デフォルトの名無しさん:2008/06/18(水) 19:21:07
何を言いたいのか良く分からん
922デフォルトの名無しさん:2008/06/18(水) 19:28:48
@as @base @is
923デフォルトの名無しさん:2008/06/18(水) 19:36:16
ソース上で既に使っていて、キーワードとかぶっているときはどうなるんでしょうか。
またソースに手を入れて変更しないとダメなんでしょうか。
924デフォルトの名無しさん:2008/06/18(水) 19:51:53
1.0から3.0までで変数名に使えないキーワードは増えてなかったと思うが
925デフォルトの名無しさん:2008/06/18(水) 20:38:42
c, javaのソースからc#に移植というか少し手を入れるときキーワードの問題が発生しませんか?
特にc#は独自のキーワード名が多いみたいですけど。
926デフォルトの名無しさん:2008/06/18(水) 20:41:35
勝手な拡張もいいんですけど、もとのソースの関数名がas, in, baseとかだとどうするんでしょうか?
関数名のAPIの方を変更できないし泣きませんか?
そうするとC#で作る気力も無くなるんですけど。
927デフォルトの名無しさん:2008/06/18(水) 20:43:58
C#はjavaじゃないから嫌いだとか
子供に生まれてこなくて良かったとか言い出す奴らは
来てもらわなくてもいいよ
928デフォルトの名無しさん:2008/06/18(水) 20:48:49
いや、そういうことじゃないんですけど。
まともにプログラミングの話を出来ないなら、別にいいですよ。
噂どおり、C#の人はC++厨房と変わらないようですねw
929デフォルトの名無しさん:2008/06/18(水) 20:53:56
asとかを使いたければ@asとしてくれ
他言語からの移植なんてそう簡単にはいかんよ
930デフォルトの名無しさん:2008/06/18(水) 20:54:39
typedefとか#defineが欲しいといいたいのかな?泥沼だと思うがね。
同じ言語の世代間の違いならコンパイルオプションや
pragmaのようなコンパイル指令で逃げるのだろうけど、
他言語からの場合は良識に任せるしかないな。
移植を前提にしたコードでbaseとかinとかselfとか変数に
使ってたらそういう名前を使った奴がアホだろ。
931デフォルトの名無しさん:2008/06/18(水) 20:56:23
簡単なことだし、ここでちゃんと教えればすむことなのに、「C#の奴はやっぱり変人しかいないよ」とか噂を流される方がいいのかな?
まあ、>>927みたいなしきり屋がいるようなところじゃ、こっちの方がよくわかんないけど。

ここでは>>927みたいなしきり屋に従わなければいけないのですか?
932デフォルトの名無しさん:2008/06/18(水) 20:58:36
伊武雅刀の「子供達を責めないで」のオマージュだろね。
フルすぎるネタで若い子にはわからないぞ;;
933デフォルトの名無しさん:2008/06/18(水) 21:05:04
>>931
はいはい、とっとと噂を流す仕事に戻ってね。
934デフォルトの名無しさん:2008/06/18(水) 21:05:46
これ聞いて落ち着け
ttp://jp.youtube.com/watch?v=YaCkfvm3Oyw
935デフォルトの名無しさん:2008/06/18(水) 21:16:13
>>930
Cならともかく、C#みたいなしんまい言語を前提にコードかけるかよw
in selfとかをキーワードに設計する方が多言語からの移植を考えないようなアホじゃないのか。
おまえはいつも、次の言語のキーワードとぶつからないように考えながら書いてるのか?アホはおまえだなw
936デフォルトの名無しさん:2008/06/18(水) 21:18:57
>>933
Javaの世界ではC#の奴はめちゃ嫌われてるよ。
演算子オーバーロード―がどうとかうるさいしww
VBほどじゃないけど(笑)
937デフォルトの名無しさん:2008/06/18(水) 21:21:33
それをC#のスレで言って何がしたいのか分からん
嫌われてるからJavaやれってか?
そんな気を使わなくてもC#一筋なやつの方が少ないだろ
938デフォルトの名無しさん:2008/06/18(水) 21:26:14
C#一筋で食っていけるほど仕事がないな。
939デフォルトの名無しさん:2008/06/18(水) 21:26:54
Javaの新機能はほぼ全てC#のパクリなのにな
940デフォルトの名無しさん:2008/06/18(水) 21:28:49
だから移植前提で独自キーワード入れないでほしいんだけど。またMSの悪い癖(独自拡張?)がでちゃったんですか?
941デフォルトの名無しさん:2008/06/18(水) 21:31:26
昔COBOLという言語があってな。
ていうか独自キーワードってなんだよ。
Javaのキーワードが他の言語からの移植を考えて決められてるなんて初耳だ。
942デフォルトの名無しさん:2008/06/18(水) 21:33:07
>>940
Javaを使い続ければすむことじゃないのか?
943デフォルトの名無しさん:2008/06/18(水) 21:51:19
Javaって $_ みたいな名前定義できなかったっけ?

CLIだとどうなってるんだろ?
944デフォルトの名無しさん:2008/06/18(水) 21:59:50
Java屋?
C#出たときあちこち馬鹿にしまくったくせに掌反してパクり始めた奴らだろ?
そりゃあんだけ醜態晒せば嫌って、なかったことにでもせんとなwwww

まあそれはいいとして @ つければキーワードとして扱われなくなるよ。VBなら[]で囲むんだっけかな

相互運用のためにその手の機能を持つことが推奨されてる。ちなみにCILは「どんな識別子でも」持てるから
限界はあるんだけどな
945デフォルトの名無しさん:2008/06/18(水) 22:06:13
移植するのに変数名まで同じにしたい痛い人がいるスレはここですか
946デフォルトの名無しさん:2008/06/18(水) 22:07:26
実際そんなに独特な予約語多くないだろ
2.0以降に追加されたキーワードは全て文脈次第だし
947デフォルトの名無しさん:2008/06/18(水) 22:09:25
あそうそう、コンテキストキーワードも多いっての書き忘れてた
948デフォルトの名無しさん:2008/06/18(水) 22:14:03
半年も使わないと忘れちゃうしキーワード多すぎだろ。
いちいち覚えるのとか別に苦痛じゃないんだけど、なんかMSに束縛されてるみたいで嫌じゃないか?
まあ、変なところがあったらコンパイラが叱ってくれるからいいんだけど…
949デフォルトの名無しさん:2008/06/18(水) 22:17:23
…半年はさすがに記憶力悪すぎかろくに触ってなかったレベルだろう。
950デフォルトの名無しさん:2008/06/18(水) 22:19:51
scriptfpとかpackageはそのままでjavaに移植できるの?
java使ったことないんでしらんけど。

そもそも多言語移植の時に変数名そのままで移植できなきゃやだやだやだ
なんてバカかよ。ほとんど意味ないと思うんだが。
そこまでしたいならまずjavaの段階で適宜リファクタリングして移植すりゃ
いいことなんじゃねーの?
951デフォルトの名無しさん:2008/06/18(水) 22:21:05
ざっくり読むと
アホがjavaからC#へ移植を試みて文句言ってる
のに食いついたって感じ?
暇だなぁ、お前等
952デフォルトの名無しさん:2008/06/18(水) 22:23:01
J#でもつかってろよ
953デフォルトの名無しさん:2008/06/18(水) 22:26:15
おお、まさにJ#でこの話終わりだなww
954デフォルトの名無しさん:2008/06/18(水) 22:26:25
コンテキストキーワードよりもはるかに気持ち悪いのは,
インターフェイスとか抜きで特定の名前(引数)のメソッドの呼び出しに変換される機能
foreach→GetEnumerator()とかコレクション初期化子→Add(引数任意)とかクエリ式とか
955デフォルトの名無しさん:2008/06/18(水) 22:28:08
C#コンテキストキーワードって
get set partial where yield value と後はC#3.0で導入されたクエリキーワードぐらいだよな。

>忘れちゃうキーワード
explicit implicit stackalloc unchecked volatile あたりは時々忘れそうになる。
956デフォルトの名無しさん:2008/06/18(水) 22:30:41
add/removeとかも<コンテキストキーワード
957デフォルトの名無しさん:2008/06/18(水) 22:30:57
そろそろ次スレ立てたほうがいい?970くらいでいい?
958デフォルトの名無しさん:2008/06/18(水) 22:32:24
>>954
java5にも同じのあるじゃないか
Iterable/Iteratorでfor ( : ) をお忘れではないか
959デフォルトの名無しさん:2008/06/18(水) 22:35:22
>>958
C#のはダックタイピング的なのでちょっと違う。
多分>>954はその事を知ってて書いてる。
960デフォルトの名無しさん:2008/06/18(水) 22:52:38
Whereという名前のメソッドがあればクエリ式のwhere使えるんだよね
961デフォルトの名無しさん:2008/06/18(水) 22:53:33
>>955
ええ!それは忘れないだろ。
それ、使わないならC#言語じゃなくてもいいでない?
ん・・・このスレのレベルは、理解に苦しむ・・
962デフォルトの名無しさん:2008/06/18(水) 22:57:03
>>959
了解、インターフェイスがなくてもメソッドの名前が一致してればOKという話か。
usingはなぜかIDisposable.Dispose()でないと受け付けない。
これもメソッドの名前だけで使わせて欲しいよ。
963デフォルトの名無しさん:2008/06/18(水) 22:57:17
>>956
リファレンスのキーワードの項に、
>>955のとクエリキーワードは載ってるけど、add/removeが載ってない
中の人にも忘れられてる?
964デフォルトの名無しさん:2008/06/18(水) 23:03:23
add/removeはデリゲートだけでデリゲートでも普通使わないからやっぱり忘れられていると思う。
965デフォルトの名無しさん:2008/06/18(水) 23:03:48
C#というのは、Javaと比べるとポインタ演算unsafeとstackallocが売りだと思うんだけど…
966デフォルトの名無しさん:2008/06/18(水) 23:07:13
いやなウリだな
967デフォルトの名無しさん:2008/06/18(水) 23:08:34
>>964
WinFormでもWPFでもコントロールのイベントはカスタムしてるのがほとんどだぜ
968デフォルトの名無しさん:2008/06/18(水) 23:11:15
便利なものはどんどん積極的に組み込んでアピールしていこうっていうのがコンセプトでしょ
969デフォルトの名無しさん:2008/06/18(水) 23:13:49
ヘジたんはむしろ抑え役っぽい
970デフォルトの名無しさん:2008/06/18(水) 23:17:46
抑え役だし押さえ気味だよなぁ。
というかあいつら基本的に自分たちでだいぶ使ってから出すから
まぁそんなもんかという気はする。
971デフォルトの名無しさん:2008/06/18(水) 23:32:38
VBと違ってクエリ演算子のサポートが消極的すぎ
中途半端に付けるくらいならクエリ式なんて無くてよかった
メソッド形式だけだとどうしてもインパクトに欠けるからなあ
972デフォルトの名無しさん:2008/06/18(水) 23:32:42
javaがいったいいくつ独自キーワードを取り入れたか
973デフォルトの名無しさん:2008/06/18(水) 23:35:19
今のC#のウリは関数型とラムダ式だろ
JavaやC++とくらべて進んでるところは
974デフォルトの名無しさん:2008/06/18(水) 23:38:10
次はついに動的型くるかも
975デフォルトの名無しさん:2008/06/18(水) 23:42:53
動的型というか、動的っぽい記述が一時的につかるようになる dynamic ブロックになりそうかな。
976デフォルトの名無しさん:2008/06/18(水) 23:45:46
GetEnumeratorは仕方ない。
ジェネリックがなかったころだから。
977デフォルトの名無しさん:2008/06/18(水) 23:48:39
Mix-in 入れてくれんかな
978デフォルトの名無しさん:2008/06/18(水) 23:49:20
相変わらずC#はキモイな
どこがどうキモイかを気がついてないようだけどw
979デフォルトの名無しさん:2008/06/18(水) 23:54:12
>相変わらずC#はキモイな
何言ってる?
現在進行形でキモクなってんだよっ
980デフォルトの名無しさん:2008/06/19(木) 00:01:56
まあJavaBeansのプロパティルールよかまし
981デフォルトの名無しさん:2008/06/19(木) 00:07:15
自分でもどこがキモイか指摘できないから、
釣り糸をたらして誰かがボロを出すのを待ってるんですね。
わかります。
982デフォルトの名無しさん:2008/06/19(木) 00:11:34
動的型はいいよ
VBでやってくれ
983デフォルトの名無しさん:2008/06/19(木) 00:48:53
C#の魅力は静的型付けの言語でここまでやるかってところ
984デフォルトの名無しさん:2008/06/19(木) 09:17:54
Expression Treeなんかすでに動的言語の領域だけどね
985デフォルトの名無しさん:2008/06/19(木) 10:36:58
Linq for SQLは明らかに別物ですから。
Linq for SQLはORMであることを前面に出してアピールしたほうが健全だと思える。
これをごちゃ混ぜにしてLinqと呼んでるからユーザーが混乱する。
986デフォルトの名無しさん:2008/06/19(木) 10:40:39
混乱して分からなくなるようなやつは使わなければいい
987デフォルトの名無しさん:2008/06/19(木) 13:27:12
Linq to SQL はフェードアウトするかもしれんけどな。その話とは関係ない話ではあるが。
988デフォルトの名無しさん:2008/06/19(木) 21:35:51
SQLクエリとin-memoryオブジェクトクエリが同じ記法で書けるってのが1つの売りだからなぁ。

デリゲートとExpessionTreeが同じ文法で書けるのが実に素敵。
989デフォルトの名無しさん:2008/06/19(木) 23:22:50
ADO.NET2.0でデータの更新時に同時実行違反になったときどうしてる?
エラーダイアログ出して、ユーザーが編集していた更新内容を
まるっと破棄してしまうと、なんか文句言われそうなんですが・・・
990デフォルトの名無しさん:2008/06/20(金) 09:37:29
Expression Treeじゃなくてメソッド全部ツリーにしてくれればいいのに
あと匿名型を普通に引数とか戻り値に使えるようにしてくれ
991デフォルトの名無しさん:2008/06/21(土) 02:06:08
ExpressionTree面白いんだが、自分であれいじくろうと思うとちょっとうんざりしそう。
もうちょっとシンタックスシュガーが( ゚д゚)ホスィ…
992デフォルトの名無しさん:2008/06/21(土) 03:05:49
俺はMSDNにあるExpressionVisitor使っていろいろ作ってる
合成関数とか、任意の引数のバインディングとか

expr1.ComposeWith(expr2)
expr1.BindSecond(3)

てな感じで使ってる
993デフォルトの名無しさん:2008/06/21(土) 10:15:58
正直、何につかったらいいかわかんねExpressionTree
994デフォルトの名無しさん:2008/06/21(土) 10:57:29
識別子の名前が取ってこれるのが重要なんじゃない?>ExpressionTree
それ以外は生の処理でもできそうだけど
995デフォルトの名無しさん:2008/06/21(土) 12:08:20
まあ、Expression Treeを使うのは主にライブラリ作成側の人だろ。
たいていのプログラマは間接的な恩恵しかない。
996デフォルトの名無しさん:2008/06/21(土) 12:46:31
動的メソッド+ILの替わりに、デリゲート+Expression Treeが使えるのは大きい
997デフォルトの名無しさん:2008/06/21(土) 17:15:23
ソースとプロジェクトファイルを人に渡したいのですが
最低限必要なのはどのファイル(※)でしょうか?

※ Windowsフォームアプリケーションで新規作成した場合に
  作成されたファイルを下記のリストにしてみました(第二階層まで)

test.sln
test.suo
2008/06/21 17:07 <DIR> bin
2008/06/21 17:07 <DIR> obj
2008/06/21 17:07 <DIR> Properties
2008/06/21 17:04 374 Form1.cs
2008/06/21 17:04 1,338 Form1.Designer.cs
2008/06/21 17:04 546 Program.cs
2008/06/21 17:07 3,622 test.csproj
2008/06/21 17:07 74 test.csproj.user
998デフォルトの名無しさん:2008/06/21(土) 17:22:01
>>997
2008/06/21 17:07 <DIR> bin 
2008/06/21 17:07 <DIR> obj 
は全部消していい。
あとはtest.csproj.userくらいか
999デフォルトの名無しさん:2008/06/21(土) 17:35:18
>>998
削除&プロジェクトファイルを開く、で削除可否を確認しました。
下記リストの状態でプロジェクトが開くのを確認。
教えて頂いたファイルからさらにtest.suoを削除しています。
ありがとうございます。

消さなかったファイル・フォルダ
test.sln
2008/06/21 17:07 <DIR> Properties
2008/06/21 17:04 374 Form1.cs
2008/06/21 17:04 1,338 Form1.Designer.cs
2008/06/21 17:04 546 Program.cs
2008/06/21 17:07 3,622 test.csproj

消したファイル・フォルダ
test.suo
2008/06/21 17:07 74 test.csproj.user
2008/06/21 17:07 <DIR> bin
2008/06/21 17:07 <DIR> obj
1000デフォルトの名無しさん:2008/06/21(土) 17:52:53
次スレ [プログラム板] C#, C♯, C#相談室 Part47
http://pc11.2ch.net/test/read.cgi/tech/1214038282/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。