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


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

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



1 名前:デフォルトの名無しさん [2008/04/22(火) 00:31:59 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
c++厨の嵐はスルー汁。

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

その他テンプレ>>2-5くらい

331 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:33:19 ]
Panel2をFormに追加してから、サイズ変更でPanel1の内側に持ってけ。

332 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:35:01 ]
>>329
というよりも、最初にPanelを同一の親コンテナの中に重ねて配置したいという時点で、
デザイナで作成するのではなく、最初からコード上でNew Panel()して
それをControlsに追加していくようにすべき。
デザイナ上でそれやろうとすると、親切にもDesigner.cs上のコードは
最前面にあるコンテナ内にコントロールを配置しようとしてくれちゃうから希望通りにならない。

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



333 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:35:39 ]
Windowsアプリケーションで、常に一つのフォームしか表示させなくて、色んなフォームにページ展開する時ってどのように実装しますか?
シングルトンで実装するのが普通なんでしょうか?
それとも1度開いたらHide()で見えなくするだけ?
よろしくお願いします。

334 名前:332 mailto:sage [2008/05/22(木) 01:37:13 ]
>>331
そりゃ盲点だったわ。
ためしにやってみたらそれでも大丈夫っぽいね

335 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:37:38 ]
タブコントロールのAppearanceをFlatButtons、ItemSizeを0,1、SizeModeをFixedにすれば、あら不思議

336 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:43:58 ]
>>330
そんなこと出来るんですかー。

>>331
ドキュメントアウトライン見ながら方向キーで調節したり、
Locateを手打ちしたりして注意しながら配置すれば出来るんですけど、
マウス操作だと親子関係が、ドキュメントアウトラインで親子関係を変えると位置が、それぞれ変わっちゃいますね。
特に後者の挙動は意味不明ですw
せっかくのGUIデザイナなのに感覚的に操作出来ないのは面倒ですね。。

337 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:50:42 ]
>>336
どうしてもデザイナにこだわるならExpressionBlend使ってWPFアプリ作れっての。
あれだとお前のやりたいことが全部感覚的にできるぞ。

あと、

>特に後者の挙動は意味不明ですw
>>325を百回読め。コンテナが変われば位置が変わるってことが理解できない頭なら
プログラミングなんて向いてないからやめておけ。

338 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:51:51 ]
>>332
最前面にあるコンテナの子にしてくれるのは感覚的にも動作的に問題ないけど
ドキュメントアウトラインで親子関係解消すると位置が変わっちゃうのは意味不明だけどね。
他の操作でその位置に出来るのになぜ変わるのかと。

>>335
あら不思議!
ありがとー。

339 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:56:38 ]
>>337
親コンテナが変われば相対座標が変わるって言いたいんだろうけど
それは問題になってないんですぅ。
GUIで親子関係を解消したら新親の座標に変換してくれたほうが直感的です。
しかもマウス操作したら旧親の子になってしまう座標ならなおさらです。



340 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 12:38:53 ]
>>339
何を言ってるんだか意味不明な気がする。

341 名前:337 mailto:sage [2008/05/22(木) 13:59:41 ]
>>339
いや、まあもう何も言わんからおとなしくWPFで作ったら?
君の言うGUIデザイナを使って「直感的」に作成できるからさ。
ツールに文句つけるわりには、それを解消したツールがあってもそっちを使おうとしないんだねぇ。
WPFとかXAMLの勉強するのは嫌だけどWPF&XAMLの機能を求めているわけだ。
だだをこねている子供にしか見えん。

342 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:05:59 ]
よく論点が違うって言われない?

343 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:25:58 ]
言われない

344 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:27:59 ]
聞く耳持たねえ

345 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:28:40 ]
WPFが直感的だと!?

346 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:33:20 ]
うん

347 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:05:45 ]
WPFはスレ違いだしもう何も言わなくていいですー

348 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:38:28 ]
337みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^

349 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:41:12 ]
348みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^




350 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 19:41:28 ]
どうでもいいけど関係ない話するな

351 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 02:41:06 ]
349みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^

352 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 02:47:33 ]
351みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^

353 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 07:08:57 ]
WPFがスレ違いならFormの話もスレ違いだろう

354 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 07:12:31 ]
Expression高いしVSのWPFエディタはうんこだし
WPFは爆死の臭いしかしない

355 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 08:49:13 ]
C#でDataGridViewから派生したクラスを使いたいんですけど
Form1.cs[デザイン]を開いて
そこにDataGridViewを張り付けて
そのあとに
Form1.Designer.cs

System.Windows.Forms.DataGridView

MyNameSpace.MyDataGridView
に書き換えるとかそういうことをするんですか?
そんなはず無いと思うので正しいやりかたを教えてください。

356 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 08:52:30 ]
派生させたクラスがツールボックスに出てるだろう。

357 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 09:01:20 ]
>>356
出てますね...
ありがとうございます。


358 名前:デフォルトの名無しさん mailto:sage [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です。

359 名前:KKK [2008/05/23(金) 13:56:15 ]
こんにちは。

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

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

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

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

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

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

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

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

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

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

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

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

アドバイス待ってます。




360 名前:358のつづき mailto:sage [2008/05/23(金) 13:56:37 ]
amespace NAME1 {
 class A {
// メンバ
private x; ← ここで警告が出る
// メソッド
public void func_A( temp ) { x... }; ← ここでx=0として計算してしまう
// アクセッサ
public X { get; set; }
}}

361 名前:358のつづき mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 13:58:59 ]
>>360 xの型もXの型もgetアクセサの中身もsetアクセサの中身も書け

363 名前:358 mailto:sage [2008/05/23(金) 14:16:40 ]
private double x;
public double X { get; set; }
です。アクセッサの表記は、.NETのver2かver3でこのように書けるので、それを利用してます。

364 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:27:19 ]
ヘルプなりで「自動実装するプロパティ」調べれ
どうして X が x を知ってる?

365 名前:358 mailto:sage [2008/05/23(金) 14:49:06 ]
ヘルプを読んだ結果、
>自動実装したプロパティでは、属性は使用できません。
>プロパティのバッキング フィールドで属性を使用する必要がある場合は、通常のプロパティを作成します
に関連がありそうだとは思うのですが、意味がよくわかりません・・・。

366 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:56:54 ]
X プロパティは x に対応しないよ。



367 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:58:31 ]
それだと、
private double _X;
みたいなのが内部で自動生成されて
public double X {
get { return _X; }
set { _X = value; }
}

368 名前:358 mailto:sage [2008/05/23(金) 15:03:32 ]
つまり、
class{
 double x;
 double X{get;set;}
}
と書くのは誤りで、
class{
 double x{get;set;}
}
と書けばよいということですか?

369 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:37:57 ]
ファイルの読み書き単位でエンコーディングを指定するのではなく、
プログラム全体でエンコーディングをしているする方法はないですか?



370 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:07:41 ]
コンポーネントでの表示が必要なの?
httpで通信するってんじゃだめかい?

374 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:10:13 ]
>>372
事前にgoogleを表示しとく意味があるのか?
取り敢えず適当にgoogleで検索して検索結果画面のURL調べれ
あとSystem.Web.HttpUtilityのUrlEncodeとUrlDecode調べれ

375 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:11:44 ]
>>373

webにいろいろと自動入力するシステムを作らないといけなくなりまして。
たとえばブログにあらかじめTextboxに入れておいたIDとパスを入れて自動ログインするとか
そういったものなんですけど、webのフォームに、Textboxから値を入れる方法が知りたくて、
Googleはそのたとえのつもりでした。
http通信?の意味がよくわからないんですが、ソフト内のブラウザ上で表示させる必要はあります。


376 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:13:21 ]
>>374
Googleっていうたとえが悪かったですね。ごめんなさい。
>>375で書いたように、Webサイト上のフォームにソフトのTextBoxで記載したワードを記入するのが目的です。

377 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:27:16 ]
WebRequest を使って WebResponse を取得し、
その内容を反映させては。

378 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:30:01 ]
素直にHTTP POSTしろよ低脳。
こんなの厨房でも出来るぞ

379 名前:デフォルトの名無しさん [2008/05/23(金) 17:39:43 ]
>>377
どのメソッドを使えばいいかわからなかったので、ググってみたらできそうです、ありがとうございます。

>>378
HTTP POSTで検索したらそれらしいのがでてきました。ありがとうございます。



380 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:40:12 ]
おい小学生かもしれねえだろうが

381 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:46:22 ]
>>380
小学生に失礼だ

384 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:48:58 ]
>>381
自動プロパティのセッタゲッタの片方だけのプロテクションを帰ることは出来ないよ。

385 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:52:20 ]
>>384
いきなりどうしたの?
俺ができてるからそう書き込んでるんだけど。



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

public Foo Foo{ get; private set; }

だな
普通のプロパティなんてかったるくて書いてられん

387 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:55:26 ]
>>384
知ったか?
それとも何か他に深い意味があるの?

388 名前:358 mailto:sage [2008/05/23(金) 18:08:21 ]
うまく書けるようになりました。
ありがとうございました。

389 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:28:24 ]
Hashtableから値取り出すときにキャストしないでいい方法はない?
面倒くさいんですけどん。

393 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:29:59 ]
VS2005以降ならDictionaryを使う

394 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:31:53 ]
>>393
サンクスです。
こんなのがあったんですね。

395 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:43:16 ]
GenericはC#2.0の最大の目玉じゃないか…

396 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 20:38:55 ]
>>390
やろうと思えばできる。
IDとパスのINPUTタグのIDを調べ>>389のようにIDとパスを入力し、
こいつらを管轄するフォームでsubmitする。

ヒント:javascriptを実行してからsubmitを行う。

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

おねがいします。

398 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 20:56:16 ]
リフレクションを使います

399 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 20:58:34 ]
>>396
javascriptは全然わからないから詰まってます。
submit()を実行すると無限に更新されるみたいなのですが・・・。
htmlソースみるとLoginLeftFormCheck()を呼び出してるみたいなのですが関係ないですかね。



400 名前:390 mailto:sage [2008/05/23(金) 21:04:58 ]
意味も分からずコピペなんですけど、
public Form1()
{
InitializeComponent();
webBrowser1.Url = new Uri("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 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:05:33 ]
>>396
いやそいつを実行するの。

402 名前:デフォルトの名無しさん [2008/05/23(金) 21:06:25 ]
>>400
ログインボタン、エンターキーおしたらいけないの?

403 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:06:26 ]
>>399
JavaScriptもわからないようならC#とか無理だから諦めろ。
なでしこでもやってろ

404 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:06:59 ]
安価ミス
>>396>>399

405 名前:390 mailto:sage [2008/05/23(金) 21:11:35 ]
>>401
実行するってことはInvokeMember("LoginLeftFormCheck")ってことですかね?

>>402
フォーム上ならエンターキーでもログインできます。

406 名前:401 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:54:25 ]
何をやりたいの?

409 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:55:56 ]
>>407
スレチこっちで質問しなおせ
ttp://pc11.2ch.net/test/read.cgi/tech/1160209713/
ttp://pc11.2ch.net/test/read.cgi/tech/1208248879/



410 名前:407 mailto:sage [2008/05/23(金) 22:04:58 ]
>>408
とりあえずWebアプリケーションでいうチャットやカウンターのような位置づけなものを作ってみたいです。
(ようするに簡単なものです)
おそらくメモ帳のようなものになるのでしょうか?
ペイントのようなものも作ってみたいですが、メモ帳に比べると難易度はあがりそうですね。
簡単なテーブルゲームなんかも作ってみたいですが、アルゴリズムの勉強はしてないので少し厳しそうです。

>>409
了解です。そちらで質問しなおします。

411 名前:390 mailto:sage [2008/05/23(金) 22:15:45 ]
>>406
どうもありがとうございます。
webBrowser1.Url = new Uri("javascript:" + Uri.EscapeDataString("LoginLeftFormCheck();"));
で無理やり実行してみたらfalseが返ってきちゃいました。
マウス操作も考えたんですけど、ブラウザやマウスが勝手に動く様が見えちゃいますよね。。

412 名前:397 mailto:sage [2008/05/23(金) 22:32:25 ]
すいません。リフレクションを使っても取り出せるのは
型情報でインタンスの値は取り出せないのではないでしょうか?

もう少しキーワード教えてください。

413 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:43:15 ]
型情報からフィールド一覧取れるだろ
FieldInfoから値取得できる

414 名前:401 mailto:sage [2008/05/23(金) 22:51:20 ]
>>406
いや、LoginLeftFormCheckは単に実行するだけでOK。
submitすりゃ、ログインされる。
javascriptは多分InvokeScriptでできない?

マウスは勝手に動くようにみえちゃう。これは仕方ない。

415 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:23:57 ]
>>411
>>409

416 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:34:10 ]
ここはなにを話すスレ?

417 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:36:31 ]
C#プログラマの雑談スレ


418 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:44:16 ]
>>1
>(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

C#プログラマの雑談スレなんて限定的には書いてないけど?
しかもスレタイは「相談室」だぞ

419 名前:397 mailto:sage [2008/05/23(金) 23:44:32 ]
FieldInfoのGetValue,SetValueでできました。
ありがとうございます。



420 名前:デフォルトの名無しさん [2008/05/23(金) 23:55:28 ]
JRq8rZjk7c

鳥解析4649

421 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:04:49 ]
私怨乙

422 名前:390 mailto:sage [2008/05/24(土) 01:09:12 ]
>>414
ありがとうございました。
ゲームスタートのFlashもjavascriptを呼んでいましたので直接呼んだら開始できました!

423 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:53:52 ]
>>416
C#、.NET(ただし、C#を使っている前提)に関することで、
主にふらっとだとアレな話題や雑談とかのスレ
と、俺は解釈してる

ここで質問すること自体は悪いとは思わないが、
ふらっとの方がより適切だとも思ってる

424 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:07:26 ]
ふらっとは初心者用だから。
回答者も初心者スレにいなかったら結局このスレに質問しに来るのでは?
たらい回しはいかんよ。

425 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:09:08 ]
俺はふらっとが初心者用でこっちが中級者の集まりだと思っていた。
こっちでの質問はOOPとか言語仕様なりの高度な質問になる感じ

426 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:11:33 ]
>>425
元の趣旨はそうだが実情は逆


427 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:44:53 ]
そんなの主観的なんだからどっちだっていいだろ。
質問者が初心者と自覚した場合ふらっとに行けばいいと思うよ。
ただそれだけ。

428 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:57:34 ]
複数あるのは害でしかない
みんなわかってるはずだ

429 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 05:05:02 ]
>>424
心配無用。
どうせ皆も両方見てるんでしょ。




430 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 05:42:36 ]
どっちか削るとしたら明らかに初心者用だよな。
で、もし削ったとしたら初心者隔離スレも欲しくなるよな。
ここまで言えばわかるよな。

431 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 10:55:50 ]
ぬるぽ

432 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 12:40:47 ]
>そんなの主観的なんだからどっちだっていいだろ。
>質問者が初心者と自覚した場合ふらっとに行けばいいと思うよ。

えてしてその主観が間違ってるから問題になるんだが。


433 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 15:28:08 ]
オレが全部答えてやんよ
だからもう喧嘩するな

434 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:44:12 ]
整数5ずつにしたいのですが……うまく言えないのですが、例えば、
96なら95、98なら100、53なら55、42なら40
と言うふうにしたいのですが、どうすればいいでしょうか?

435 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:46:22 ]
C#で自作した外部アプリケーションを呼び出したいのですが、
Process process = new Process() ;
process.StartInfo.FileName = "hoge.exe" ;
process.Start() ;
こんな風に実行することが出来るようなのですが、
外部アプリケーション側に文字列を複数与えたいのです。
その場合呼び出す側と呼び出される側はどのような準備をすればいいのでしょうか?

436 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:49:25 ]
>>434
問題を定義しなおしてから来い。
>>435
Process.Start(hoge.exe,"arbitrary string");

437 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:52:06 ]
俺は>>434の言いたい事がわかったが次にどう書いてくるか楽しみなので伏せておく。

438 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:58:08 ]
あ、5ずつか普通に四捨五入してるわこれ



440 名前:435 mailto:sage [2008/05/24(土) 18:00:09 ]
>>436
文字列を複数渡したいのですが
Process.Startの第二引数はstring[]でもいいのですか?

それと受け取る側はどうすればいいのでしょう?

441 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:01:03 ]
>>438
ありがとうございます。
さっそく導入してみたのですが、これだとただの10ずつになってしまうのですが……。

っと書いていたら439の返事がきました。
ありがとうございます。
こういうのも四捨五入というのですか……。
勉強になりました。

442 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:02:00 ]
>>440
無理。記号を決めてそれを受け取る側で改行と見なすくらいしかない

443 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:02:40 ]
>>438の使って
if (number % 10 < 5) number = number - (number % 10)+5;
else number = number + 10 - (number % 10);
でいいんじゃね?

444 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:02:43 ]
あ、ちょっといじったらできました。
もうちょっとテストして、また報告させていただきます。
本当にありがとうございました。

445 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:04:33 ]
連投失礼します。
>>443
ありがとうございます。
それでいけそうです。
これまたもう少しテストしてきます。

446 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:06:56 ]
こうでしょ。
int mod = x % 5;
x += mod > 2 ? 5 - mod : -mod;


447 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:08:21 ]
>>442
string一つだけなのですか。

受け取る側はどうすればいいですか?
受け取る側はコンソールではなくフォームアプリケーションです。

448 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:17:35 ]
>>447
スペース区切りとかで渡して、
splitで分割するなりすればいいんじゃね?

449 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:19:37 ]
>>446
ありがとうございます。
>>443さんの方法だと、きりのいい数字だとちょっとおかしくなるようでした。
446さんの方法は私程度にはどういう処理をしているのかさっぱりなのですが、
問題なく使えます。

みなさん本当にありがとうございました。



450 名前:435 mailto:sage [2008/05/24(土) 18:30:42 ]
Environment.CommandLineで受け取るか、
コンソールと変わらずにエントリポイントから受け取ればいいんですね。


451 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:40:20 ]
>>431
AutoNullpoOudaki gattu = new AutoNullpoOudaki();
gattu.Execute();

452 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:11:50 ]
文字列から動的にExpressionTreeやFuncを得ることって出きるん?
ttp://ufcpp.net/study/csharp/sp3_expressionsample.html
ここで書いてあるような子としてみたかったんだが、CodeDom.GetExpressionFromとか見あたらず、いろいろググってもそれらしいのにたどり着けず・・・
CodeDomでFuncを返すメソッドを持つクラスをコンパイルして実行して呼び出せば出来無くないんだけれどもう少しまともな方法で・・・


453 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:31:07 ]
>>452
そのページにある「ソース一式」のところからソース落して、
中身の「MyMath\CodeDom.cs」の中にその GetExpressionFrom の実体がある。

454 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:32:55 ]
ちなみに、そのソースの GetExpressionFrom はまさに、その
「CodeDomでFuncを返すメソッドを持つクラスをコンパイルして実行して呼び出せば」
をやってるだけ。

もう少しまともな方法、確かに欲しいよね。

455 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:26:10 ]
>>456

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



458 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:37:51 ]
メッセージとしてスウェーデン語文字を表示させたいのですが、
なぜか読み込んでくれずにエラーが起きてしまいます
どうしたらよいのでしょうか

459 名前:456 mailto:sage [2008/05/24(土) 20:42:51 ]
>>457
ありがとうございます。実際にwavファイル置いてパス指定して音を鳴らすことは問題なくできるんですが、
埋め込めたら良いなぁ・・・ってことなんです。
もしかして、埋め込みは無理ってことですか?



460 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:42:50 ]
>>452
これがクエリ式のパーサ持ってたと思う。使い回せるかも。
ttp://www.codeplex.com/nlinq

使い方は"poorman's linq"でぐぐる。

461 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:45:46 ]
>>458
取りあえずエラーとやらに付随してるメッセージを読み上げるといいよ

462 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:46:10 ]
>>458
OSにスウェーデン語パックを導入しる

463 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:48:49 ]
>>462
今からググってきます。ありがとうございました

464 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:09:12 ]
レベルの低い質問で申し訳ありません。
出力の種類を「クラスライブラリ」としてあるプロジェクトを、スタートアッププロジェクトに設定した他のプロジェクトに参照させるにはどうすればよいのでしょうか。
そのままusingしようとしても「名前空間がない」と言われてしまいます。

465 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:12:54 ]
>>464
ソリューションエクスプローラで参照したいプロジェクトを右クリックして
参照の追加 → プロジェクト

466 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:37:56 ]
>>465
ありがとうございます。

468 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:05:15 ]
ブロック崩しを作ったのですが、ボールが宙に浮いているときにスペースキーを押すと、
ボールが画面外に飛び出してしまうのです。どうにかなりませんか?
ちなみにソースはこれ

www.borujoa.org/upload/source/upload18960.txt



470 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:24:40 ]
ソースを解析したうえでデバッグしてくれと。

471 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:27:03 ]
>>469
ソース見て吹いたw

472 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:31:36 ]
>>469
こういうifの書き方好きなの?


473 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:31:59 ]
ってそもそもスレ違いじゃん

474 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:32:51 ]
何でもう消えてるんだよ。ちょっと見てみたかった

475 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:56:20 ]
キャッシュ漁ったら見つけた


476 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:59:51 ]
型に格納できる値の最大値、最小値を返す関数はありますか?
例えば、unsigned intなら0か4294967295を返せる、といったような。
変数の型の範囲を超えるような値が格納されそうになった場合、エラーを出すような関数を作ろうと思っているので。

477 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:03:33 ]
MaxValue/MinValueじゃ足りんのか?

478 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:19:23 ]
そんなの、泣けりゃじぶんで定義して返せよ

479 名前:デフォルトの名無しさん [2008/05/25(日) 00:24:16 ]
LL言語のWWW::Mechanize的なのを探してます。
C#や.NET Framework向けのwebスクレイピングライブラリはないですか?
検索してたのですが、なかなか見つからないや・・・



480 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:24:27 ]
スレ違い

481 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:24:56 ]
>>478
いやいや、476はMaxValue/MinValueを知った上でそういう関数が欲しいんじゃなくて、
ただ単に MaxValue/MinValueの存在を知らないだけじゃないかと。


482 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:27:41 ]
関数はまあ見逃すとしてもunsigned intなんて言ってる時点でスレ違いである事に気付こうな


483 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:28:51 ]
>>479
MS は文法のゆるい HTML を機械処理するのはあまり好きじゃないみたい。

HTML2XHTML みたいなものを通して文法の正しい XML にした上で、
XmlReader やら LINQ to XML でアクセスするのがいいかと。
↓でそういうことやってるんだけど、
d.hatena.ne.jp/uesama99/20080219/1203394007
HTML2XHTML が微妙臭い。

484 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:29:53 ]
>>482
しっかり読んでなかったw

それはちゃんと、「C# は C/C++ とは違いますよ」誘導してやろうよ。

485 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:52:32 ]
>>477
ありがとうございます。
>>481
その通りです。低レベルすぎてすみません。
>>482
C#ではUInt32って書くんですね。ありがとうございます、勉強になりました。

486 名前:デフォルトの名無しさん [2008/05/25(日) 01:45:22 ]
>>483
クッキーとか面倒なところを良きにはからってくれるのはないっぽいですね。

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

とりあえうずありがとう。
いろいろ試してみます

487 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 07:57:54 ]
2005のPropertyGridについて質問
プロパティタブをいくつか追加したりしてるんだが
ボタンに使われる画像の色が PropertyTab.Bitmap で retuen した Format32bppArgb の画像と微妙に違う
見た感じは大体同じなんだが、実際のRGBを調べるとほんの少しずれてたりする
何か色数の制限があるのなら、それに合わせた画像にするんだけど分かる人いる?

488 名前:456 mailto:sage [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日置くと急に分かったりするもんですね(´・ω・`)
本当にありがとうございました。






489 名前:456 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 11:27:09 ]
質問です
ネットの初心者向けサイトを見ながらC#をやっていたんですがそろそろきつくなってきました
とくにデリゲートをイベントハンドラとして実装するところと、イテレータがよくわかりません
初心者から中級者にレベルアップするために買うべき本を教えてください

491 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:11:02 ]
C#用のDXライブラリと言うものがあったので早速使ってみたのですが、エラーが出ました。

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

DLLはあらゆる場所に配置して試したのですが、
やはり同じようにエラーがでます。
何か特別な書き方が必要なのでしょうか?

492 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:17:45 ]
DXライブラリの公式サイトで提供されてる方のC#用DXライブラリを使え
使い方も丁寧に書かれてる

493 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:19:29 ]
>>492
ありがとうございます。

いつのまにか出てたのですか!?
なぜエラーが出たのかは未だ不明ですが、早速使ってみたいと思います。

494 名前:デフォルトの名無しさん [2008/05/26(月) 15:17:26 ]
質問です。
2つのスレッドでそれぞれフォームを作成し表示します。
このとき、これらフォームの表示順位(重なり)を
コントロールすることは可能でしょうか?

なんか、デバッカ上とSetup後のプログラムで表示順がことなって
メッセージボックスが隠れたりする・・

495 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 17:10:31 ]
494です。自己レスします。
とりあえず以下HPを参考にし、隠れていたダイアログが表示されるようになりました。(暫定対応ですが・・)
www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34347&forum=7&start=0
端的に言うと、複数のアプリをダブルクリックしたときと同じで、
後から立ち上げた方が優先されて表示される。のと同じみたいです。

お騒がせしました。

497 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 17:17:20 ]
>>495
fixedである以上は無理

498 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:20:50 ]
狂っているその感覚を修正する事をお勧めします。




500 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:21:08 ]
それで十分スタンダード

> for文の中でインスタンス化すると、スコープから出ると消えちゃうような感覚がして気持ち悪いんです。
この感覚を何とかしたほうがいい


501 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:23:51 ]
もしかして
A[] a = new A[n] ← classA型の変数を宣言
a[i] = new A(); ← 実際に代入
つまり、for文の中では代入行為しかやってないから消えない、ということですか?

502 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:29:29 ]
GCのアルゴリズムを理解した方がいいよ。

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

例えばnが1なら、forを抜けても a[0]を参照できるでしょ?
で、参照できるので消えない。

503 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:34:42 ]
了解しました。勉強します。

504 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:18:27 ]
というかスコープを勉強したほうがいいだろ

505 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:20:45 ]
スコープは割と正しく理解出来てるような発言に見えるけど?

506 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:30:39 ]
GCとは全く関係ないだろ。
スコープの話をしてると思うんだが。

507 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 20:26:57 ]
コンストラクタでフィールドにインスタンスを代入したら不自然か

508 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:14:09 ]
なんでGCが出てきたんだw


509 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:16:05 ]
↑遅れてきたアホ




510 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:36:55 ]
確かにマオは四川省だったから ヤバスwww

511 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:37:37 ]
スマソ、誤爆った

512 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:41:06 ]
newしたものはアクセスできるなら消えない

513 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:18:08 ]
>>505
できてないできてない。

514 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:46:13 ]
.NETのGCはスコープより早く働くことがあるから要注意なんだよね。たとえば
static void Main() {
 Hoge hoge = new Hoge();
  hoge.Foo();    // hogeが参照されるのはここが最後
  // 時間のかかる処理
}
hogeがまだスコープ内にあるにもかかわらず、時間のかかる処理の最中にGCされることがある。


515 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:50:36 ]
↑あほ?wwwwww

516 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:53:20 ]
そんなものに注意は不要


517 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 01:00:18 ]
ttp://dobon.net/vb/dotnet/process/checkprevinstance.html
ここの真ん中くらいの「補足:ニュースグループ・・・」あたりにその例が出てる。
KeepALiveを使ってる箇所。

518 名前:デフォルトの名無しさん mailto:sage [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

519 名前:498 mailto:sage [2008/05/27(火) 01:56:25 ]
もしかして>>501の理解も間違いだらけなんでしょうか?
もう少し詳しく教えていただけませんか。



520 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 02:21:58 ]
>>498はGCと関係ないよ。
厳密には関係なくないとしてあえて言うと、
new A[n]したオブジェクトはA[] aの寿命(参照が外れるまで)生きてる。

521 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 05:51:20 ]
初歩的なことだとうじゃうじゃ煽りレスがついたりするのに
ちょっと難しい質問だとなかったかのようにスルーするお前らワロスw

522 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 08:25:46 ]
>>521
最近はROM主体だが、お前の発言が一番醜く見える。
そんなに無視されたのがくやしいのか? ちなみにどの質問なのか示してみ。

523 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 08:56:45 ]
どこが難しいの?直前のネタはフラットでもスルーだろ・・・C#関係ないし

524 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:04:01 ]
>>518
それはスコープが終了するとGCされるから、プログラマの責任でスコープを終了させんな、って話だ。

525 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:12:10 ]
>>522
わざわざROM主体とか前置きしないとレスできないのかよw

526 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:14:26 ]
ROM主体と言うのを何か言い訳に使ってるなら
>>525のレスは理解出来るが、別に言い訳に使ってないじゃん
まあ、無駄な前置きではあるけど

527 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:40:12 ]
>>526
まあ、第三者を装ってるあたりはみっともないな

528 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 13:20:13 ]
アンマネージな世界に渡したデリゲートを安全に保持しとくには
アンマネージ側で不要になるまでGC対象にならないようにしとかなきゃならない。

てだけの話?




530 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 13:41:36 ]
>>529
そういうこと。
他にも、インライン展開されたコンストラクタが完了する前にファイナライザが実行されることすらあるよ。
この場合もアンマネージな世界のハンドルの早すぎる解放であぼんする場合がある。

531 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 13:44:19 ]
>>529
9割9分そういう理解でOK。>>514もアンマネージなmutexやロックのためのファイルを
開いたままにする場合などに影響が出る。
アンマネージが関係しないケースはまれなのだが、なぜかそのレアケースが、
MSDNに載ってたりする。サンプルソースは2種類あるが最初のほう。
msdn.microsoft.com/ja-jp/library/system.gc.keepalive(VS.80).aspx

532 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 14:44:45 ]
非同期ゲリゲートの動きを止めたいときはどうすればいいですか?

533 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 15:07:42 ]
>>532
フラグやEventを使ってスレッド自身にそうさせるのが基本。

534 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:06:12 ]
関係ない話題を知ったかでひけらかすより質問に的確に答えてあげたら?

535 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:10:55 ]
いったい何の話だ?

536 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:12:20 ]
すっげーすぐにレス来たww
お前が関係ない話してレスが流れたんだろ。
自分で見返せ。

537 名前:535 mailto:sage [2008/05/27(火) 16:19:20 ]
>>536
えーと、俺はこのスレには初めて書いたものだが
流れがわからんからアンカーつけてくれないか?
どの質問の話かわからないから、答えようが無いわ。

538 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:22:12 ]
>>531
そこのサンプル例1の解説が不正確で、プロパティの取得処理が
時間のかかる処理のためデストラクタが先に動いてしまうと読めるがそれは誤り。
もしそうであれば.NETのGCなんて安心して使えない。
それはデストラクタの使い方に重大な欠陥があるために発生する。
具体的にはExampleクラスのデストラクタで他のクラス、
この場合hashValueが参照を持つArrayクラスの後処理を書いたらいかんということ。
マネージドだけの場合は基本的にKeepAliveのことは考えなくてよい。


539 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:57:12 ]
デストラクタが呼ばれるときには、既にメンバは解放された後なんだっけ?



540 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:11:04 ]
微妙に違う。
ファイナライズメソッドの実行順序には何の保証もないという話。

だと思うけどリンク先見てないから確かなことは分からん。

541 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:11:27 ]
>>539
メンバに参照型を持つ場合でも、オブジェクトとして独立してるので
デストラクタが動くタイミングやメモリが回収されるタイミングは不順。
順番が必要な場合はDispose(true)のパターンを使う。

542 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:13:17 ]
あいや、ずっと前に読んだことあるはずでかすかな記憶によると
解放された後っていうか自分で解放してんじねーかよw
って話だったかも…


543 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:48:04 ]
>>537
半年ROMれ。

544 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 18:08:24 ]
>>543
それはない

545 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 19:47:37 ]
一匹キティが沸いてんな・・・フラットじゃないのに

546 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 21:16:53 ]
フラット!フラット!!

547 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:24:52 ]
質問です。

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

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

サブ側でもOnKeyDownなんかで同じ関数を呼ぶようにすれば可能といえば可能ですけれど、
あまりにも美しくないなと思ってます。何か上手い方法は無いでしょうか?

548 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:38:50 ]
ほかのウィンドウのイベントが別のウィンドウのショートカットをたたくというのは美しくないだろ。
ルートのフォームまでで処理されなかったイベントがアプリケーションのハンドルで処理されるというのが正しい形だと思う。

549 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:47:27 ]
サブフォームでメインのOnKeyDown呼べばいいじゃん



550 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:50:05 ]
返信ありがとうございます。

>>548
そもそもメインのフォームでイベントを処理している、ってのがおかしいってことですかね?
メインにしろサブにしろ、フォームはイベントを発行するだけで、
その実際の処理はアプリケーション級のオブジェクトがハンドルするわけですか。

551 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:20:52 ]
参照の追加

554 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:21:18 ]
それでやるなら該当のdll参照すれ

555 名前:デフォルトの名無しさん [2008/05/28(水) 11:31:31 ]
>>553
>>554
参照追加したらありました。
たんにusingを記述するだけじゃダメだったんですね。
これでなんとかなりそうです。
ありがとうございました。

556 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:37:44 ]
ttp://blogs.dion.ne.jp/anis7742/archives/6905607.html
ここでも聞いてるやついるな。
当たり前すぎて書かないからなー、普通。

557 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 14:13:09 ]
なんつう偉そうなコメントだw

558 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:16:03 ]
なぜSystem.Arrayクラスから派生クラスを作れないんですか?

559 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:17:31 ]
CLR的に配列は特別なオブジェクトだから



560 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:55:06 ]
System.Arrayクラスから派生クラスが作れると何の不都合があるんですか?

561 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 22:15:37 ]
CLRべったりの低レベルで特殊な実装になってるから派生したところでどうせ何もできないよ
っていうかSystem.Arrayなんかそんなによく使うか?
IList使えよ

562 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 22:20:42 ]
CLR自体、StringとかArrayとか、その内部構造自体に
依存した最適化がかかってるからだ、
ってどっかにあった希ガス。

563 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:14:13 ]
C++だとコンストラクタは出来るだけ初期化のみにした方がいいけど、
C#では初期化以外にもメソッド呼び出したり処理を始めちゃってもいいの?

564 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:15:32 ]
いいよ

565 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:30:20 ]
いかんよ


566 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:51:19 ]
C++でコンストラクタでは継承先でオーバーライドされる仮想関数は呼べないんだったっけ
C#では出来るよ

567 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 11:03:33 ]
>>563
してもいいけど、内容によっては立ち上がりが異常に時間がかかるプログラムになる。
その場合、最小限の初期化コンストラクタとクラス初期化メソッドを作る場合もある。

568 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 11:53:48 ]
visual studioみたいなGUIのソフト作りたいんですけど
そのためのサンプルとか無いでしょうか?
具体的には
フォームにメニューがいくつかあって
ツールボックスがあって
左側にはエクスプローラ的な表示があって
下側にはテキストのログウィンドウがあって
残りの領域にはMDIの子フォームを生成するようなGUIです。
いかがでしょうか。


569 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 14:01:25 ]
Visual StudioというGUIのサンプルがそこにあるではないか。




570 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 14:09:14 ]
Visual Studio のドッキングを自前でがんばったらマジで死ねるなw

571 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 14:14:20 ]
Visual Studio以上の物ができたら教えてね
試してあげるから

572 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 17:24:15 ]
DockPanelSuiteマジオススメ

573 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 18:41:08 ]
MonoDevelopのソースじゃ参考にならんか…

574 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 18:43:22 ]
>>572
すげーなこれw

575 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 19:49:33 ]
>>572
凄いが、これを駆使したプログラムを少人数で作る気になれない。

576 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 20:04:01 ]
ttp://www.codeplex.com/sdock
made in Japan!

577 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:52:40 ]
WinFormsか・・・
WPF版がほしい。

578 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 22:24:21 ]
>>577
お前はこっち池カス

WPF(XAML,XBAP,.NET3.5)GUIプログラミング
pc11.2ch.net/test/read.cgi/tech/1211453941/

579 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:02:32 ]
そもそもWin32API使う意味がいったいどこに?

581 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:08:55 ]
C++でパイプを使った経験があったのでパイプをやろうとして、
C#でパイプをやるためにWin32APIを使うことにしました

582 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:18:59 ]
ProcessStartInfo.RedirectStandardInput
Process.StandardInput
この辺使う

583 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:59:47 ]
なるほど
他プロセスの標準入出力を通した通信は明示的なパイプ以外に用意されていたのですね
自分で調べてた限りでは見つかってなかった情報なのでとても助かりました
試してみます
ありがとうございました

584 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 10:37:20 ]
string str = File.GetLastWriteTime(Path).ToString();
このようにファイルの最終更新時間を取得すると、
そのファイルのプロセスが使用中のままになるのですが、
CloseやDisposeのようにすぐに開放させるにはどうすればいいのでしょうか?

585 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 11:06:44 ]
ならんが

586 名前:584 mailto:sage [2008/05/30(金) 11:10:07 ]
すみません。
File.GetLastWriteTimeのせいじゃありませんでした。
File.GetLastWriteTimeタンごめんんささい。

587 名前:File.GetLast mailto:sage [2008/05/30(金) 22:49:58 ]
んもー


588 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:37:34 ]
誤爆りました。スマソ



590 名前:579 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:44:08 ]
>>591
チートスレ池

593 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 19:41:13 ]
MMORPGの自動プログラムを作ってどうする、それほど他を出し抜きたいのか?
こんな所に来るな。

594 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 22:52:58 ]
C# = D♭

595 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 15:20:56 ]
>>591
評:もっとオブラートに包んだ質問のやりかたを覚えましょう。

596 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:22:52 ]
エロシーンまだ?

597 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:27:52 ]
せめて「GUIのテストを自動化したいです」位のうそをつく常識を持て

598 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:48:59 ]
HttpWebRequest使ってゆうちょダイレクトのサイトから振り込み状況を確認するアプリ作ってるんだけど、
誰かできた人いる?
UserAgentとかいじってもなぜかはじかれる。
同じアプリでほかのhttpsサイトとかはログインできるんだけどなぁ。

599 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 20:02:32 ]
いません



600 名前:591 [2008/06/01(日) 20:49:22 ]
ここで知恵ある人いるかと思ったのですが・・・残念。
自助努力するしかないですね。
どうもでした。


601 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 20:49:25 ]
なぜかって、なんのエラーで帰ってきてるの?

602 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:25:33 ]
C#側も書こう

604 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:26:42 ]
文字コード意識せずにネットワークとか

大方StreamReaderをEncoding未指定でnewしてんだろ

605 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:32:39 ]
技術ある人はゆうちょダイレクトにログインするプログラムをC#でHttpWebRequestつかって組んでみてほしい。
思いのほかはまるよ。

606 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:33:57 ]
>>601
サーバー側のエラーで帰ってきてログイン不可能。
エラーコードが書いてあるけど、意味がわからないので対応が難航してる。



607 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:36:26 ]
>>606(=605)
そのエラーコードを書けってことじゃないのか?
イミが分からないとか、技術ある人は作ってみ?とか
根本的にダメダメwww

608 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:38:18 ]
サーバー側(cgi)のエラーコードなんてC#とまったく関係ないから書かなかっただけだが。

609 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:40:27 ]
>>608
オマエには無理って事で終了



610 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:42:59 ]
TP1/Webのエラーコードっぽいけどな。
マニュアルある人ならわかるかもしれん。
今ゆうちょダイレクトメンテ中でエラーコード再取得できなかった。

611 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:43:26 ]
>>609
お前には聞いてないってw

612 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:45:51 ]
逆ギレw

614 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:47:03 ]
技術もないのにあおるだけのアホは放って置いてできる人よろしく!

615 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:50:06 ]
>>614
ここで聞く前に、先ず質問の仕方を勉強してきてね

616 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:51:20 ]
だなw

617 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:52:55 ]
>>615,616
キメェw

618 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:55:16 ]
ゆうちょダイレクトは特に妙なところはなかったように記憶しているけど、
どこでひっかかってるの?
今確認しようとしたら、ちょうどサービス停止中だな。

619 名前:デフォルトの名無しさん mailto:age [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 名前:デフォルトの名無しさん mailto:age [2008/06/01(日) 23:05:29 ]
一部切れていました。
udp = new System.Net.Sockets.UdpClient(localPort);


621 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:08:29 ]
Shift_JISで送られてきてるのにUTF-8でデコードとかおかしいと思わないか?

622 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:11:50 ]
思わないでーす

623 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:17:29 ]
なんか、荒らされてるな。
IDない板だから、釣りや煽りに反応するのはやめましょう。
質問者の暴言は、たいてい騙り。
もちろん、ときどきとんでもない質問者もいるが、いずれにせよ放置で。

624 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:19:15 ]
技術ある人に作れって時点でネタだろ

625 名前:デフォルトの名無しさん mailto:age [2008/06/01(日) 23:23:40 ]
>>620
すみません、どの記号がどの文字コードかの知識が不足しています。orz

626 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:55:12 ]
とりあえず、ゆうちょに不正アクセスしてる奴がいると通報しとくか。
3人くらいで通報すれば目付けられるから

627 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 01:27:36 ]
何が不正?

628 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 06:31:07 ]
.Text.Encoding.GetEncoding(932)

629 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 06:59:26 ]
>>628
出来ましたありがとうございます。



630 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 08:16:51 ]
とりあえず、ゆうちょにログインも出来ないアホはほっとけよ

631 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 12:59:43 ]
ゆうちょの件一晩頭冷やして考えたらできました。
お騒がせしました。

632 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 13:09:14 ]
>>631
>>615

633 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 13:35:31 ]
結局何がまずかったの?

634 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 13:39:21 ]
態度

635 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 15:04:41 ]
>>634
いや、頭だろ・・・

636 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:46:07 ]
そもそも質問してないだろ
意外とはまるからやってみぐらいの勢いだったんだが。
それを勘違いしたこまったちゃんが質問の仕方が悪いだの、態度が悪いだのってこんな匿名掲示板で言われてもなw

637 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:48:37 ]
>>636
ヨチヨチwww

638 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:51:25 ]
>>636
明らかに誰か作って教えてくれってスタンスだったけどなw

ヨチヨチwww

639 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:55:30 ]
それはそうと、ゆうちょ興味あったら挑戦してみ。
興味なかったらいいけど。



640 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 19:57:56 ]
ゆうちょダイレクトのアカウントなんて普通持っとらんがな(´・ω・`)
嵌るとかは単純に質問者の技術力不足だと思う

641 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:16:54 ]
そうだね。
俺はそもそも技術者じゃないから技術力不足は認めるよ。
ネットショップを経営しててそれに必要な入金チェックをちょっと作ってみようかなって思っただけだし。

642 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:24:42 ]
つ Python
無理にC#を使う必要性はない。

643 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:32:46 ]
PythonってWinアプリ簡単に作れるの?

644 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:35:08 ]
うん。GUIを扱うライブラリがあるし、IronPythonを使えば.netも使える

645 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:36:30 ]
ゆうちょ房のスレ荒らしw

646 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:47:33 ]
なるほど。
Python調べてみよう。Excelファイルいじくれるライブラリもあるといいけど。
C#始めて1ヶ月だけどフリーで開発環境まで全部まとめてインストールできるのが楽ではじめたんだよね。
今度は今手作業で集計してるバイトの勤怠管理でも作ってみるか。

647 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 21:08:48 ]
ゆうちょが出てきてからスレの雰囲気がすごく悪くなった

648 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 21:21:13 ]
過去スレ読んだが同じようなもんだぞ
ゆうちょに粘着している奴が悪くしてんじゃね?

649 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:14:43 ]
>>648
ヨチヨチwww



650 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:21:49 ]
なんかヨチヨチレスしかできないかわいそうなやついるな

651 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:52:27 ]
なんで技術者、学生以外でこんな板見てんだか・・・

652 名前:デフォルトの名無しさん [2008/06/03(火) 02:16:25 ]
初心者スレで同様の質問をしたのですが、相手にされなかったのでこちらで再度お聞きします。
ListViewのdetail表示時に行間を広くするにはどうしたらいいのでしょうか?

653 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 02:42:12 ]
ListViewItemのStyleあたりで設定できなかったっけ?
出来なかったらごめん。

654 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 09:19:23 ]
ImageList使う

655 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 12:20:34 ]
お前には無理だからさっさと諦めろ。

656 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 13:35:14 ]
>>652
>初心者スレで同様の質問をしたのですが、相手にされなかったのでこちらで再度お聞きします。
馬鹿じゃないの?
まじめな話。


657 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 14:07:08 ]
UserControlを継承したクラスを作って
クリックされた箇所に丸印を描画するようなプログラムを作るとしたとき。
Click()イベントで、クリックされた箇所を記憶し
Invalidate()でPaint()イベントを呼び出してクリックされた箇所を描画する。
という動きになるのでしょうか?


658 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 15:01:12 ]
はい

659 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 15:19:56 ]
フォームエディタで上にコントロールを乗せないなら、
UserControlじゃなくて、ただのControlからの継承でいい。



660 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 17:57:36 ]
>>658
>>659
どうもありがとうです。

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

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

(2)だったら特に背景塗りつぶし過ぎに関しては何も考えなくてよいのですが、
Paintルーチンで子オブジェクトにGrapicsオブジェクトを渡すサブルーチンコール形式になると思うのですが、なんだか嫌なのです。
一般的にこういうことをやりたい場合にはどうしますか?
変なことを言っているようだったら指摘してください。

661 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 18:02:28 ]
拡張性を考えれば当然後者だろ

662 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 19:57:03 ]
WPFなら前者だね

663 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 20:56:09 ]
Excel使え

664 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 21:37:46 ]
どこかにチャートコントロールあったはず

665 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 21:39:16 ]
ZedGraphとか

666 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:37:23 ]
ZenGraphってスクロール機能つけられる?

667 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:45:33 ]
便乗で質問なんですが
ZedGraphとかNplotを仕事(商用)として使ってる人いますか?


668 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 23:25:12 ]
ListViewの編集はなんで先頭のカラムしかダメなの?
面倒だね。

669 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 00:59:59 ]
WPFなら自由自在



670 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 01:18:50 ]
いやそういう話じゃなくて。

671 名前:660 mailto:sage [2008/06/04(水) 10:13:48 ]
皆さま。
ZenGraphとかNplotとかあるんですね。
これらを使うかどうかはともかく、これらの実装を参考にさせてもらいます。
どうもありがとう。


672 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:20:56 ]
クラスライブラリを作ってるなら全然アリ
単一プロジェクトなら無意味

674 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:29:34 ]
他のアセンブリに公開するつもりがないならinternalでいいんじゃね

675 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:53:36 ]
C++から入ると、friendが無いのがちょっと不便に感じるね。

677 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:56:41 ]
friendは邪悪だからなくていいよ。

678 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 21:22:41 ]
partial使えば内部型でもファイルを分けて書けるよ

679 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 21:31:51 ]
>>676
主にテスト用途だけどFriend Assemblyってのがある。
通常はprivateな型やメソッドをテストするのに使う。



680 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 21:57:45 ]
>>675

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



681 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 22:03:44 ]
お前だけ
Comparer<T>.Defaultとか例を挙げたらキリがない

682 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 22:10:23 ]
ああすまんComparer<T>.Defaultは違うね
Stream.Null(実際の型はStream+NullStream)とか

683 名前:デフォルトの名無しさん [2008/06/04(水) 23:40:00 ]
>>680
君だけではないよ。
Factoryってこうやらないだろ?



684 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 23:59:22 ]
XmlReader.Createとかあるでしょ
一応MS的にはこういうのも「ファクトリメソッド」と呼ぶらしい

685 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 00:09:09 ]
どこが変だとか、どうあるべきかとか書いてくれないと答えようがない

GetEnumerator()の実装例でyield returnを使わないケースで内部クラスを使っている
なおC#の内部クラスはJavaのstaticな内部クラスと同等だから誤解のないよう

686 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 01:55:39 ]
というか基底クラスであるPersonクラスが具体的な派生クラスを知っているのが不自然。
気持ち悪い。

687 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 03:35:19 ]
既定クラスがBuilderを兼ねてるのがいやだったらPersonとファクトリーを分離するのは問題ない。
ただ、拡張可能なようにBuilderやStrategyパターンで作ってゆくと、
クラスやインターフェイスの数がすごいことになるから過剰な汎用化には反対したい。

688 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 04:39:40 ]
突然質問してごめんなさい。

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

ちなみに今は実際にソフトウェア作ってみて、わからないことがあったら調べて・・・って感じです。

689 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 07:52:47 ]
C#で資料が少ないとか言ってたら何も覚えられん。



690 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 08:05:32 ]
MSDNに全て有る

691 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:07:15 ]
Stategy自体選択ミスに1票

693 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:08:56 ]
switch最強伝説を更新するんですか? ('A`) >692

694 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:14:22 ]
C#自体の選択ミスに1票

695 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:19:38 ]
C#のEnum型とswitchの相性の良さは無敵だぉ!! デザパタ厨涙目! プギャー(^0^)9

696 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 10:39:13 ]
>>566
サブクラスのコンストラクタが動く前に
オーバーライドされた仮想関数が呼び出されるわけで
ちょっと気持ち悪いですね。

699 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 10:41:09 ]
>>691
あまりにも頻繁にUpdateが呼ばれるならやや効率は悪いだろうな。
でも多分誤差レベル。
大抵ほかの処理でそれ以上にメモリ使ってるだろうから。

ただ、作りとしてはぱっとしないな。




700 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:18:52 ]
>ぱっとしないな
ぶっちゃけそこなんです。

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

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

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

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

※最大メモリ使用量より速度優先
※速度ねらいで、ConcreteA、ConcreteBに変数名の重複を許さないぐらい程度は妥協範囲。

701 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:22:09 ]
delegateの"e"が抜けてる。

702 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:25:28 ]
デリゲートなんかは下手に保持しとくより毎回newした方が速いらしいね

703 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:32:07 ]
thx
delegateは捨てましょう。

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

JITのnewまわりの最適化を見られれば、それでも疑問は解決できます。

704 名前:702 mailto:sage [2008/06/05(木) 11:36:07 ]
>>703
意味わかってる?
デリゲートが遅いって言ってるんじゃなくて,デリゲート型のオブジェクトをnewするときの話だよ

705 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:45:56 ]
>704
ミスリードです>< すいません。

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

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

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



706 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:05:13 ]
newの最適化っつっても、確保に関しては基本的にマネージヒープの
未割り当て領域へのポインタをオブジェクトサイズ分進めるだけだぞ。
もちろん頻繁にnewすればGC起動の機会を与えることになるから、
パフォーマンスを気にするならインスタンスのキャッシュは基本ではあるが。

708 名前:691 mailto:sage [2008/06/05(木) 12:34:44 ]
 話を長引かせる様な書き方をしてしまってすいません。
>696 >700-701 >703 >705-706
まで私ですね。

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

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

<ちら裏>
switchしかりnewも、CLRやJITの最適化って非線形で決めてナシなんだな。
皆さん好きですか?
私は、規模が変わるたびにバッチテスト・ベンチマークテストする事になりそうで('A`)

709 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:51:30 ]
大抵現実に影響があるようなパフォーマンス問題は
そんな細かい話ではない。




710 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:53:58 ]
デリゲートがキャッシュするよりnewってのは初めて聞いたな。
どこででた話?
それかひょっとして非常に使用頻度の低いデリゲートの話?


711 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:56:14 ]
>709 けどそれって、C#の開発経験があるって言えるんですか?
毎日好きな言語で遊んで、顧客が限定してきた時だけC#って奴と差がないじゃん。

712 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:03:29 ]
visual studioでメッドを全部折りたたむ技ってないですか?

713 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:05:09 ]
>>711??
何のことを言ってるんだ?


714 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:06:11 ]
こういう事を
>そんな細かい話
って言い捨てること。

715 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:18:25 ]
>>714
プロならコストと効率を考えて、大して効果の上がらない箇所の最適化に
拘って労力を注ぐくらいなら、もっと他にすることがあるだろうと思うがな
そういうところをいじくり倒せるのはむしろ趣味で遊んでる奴のほうじゃね

716 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:25:04 ]
>715
>プロならコストと効率
そりゃどの言語でもそうだよ。
話をループさせてることに気付いてる? 会話下手?

俺は優しいから"C#でのコストと効率"の経験って解釈してあげるよ。

717 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:28:38 ]
>>716
煽る以外に言い返す言葉が見つからないならレスするなよ

718 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:33:19 ]
>715のプロとしてのコストと効率の経験と、趣味で遊んでる奴との混同具合が心配です。

719 名前:デフォルトの名無しさん [2008/06/05(木) 13:46:50 ]
usingを使ってStreamReaderを読んでますが、
whileで最後まで読んで、もう一度whileで読みたいのですが、
どうすればいいんでしょうか。



720 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:52:18 ]
>>719
こういうこと?
streamReader.BaseStream.Seek(0, SeekOrigin.Begin);


721 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:54:51 ]
>>712
アウトラインのことなら、編集 - アウトラインで

722 名前:719 mailto:sage [2008/06/05(木) 14:00:03 ]
>>720
おお!!出来ました!助かりました!
ありがとうございます!


723 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:16:28 ]
優先度の問題。
そんな細かい話を気にする必要があることだってあるが、
現実には引っかかるのはもっと別のところであることがほとんど。
もっと気をつけるべきとこは他にいっぱいある。
ってだけの話、無意味とは言わん。


724 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:19:08 ]
だろうね。 大概解ってるだろ。
俺、>709って初見じゃないもん。 定期的に湧く厨だと思った。

725 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:19:37 ]
条件分岐の効率なんて、文字列処理一発でも挟まれば全く無意味。
だから処理効率より設計の方を重視する方がいい、ほとんどの場合は。


726 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:24:24 ]
>>724
誰かさんはこの程度でベンチテスト毎回やるんだと言ってるから相当優先度が高いんだろ
解ってるとは思えん

727 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:32:37 ]
その時も文字列処理を引き合いに出してたな。
だいたい、その辺りにC#の用途の向き不向きボーダーラインがあるんかな。
More Effective C++みたいなイメージでは不毛と。

729 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:00:24 ]
>>727
肝心の例外情報握り潰したら話にならんだろ
つか今時CurrentDirectoryかよ



730 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:02:22 ]
>729は catch の後ろに何もない事を言っている様だ。
try .. catchのヘルプに戻ろう。

731 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:35:17 ]
CurrentDirectoryの何が悪いのかわからん。
まさかレジストリやマイドキュメントに保存するのか?W

732 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:39:09 ]
カレントにするやつは無知か手抜きだろ

733 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:46:27 ]
exeのフォルダならともかく、
カレントは起動方法によって変わるから問題だろ
元々そういう仕様なら関係ないけど

734 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:46:32 ]
カレントディレクトリがショートカットとかで変更されたらどうするんだ?

735 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:49:56 ]
俺の負けだ。 言わせてくれ。
そこは

   throw; //スルー

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

質問者おいてこぼりだが、確かに>728の模範解答は期待。

736 名前:727 mailto:sage [2008/06/05(木) 15:54:41 ]
聞きたいのはCurrentDirectoryのところではなく、
usingステートメントをtryで囲んでもいいのかな?と思ったのです。

読み込み失敗時の例外情報はヘルプでFileStreamを調べたのですが例外の種類がわかりませんでした。
例外の種類はどうやって調べたらいいんでしょうか?

737 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:00:52 ]
起きえる例外がわからなければSystem.Exceptionで受ければいいだろ。
起きる例外はMSDNに載ってると思うけど。

738 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:15:36 ]
どうして駄目だと思った?



740 名前:727 mailto:sage [2008/06/05(木) 16:31:25 ]
>>739
usingステートメントって例外が起きた時にステートメント内のdisposeを保証してくれるんですよね。
なのでtry句が複雑にネストしてしまう気がしたからです。
例外が自分の環境でも再現出来ればいいのですが、
他人の環境なので再現できないので、メッセージボックスを仕組んで原因を調べようかなと思いました。

741 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:43:55 ]
try句が複雑にネストしてしまう、の意味が分からない。

742 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:50:38 ]
蒸し返してすまんが、CurrentDirectoryでひとこと。
コンソールアプリならカレントディレクトリは普通に使う。
GUIの場合は意味がない。
exeのあるディレクトリがカレントディレクトリであると考えているなら明らかに間違い。

Directory.GetCurrentDirectory() + "\\" + "data.xml", 
この部分は余計。相対パスならカレントからの相対パスになるので
"data.xml"
だけでで十分。

744 名前:727 mailto:sage [2008/06/05(木) 17:04:26 ]
>>742
分かりやすい説明ありがとうございました。

>>743
参考になりました。ありがとうございます。

745 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 17:21:07 ]
>>742
>Deserializeとfs.Dispose()の両方で例外が起きた場合。
キャッチされるのは後からの例外の方だったよね?

746 名前:デフォルトの名無しさん [2008/06/05(木) 20:00:17 ]
質問させていただきます。
フォーム上に画像を表示するプログラムを書きたいのですが、
イベントとして、フォームが表示されたと同時に描画したいのです。
このような場合、イベントはどのように記述すればよいのでしょうか。
もしくは、イベントを使わない方法があればそちらもご教授ください。

747 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 21:01:16 ]
GUIのプログラムの中で
GUIとは何の関係もないオブジェクトAが居ますが
デバッグ用途でGUIのとあるメッセージウィンドウに文字列を出力させたいとします。
オブジェクトAのようなGUIに無関係なオブジェクトが大量に居るような場面で
それらの出力文字列をGUIのとあるメッセージウィンドウに文字列を出力させたいわけですが。
どうやってそのオブジェクト達とメッセージウィンドウ間をインターフェイスさせればよいでしょうか?
Qtをちょこっと触ったことがあるのですが、その場合はsignal/slot機構を使って、わりと簡単に実現できたのですが
C#の場合はsignal/slotの代わりにeventを使うことになるかと思います。
eventの型となるdelegateをどこで宣言するかなぁ〜と考えるのですが、
どこにも宣言したくありません。
どうすればいいですか?


748 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 21:50:02 ]
メッセージ表示するもしくは通知するTraceListenerでも作ればいいんでない?


749 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 22:16:43 ]
>>735ってどういう意味?



750 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:15:02 ]
>>743
逆に言えば、カレントディレクトリがexeのあるディレクトリであることを
プログラム側で保障すれば問題ないということでもある

まあ、その場合でも相対パス使うだろうから、
Directory.GetCurrentDirectory()は不要だけどな

751 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:18:57 ]
>>750
Open/Saveダイアログを使うとカレントディレクトリが動いたりしなかったっけ。
以前はまった記憶がある。

752 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:37:16 ]
ていうか、おまいらデリゲート使うときに毎回宣言してるの?
自分はDelegate<Result,Param1>とか宣言しといて全部それつかってる。
おかげでFuncとどう整合性とろうか思案中だがなぁorz

753 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:42:08 ]
イベントハンドラはEventHandler<TEventArgs>使え

754 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:59:49 ]
outやrefに対応できないんだよな…


755 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 00:05:31 ]
class Reference<T> { public T Value { get; set; } }
こんなの作っとけば

756 名前:750 mailto:sage [2008/06/06(金) 00:07:58 ]
>>751
確かに、FileDialog使うときは

RestoreDirectory = true

にしないとまずいな
てか、既定値がfalseとかありえん

757 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 00:48:22 ]
>>755
世の中そうもいかんこともあるのよ。
リモーティングとか。


758 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 01:29:58 ]
>>752
まさにこういう使い方をするために、宣言時に識別子を省略出来たらいいのに。

759 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 04:03:17 ]
>>754
それは知恵が足りないだけ。
できるよ。



760 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 07:08:25 ]
マルチプルアイコンを含むIconインスタンスから、各アイコンを取得したいのですが、
どうすればよいのでしょうか。

761 名前:760 mailto:sage [2008/06/06(金) 07:46:58 ]
自己解決しました。
Icon.Save()でバイナリデータを得て、それを分割した上でIconコンストラクタに与えればいいですね。
もっとスマートな方法がありそうな気もしますが、とりあえずそれでいきます。

762 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 09:30:47 ]
コンストラクタでSize指定だけはできる

763 名前:747 mailto:sage [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個だけっていう想定。

何かいい方法はありませんか。


764 名前:747 mailto:sage [2008/06/06(金) 12:19:13 ]
もしくは
public event void delegate(object sender,params object[] arg) printf;
のような感じで
名無しの型を宣言すると同時に変数定義みたいなことができたらそれだけでいいですね。
こういうことって可能なんでしょうか?


765 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:46:17 ]
DebugListener/TraceListenerで十分だと思うけど。

767 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 13:27:34 ]
>>763
talkerの役割がよくわからないな。
実際に表示する部分なのか、それともメッセージを発行する元なのか?
それからdelegateをeventと1対1で作らなければいけないとか思ってないか?

768 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 14:49:41 ]
>>761
P/InvokeでExtractIconExとか。

769 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 17:41:02 ]
EventHandler<TEventArgs>を使いたくないのだったら、普通にAction<T>でも使うってのは?
オブジェクトAの中に
public event Action<string, object> printf;
を実装する。

これならカスタムクラス使わんで済むでしょ。



770 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 00:33:51 ]
正直msのガイドラインなんか知ったこっちゃ無い


772 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 00:55:01 ]
なら使うな

773 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 06:58:46 ]
ここはCompact Frameworkの質問はおk?

774 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:01:03 ]
だから使わないんだって

775 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:01:24 ]
C#にからめればOK

776 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:03:46 ]
Compact FrameworkでWindows Mobile用2chブラウザを作ってるんだが、
スレ一覧にListViewを使ってるんだ。
ListViewItemCollectionにAddRangeが無くてforeachでスレデータ回してアイテム作ってAddさせてるんだが
どうにも低速なんだ。
AddRangeの代わりになるものは回してAdd以外ないだろうか。

777 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:19:17 ]
BeginUpdateやってる?

778 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:20:04 ]
>>777
やってる。

779 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:53:10 ]
ListViewへの追加はPCでもかなり遅いからなあ
1000件くらいになりそうなときはVirtualModeにしてるけど、Compactじゃ使えないのか



780 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:55:15 ]
>>779
2chの板のスレ一覧データだし、700項目くらいPCでやった場合ドパァッって表示されるんだがなあ。
VirtualはCFからは使えないな。

781 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 08:36:09 ]
自分で擬似的なものを描画するのが一番速いのかな

782 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 08:56:03 ]
MSのガイドライン無視したクラスライブラリって見てて恥ずかしい

783 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 09:15:58 ]
Formの上でGridクラス作ったが、20万件でも一瞬で追加・表示されるようになった(´・ω・`)

784 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 09:17:25 ]
ListViewってMSの中の底辺プログラマが作ったんだろうか

785 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:12:31 ]
作ったのがだいぶ昔のことで、
ここまで大量のデータが取り扱われるとは考えられなかったからだと思う。

786 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:29:20 ]
描いた円を上キーでジャンプさせるにはどうすればいい?

787 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:41:02 ]
意味が分かりませんがKeyDownイベントでそういう処理書けばいいんじゃないでしょうか

788 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:54:23 ]
いや、そのKeyDownの中身が分からなくって

789 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:56:34 ]
KeyDownイベントの中身で円を描く場所を変えて描画処理に投げる



790 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:56:35 ]
円をどうやって描いてるかジャンプってどういう意味なのか分からなくって

791 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:58:45 ]
プログラミングが下手な人って質問も下手だよね

792 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:00:20 ]
ダブルバッファにしろよ
画面ちらつくぞ

793 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:20:11 ]
上向きの初速を与えて、一定の下向きの加速度を受けながら運動するようにしたい。
例えば、20進んで一瞬停止して、15進んで一瞬停止して、の繰り返しでいいのか

794 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:26:27 ]
v = v0 + gt と言う式を当てはめれば良いだけじゃん

795 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:32:28 ]
↑アホ

796 名前:デフォルトの名無しさん [2008/06/07(土) 12:37:46 ]
tをどうすれば?

797 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:40:12 ]
タイマーでも使ってろ

798 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:48:39 ]
変数tを入れれば位置まで出せる公式があったろ
リアルにやるならtをタイマーを使って現実時間とぴったり合わせりゃいい

799 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:58:07 ]
加速度を9.8/sずつ減らせばいいんでね?



800 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:23:50 ]
つかいつの間に重力加速度の話になったんだ

802 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:44:46 ]
>>800
それをwhileに入れれば出来そうだけど、ジャンプ中も左右移動したい

803 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:46:52 ]
なんかこのスレ方向性分かんなくなってきたなw


804 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:55:23 ]
ジャンプ中左右移動したいなら

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

void KeyDown(...)
{
switch(key)
case ←:
   左にちょっとずらす
...
}
こんな感じで出来るのかな
普通は
while(true)
{
入力ゲット
 位置更新
 描画
 時間が来るのを待つ
}
こんな感じなのかな
よく知らん

805 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:51:23 ]
って書き終わって凄く後悔した
スレ違いにもほどが

807 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 19:23:48 ]
>805はY方向だけなので、Xは別にしないとだめだぞ。
横への移動を表す加速がY方向へは関係しないとき、XとYは独立して扱えるからよい子のみんなは気をつけよう。

808 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 19:40:07 ]
気をつけるまでも無く自明だと思うのですが!

809 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:07:23 ]
型を書いてないからアレだけど
ベクトル型を使うのが普通なんで



810 名前:デフォルトの名無しさん [2008/06/08(日) 10:51:16 ]
過疎

811 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 11:54:09 ]
IDEの使い方に関するおすすめの書籍は?

812 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 17:17:44 ]
ListViewで特定のカラムだけ非表示にすることは出来ますか?
リストには追加するのに非表示にするという、一見無意味な操作なのですがそうしたいのです。

813 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 18:36:00 ]
>>812
ListViewのColumnHeaderで特定のカラムだけWidth=0にすることが出来ませんか?
リストには追加するのに非表示にするという、一見無意味な操作なのですがそうしたければそうすることもできるでしょう。

814 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:05:09 ]
>>813
非表示にしたいカラムだけ幅調整不可って出来ますか?
Widthを0にしただけでは幅調整されて見えてしまうので・・・。

815 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:00:43 ]
ListViewItemから派生させたクラスで持つようにして
そのオブジェクトをListViewに追加すれば?

816 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:12:26 ]
つかTagで十分だろ

817 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 21:27:03 ]
>>815
なるほど。ありがとうございます。
>>816
Tagは使ったこと無いので調べてきます。
ListViewの方ではなくListViewItemの方ですよね?

818 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:33:03 ]
ColumnResizingとかそんな感じのイベントあるから、
そこで非表示にしたいカラムが幅調整されそうになったら制限すればいい。

819 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:34:14 ]
>>818
なるほどありがとうございます。
Tagを使ったものがまさに用途にあった使い方でした。



820 名前:デフォルトの名無しさん [2008/06/09(月) 10:09:01 ]
pc11.2ch.net/test/read.cgi/tech/1212972014/

821 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 12:07:21 ]
メソッド呼び出し中にキー入力を受け取るにはどうすればいいですか?

822 名前:デフォルトの名無しさん [2008/06/09(月) 12:16:03 ]
>>821

メソッド呼び出しを別スレッドにして、メインスレッドでキー入力を
待てばいいんじゃない? 全然はずしてたらご免。

823 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 12:17:01 ]
モードレスダイヤログ?

全然外してるかも。

824 名前:あにす ◆sGTL1yK0.6 mailto:sage [2008/06/09(月) 18:46:26 ]
DoEvents()?
外してるかな…。

825 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 06:30:01 ]
>>825
ということは>>702はデマってことか

827 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 07:01:43 ]
デマというかもうちょい境界線が上なんだろうな。

828 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 11:32:48 ]
質問
以下のようにListのSyncRootで排他処理を行っている最中に
Listの実体を入れ替えた場合、
この排他でLock開放待ちをしていたほかのスレッドはどうなるのでしょうか?
lock (((ICollection)(mylist).SyncRoot)[

if(xxx){
mylist = new List();
}
}


829 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 12:23:17 ]
とりあえずそんなキモいことするな

mylistの置き換えより先に別スレッドがmylist.SyncRoot取得してたら古い方でロック待ちするし
置き換え後にSyncRoot取得したら新しい方でロック待ちする
古い方でロック待ちに入ったらロック取得したスレッドのlockステートメント終了でロックに入る
新しい方ならロックされてないから待たないでそのままロック取得するだろう



830 名前:828 mailto:sage [2008/06/10(火) 12:45:29 ]
やっぱり駄目ですよね。
コレでは排他処理の意味をなさない。

わかりました!!有難う御座います。


831 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 21:33:47 ]
ListViewのTagで思い出したが、なんでシリアル化してもTagは保持されないのですか?

832 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 21:51:45 ]
何が入ってるか分からないから
保持しても意味がないものが入ってるかもしれないから

833 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:19:11 ]
ストアドプロシージャです。

836 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:21:23 ]
リンクの冒険

837 名前:デフォルトの名無しさん [2008/06/10(火) 23:30:44 ]
>>835
お返事ありがとうございます。
ところで、クライアント側でユーザーが複数項目を選んで、
編集して、それで更新みたいな処理の流れだと、可変引数が
使えないストアドでは対応しきれないのでわないでしょうか?

838 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:40:52 ]
>>836
えーと……ゼルダの伝説?

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

LINQ to SQLがSQL Server限定なのがあれだけど

839 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 14:58:07 ]
>>837
「バッチ処理のパラメータを格納しておくテーブル」を作るという手もある。
そのテーブルにINSERTしてからバッチ用のストアドプロシージャを起動して、
ストアドの中でテーブルを読み込んで、それを元に処理を行う。
結果のサマリーも格納するようにすれば、バッチ処理の履歴も兼ねることができる。



840 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 21:21:57 ]
そこにはExcelがインストールされていないなんてオチじゃないよな。

「00024500-0000-0000-C000-000000000046 80040154」でググって
最初に出てきたところに書いてあった事例がまさにそうだっただけだけど。
forums.msdn.microsoft.com/en-us/netfxbcl/thread/5a338c18-b2e5-44b5-b15a-530d99a34656/

842 名前:840 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 21:31:00 ]
>>842
そりゃ、できんわな。それができたら、みんなExcel買ってくれなくなってMSが困っちゃう。

844 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 21:43:55 ]
>>842
だって、そのExcelファイルの操作って、
Excelが持っている機能を呼び出しているだけだ。
普段目にするUIはExcelの1つの顔にすぎない。

846 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 21:59:28 ]
>>844
YES

847 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:01:05 ]
解放忘れとかやりまくってそうだな

848 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:10:55 ]
こんなこと言ってる奴がまともに作れてるわけないだろ

でバージョン依存したくないならせめてVB.NETにしとけ

849 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:15:41 ]
WSHのVBSとか呼び出すのが楽だよ



850 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:19:02 ]
>>845
そういうことですね。
>>846
了解しました。
>>847
一応タスクマネージャのプロセスタブにEXCELは居ないので大丈夫かと...

ところで、
開発マシンにEXCEL10しか入っていませんが、
その他のバージョンのEXCELも扱いたい場合に必要になってくるのが
PIAとかいうものなのでしょうか?


851 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:40:52 ]
YES

852 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:42:04 ]
あんたは質問を有料にしたいわ

853 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 23:58:05 ]
DateTime型のToString()の書式設定はどんな環境の場合に変わるんでしょうか?
たとえば("d")ならカルチャによって変わりますが、
カスタム書式の("yyyy/MM/dd")も環境によって変わるようです。
どんな環境で変わるんでしょうか??

854 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 00:37:13 ]
>>853
質問の意味がよくわからないけど「カルチャが異なる環境で変わる」ということが聞きたいのかな。
CurrentThreadのCurrentCultureとかCurrentUICultureとかを色々変えながら動かしてみると
わかりやすいかもしれない。
わかりにくいかもしれない。

855 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 00:37:53 ]
カルチャによって変わるよ。

"/" はカルチャ依存の日付区切り文字だし、
この世には和暦とかヒジュラ暦とかあるだろ。

856 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 00:47:15 ]
>>854-855
ありがとうございます。
"/"はカルチャ依存なのですね。
カスタム書式なら"/"も表示してくれると思っていたのですが、それすらも期待してはいけないのですね。
自分の環境では再現できない&相手の環境がよくわからないので質問しました。
では"yyyyMMdd"ならどの環境でも期待通り"20080612"になることを前提にしていいのでしょうか?

857 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:11:03 ]
>>856
>>855の最後の行を読んで下さい><

DateTimeFormatInfo.InvariantInfoわたしとけばいいよ。

858 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:17:26 ]
>>857
なるほどありがとうございました!
yyyyでも和暦だと20とかになるんですね。
DateTimeFormatInfo.InvariantInfoで解決しました。



860 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:18:12 ]
>>858
ありがとうございました。勉強してみます。

861 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 04:18:07 ]
Compact FrameworkのWebBrowserでDocumentTextにHTML設定するとプログレスバーが出てくるのが嫌なんだけど
非表示にする方法はあるだろうか?
それともHtmlView.dllをラップしたほうが賢明だろうか

862 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:14:25 ]
できるだけメモリ使用量を減らすため、
IDisposableを実装したほうが良いクラスの判断でまよっています。

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

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

また、stringやbyte配列はDisposeメソッドがないので、どうやってメモリを解放するのかもわからないです。

863 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:38:41 ]
全部IDisposable無用

864 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:48:12 ]
Disposeを実装するのは、自前でネイティブリソースを扱う時か
Disposeを持つクラスをメンバとして持つ時だけで良い。

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

性能を犠牲にしてでもどうしても局所的にワーキングセットの縮小をせまられるのなら
参照をnullにしてGC.Collectを呼び出す。


865 名前:862 mailto:sage [2008/06/12(木) 12:58:06 ]
>>863-864
ありがとうございます。

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

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

処理終了時にGC.Collectを呼び出すことにします。

866 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:22:05 ]
GCでオブジェクトが回収されるときの動作は
1 デストラクタ(ファイナライザ)があればそれを実行する
2 メモリの回収
Disposeは1を代行するもので、メモリの回収はあくまでもGCが行う。

867 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:22:22 ]
質問
RichTextBoxに画像を挿入したいんですが、無理?

868 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:27:55 ]
とりあえずクリップボード越しなら可能

869 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:35:42 ]
>>868
サンプルコード貼ってある所知りませんか?



870 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:41:09 ]
検索エンジン様が知ってることを知ってる

871 名前:862 mailto:sage [2008/06/12(木) 17:31:00 ]
>>866
ありがとうございます!
だいぶ勘違いしていました。
デストラクタでDispose呼んでも意味ないのですね。

872 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:05:15 ]
え、デストラクタとGCは関係ないんだと思ってた…。
じゃあデストラクタが実行されるタイミングってスコープを抜けた瞬間とは限らないの?

873 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:10:28 ]
C#でデストラクタ?

874 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:13:38 ]
>>872
全然関係ない。スコープと一致させたいときにはusingを使わないといけない。
逆に言えばそれがIDisposeとusingの存在意義。

>>873
まあC# 1.0のころはデストラクタって言っていたはずだし、いいじゃないか。

875 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:16:20 ]
DisposeとGCも全く関係ないよ
種も仕掛けもない本当にただの普通のメソッド

876 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:18:11 ]
あ、そっか。C#はデストラクタなんてほとんど書かないや。

877 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:20:35 ]
本当にどうしてもどうしても必要な場合でなければむしろ書いてはいけない

878 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:03:21 ]
パフォーマンスとかメモリとかやたら気にする奴が
こういうでたらめやって事態を悪化させやがるんだよな…

GC呼ぶなんてやめとけよ、特にWebではな…




880 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:05:54 ]
余計な一言はいいから、ね

881 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:07:23 ]
いつでも回収できるメモリは空いていると同じということを理解できるまでには修行が必要じゃて
セッションにでっかいオブジェクトの参照抱え込んだままで、GC.Collect呼びまくるとかやってそう

882 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:08:02 ]
これくらい言っとけばたまたま見かけて疑問を持つ奴が増えて好都合

883 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:12:21 ]
そういやあれ不思議なんだよな。
メモリとか異様に気にするのにセッションとかは湯水のように平気で使うのな。


884 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:21:12 ]
結局、明確にスコープ抜けたときにリソースを即座に解放して欲しいという場合で複数から参照されてる場合には参照カウント的なものが必要になるんだ世根(´・ω・`)

885 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:27:41 ]
COM InteropのRCWがそういう具合になってますね。
もう少しスマートにできなかったものか。

886 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 21:34:01 ]
ttp://unicode.org/Public/UNIDATA/EastAsianWidth.txt

ここに、UnicodeにおけるCJKの表示幅の規定があるから、
適当に文字列の表示幅を計算して残りを埋めれば良い

888 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 14:35:46 ]
インストーラーの起動条件でJ#2.0再配布パッケージを
必須にする方法教えて下さい。



890 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:12:29 ]
スレ違い

891 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:16:12 ]
いや 殆どC#で一部だけJ#使ってるんすよ…

892 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:17:38 ]
いや、その理屈はおかしいだろ…

893 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:01:44 ]
その発想はなかったわ
ってかVSスレで聞いたら?

894 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:03:22 ]
ほい 逝ってきます。
すまぬかった

895 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 13:04:03 ]
普通にgetItemコレクション作ってforeachでList<int>にAddしてけばよくね?

897 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 13:09:34 ]
デリゲートの引数にコレクション渡してAddしてもらえば?

898 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 19:01:37 ]
>>897の考え方が一番正当でしょ
コレクションをそのまま渡すんじゃなくて,値を登録するためだけのクラスを作って引数に渡す

901 名前:900 mailto:sage [2008/06/16(月) 19:05:54 ]
考え方は,ってだけだよ
マルチキャストは使うのはあんまり良くないかも

902 名前:895 mailto:sage [2008/06/16(月) 20:14:14 ]
皆さんレスありがとうございます。
とりあえずはコレクションを引数に渡すやり方で実装できました。
ラムダ式を使った方法を教えてくださった898,899さんのやり方は
ちょっと理解ができませんでした・・・申し訳ありません。
デリゲートのコレクションは使ったことがないので勉強してみたいと思います。


903 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:28:26 ]
ITfMessagePump(TSFのInterface)をC# Formアプリで使ってる人いる?
メッセージループが競合してどうすりゃいいか、分からんのだが・・・。

904 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:32:33 ]
いません

905 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 02:39:48 ]
そうか。だよなー。

906 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 02:53:11 ]
>>903
ご想像通りメッセージループを自前のものに置き換えるしかない。

907 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:09:54 ]
その方法を知りたいな

908 名前:デフォルトの名無しさん mailto:sage [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の実装もちゃんとやっておくとベター。

909 名前:907 mailto:sage [2008/06/17(火) 03:29:53 ]
>あとはExecutionContextの実装もちゃんとやっておくとベター。

SynchronizationContextの間違い。すまそ。
msdn.microsoft.com/ja-jp/library/system.threading.synchronizationcontext.aspx



910 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:31:08 ]
ぐあ
909==908ね。

911 名前:908 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 04:24:01 ]
>>912
>おkな理由を教えてもらえると嬉しいな。

PresentationFramework.dllが中でやっていることがまさにそれだから、で説明になる?
System.Windows.Threading.Dispatcher.PushFrameImplおよび
System.Windows.Threading.Dispatcher.GetMessageと全く同じことをすれば動く。
で、納得してもらえるんだろうか……

914 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:36:47 ]
たとえばNetworkStreamのBeginReadでAsyncCallbackを指定したとする。

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

この例外をメインスレッド、少なくとも呼び出したスレッドで処理するにはどうすればよろしいでしょうか?

915 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:42:52 ]
例外を補足できない?

916 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 10:10:56 ]
そこで // 使っちゃ駄目だろ

919 名前:917 mailto:sage [2008/06/18(水) 10:17:43 ]
>>918
Σ(゚д゚lll)
//はずしたら上手くいきました。

なぜこういう事になるのか勉強して出直してきます。
ありがとうございました。



920 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:16:35 ]
javaばっかりでいつも不思議に思っているんですが、
キーワードでas base isとかがかぶったらどういう回避方法があるんでしょうか。


921 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:21:07 ]
何を言いたいのか良く分からん

922 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:28:48 ]
@as @base @is

923 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:36:16 ]
ソース上で既に使っていて、キーワードとかぶっているときはどうなるんでしょうか。
またソースに手を入れて変更しないとダメなんでしょうか。

924 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:51:53 ]
1.0から3.0までで変数名に使えないキーワードは増えてなかったと思うが

925 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:38:42 ]
c, javaのソースからc#に移植というか少し手を入れるときキーワードの問題が発生しませんか?
特にc#は独自のキーワード名が多いみたいですけど。


926 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:41:35 ]
勝手な拡張もいいんですけど、もとのソースの関数名がas, in, baseとかだとどうするんでしょうか?
関数名のAPIの方を変更できないし泣きませんか?
そうするとC#で作る気力も無くなるんですけど。

927 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:43:58 ]
C#はjavaじゃないから嫌いだとか
子供に生まれてこなくて良かったとか言い出す奴らは
来てもらわなくてもいいよ


928 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:48:49 ]
いや、そういうことじゃないんですけど。
まともにプログラミングの話を出来ないなら、別にいいですよ。
噂どおり、C#の人はC++厨房と変わらないようですねw

929 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:53:56 ]
asとかを使いたければ@asとしてくれ
他言語からの移植なんてそう簡単にはいかんよ



930 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:54:39 ]
typedefとか#defineが欲しいといいたいのかな?泥沼だと思うがね。
同じ言語の世代間の違いならコンパイルオプションや
pragmaのようなコンパイル指令で逃げるのだろうけど、
他言語からの場合は良識に任せるしかないな。
移植を前提にしたコードでbaseとかinとかselfとか変数に
使ってたらそういう名前を使った奴がアホだろ。


931 名前:デフォルトの名無しさん [2008/06/18(水) 20:56:23 ]
簡単なことだし、ここでちゃんと教えればすむことなのに、「C#の奴はやっぱり変人しかいないよ」とか噂を流される方がいいのかな?
まあ、>>927みたいなしきり屋がいるようなところじゃ、こっちの方がよくわかんないけど。

ここでは>>927みたいなしきり屋に従わなければいけないのですか?

932 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:58:36 ]
伊武雅刀の「子供達を責めないで」のオマージュだろね。
フルすぎるネタで若い子にはわからないぞ;;

933 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:05:04 ]
>>931
はいはい、とっとと噂を流す仕事に戻ってね。

934 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:05:46 ]
これ聞いて落ち着け
ttp://jp.youtube.com/watch?v=YaCkfvm3Oyw


935 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:21:33 ]
それをC#のスレで言って何がしたいのか分からん
嫌われてるからJavaやれってか?
そんな気を使わなくてもC#一筋なやつの方が少ないだろ

938 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:26:14 ]
C#一筋で食っていけるほど仕事がないな。

939 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:26:54 ]
Javaの新機能はほぼ全てC#のパクリなのにな



940 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:28:49 ]
だから移植前提で独自キーワード入れないでほしいんだけど。またMSの悪い癖(独自拡張?)がでちゃったんですか?

941 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:31:26 ]
昔COBOLという言語があってな。
ていうか独自キーワードってなんだよ。
Javaのキーワードが他の言語からの移植を考えて決められてるなんて初耳だ。

942 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:33:07 ]
>>940
Javaを使い続ければすむことじゃないのか?

943 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:51:19 ]
Javaって $_ みたいな名前定義できなかったっけ?

CLIだとどうなってるんだろ?

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

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

相互運用のためにその手の機能を持つことが推奨されてる。ちなみにCILは「どんな識別子でも」持てるから
限界はあるんだけどな

945 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:06:13 ]
移植するのに変数名まで同じにしたい痛い人がいるスレはここですか

946 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:07:26 ]
実際そんなに独特な予約語多くないだろ
2.0以降に追加されたキーワードは全て文脈次第だし

947 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:09:25 ]
あそうそう、コンテキストキーワードも多いっての書き忘れてた

948 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:14:03 ]
半年も使わないと忘れちゃうしキーワード多すぎだろ。
いちいち覚えるのとか別に苦痛じゃないんだけど、なんかMSに束縛されてるみたいで嫌じゃないか?
まあ、変なところがあったらコンパイラが叱ってくれるからいいんだけど…

949 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:17:23 ]
…半年はさすがに記憶力悪すぎかろくに触ってなかったレベルだろう。



950 名前:デフォルトの名無しさん [2008/06/18(水) 22:19:51 ]
scriptfpとかpackageはそのままでjavaに移植できるの?
java使ったことないんでしらんけど。

そもそも多言語移植の時に変数名そのままで移植できなきゃやだやだやだ
なんてバカかよ。ほとんど意味ないと思うんだが。
そこまでしたいならまずjavaの段階で適宜リファクタリングして移植すりゃ
いいことなんじゃねーの?

951 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:21:05 ]
ざっくり読むと
アホがjavaからC#へ移植を試みて文句言ってる
のに食いついたって感じ?
暇だなぁ、お前等

952 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:23:01 ]
J#でもつかってろよ

953 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:26:15 ]
おお、まさにJ#でこの話終わりだなww

954 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:26:25 ]
コンテキストキーワードよりもはるかに気持ち悪いのは,
インターフェイスとか抜きで特定の名前(引数)のメソッドの呼び出しに変換される機能
foreach→GetEnumerator()とかコレクション初期化子→Add(引数任意)とかクエリ式とか

955 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:28:08 ]
C#コンテキストキーワードって
get set partial where yield value と後はC#3.0で導入されたクエリキーワードぐらいだよな。

>忘れちゃうキーワード
explicit implicit stackalloc unchecked volatile あたりは時々忘れそうになる。

956 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:30:41 ]
add/removeとかも<コンテキストキーワード

957 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:30:57 ]
そろそろ次スレ立てたほうがいい?970くらいでいい?

958 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:32:24 ]
>>954
java5にも同じのあるじゃないか
Iterable/Iteratorでfor ( : ) をお忘れではないか

959 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:35:22 ]
>>958
C#のはダックタイピング的なのでちょっと違う。
多分>>954はその事を知ってて書いてる。



960 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:52:38 ]
Whereという名前のメソッドがあればクエリ式のwhere使えるんだよね

961 名前:デフォルトの名無しさん [2008/06/18(水) 22:53:33 ]
>>955
ええ!それは忘れないだろ。
それ、使わないならC#言語じゃなくてもいいでない?
ん・・・このスレのレベルは、理解に苦しむ・・

962 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:57:03 ]
>>959
了解、インターフェイスがなくてもメソッドの名前が一致してればOKという話か。
usingはなぜかIDisposable.Dispose()でないと受け付けない。
これもメソッドの名前だけで使わせて欲しいよ。

963 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:57:17 ]
>>956
リファレンスのキーワードの項に、
>>955のとクエリキーワードは載ってるけど、add/removeが載ってない
中の人にも忘れられてる?

964 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:03:23 ]
add/removeはデリゲートだけでデリゲートでも普通使わないからやっぱり忘れられていると思う。

965 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:03:48 ]
C#というのは、Javaと比べるとポインタ演算unsafeとstackallocが売りだと思うんだけど…

966 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:07:13 ]
いやなウリだな

967 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:08:34 ]
>>964
WinFormでもWPFでもコントロールのイベントはカスタムしてるのがほとんどだぜ

968 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:11:15 ]
便利なものはどんどん積極的に組み込んでアピールしていこうっていうのがコンセプトでしょ

969 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:13:49 ]
ヘジたんはむしろ抑え役っぽい



970 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:17:46 ]
抑え役だし押さえ気味だよなぁ。
というかあいつら基本的に自分たちでだいぶ使ってから出すから
まぁそんなもんかという気はする。

971 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:32:38 ]
VBと違ってクエリ演算子のサポートが消極的すぎ
中途半端に付けるくらいならクエリ式なんて無くてよかった
メソッド形式だけだとどうしてもインパクトに欠けるからなあ

972 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:32:42 ]
javaがいったいいくつ独自キーワードを取り入れたか

973 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:35:19 ]
今のC#のウリは関数型とラムダ式だろ
JavaやC++とくらべて進んでるところは

974 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:38:10 ]
次はついに動的型くるかも

975 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:42:53 ]
動的型というか、動的っぽい記述が一時的につかるようになる dynamic ブロックになりそうかな。

976 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:45:46 ]
GetEnumeratorは仕方ない。
ジェネリックがなかったころだから。


977 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:48:39 ]
Mix-in 入れてくれんかな

978 名前:デフォルトの名無しさん [2008/06/18(水) 23:49:20 ]
相変わらずC#はキモイな
どこがどうキモイかを気がついてないようだけどw

979 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:54:12 ]
>相変わらずC#はキモイな
何言ってる?
現在進行形でキモクなってんだよっ








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<244KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef