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


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

C#, C♯, C#相談室 Part53



1 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 20:11:11 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part52
pc12.2ch.net/test/read.cgi/tech/1238548552/

Visual C# 2008 Express Edition 日本語版
www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

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

680 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 17:20:59 ]
C#からUnmanaged-DLLを利用する場合についての質問です。

DLL側でThread Local Strage(__declspec(thread)を付けた静的変数)を使用し
ている場合、(DLL内の関数がC#から呼び出され)DLL内でこれにアクセスしよう
とした時にSystem.AccessViolationExceptionになるようです。(エラー画面.PNG)
DLL側を修正せずに、C#側の修正もしくは他の手段でこれを回避する方法はあ
りませんでしょうか?

www1.axfc.net/uploader/Sc/so/24967.zip&key=Test
は問題を再現する簡単なコード例です。
Test\MyDll\MyDll.cpp の18行目が__declspec(thread)を付けた静的変数で、
これを、N:\Test\MyCSApp\Program.cs の29行目から呼び出されたMyFunc(5)の
処理でszMyLastErrorにエラー情報をセットするところで例外が発生します。

Test\MyC++App は同じ処理をC++で記述した場合で、これは問題なく動作しま
す。

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

681 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 17:43:07 ]
>>680
ttp://msdn.microsoft.com/ja-jp/library/2s9wt68x(VS.80).aspx
の一番下

682 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 17:57:52 ]
C++/CLIあたりでlibを使ってラッパ作れば何とかなるかもね

683 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:44:03 ]
レスありがとうございます。

>>681
症状からして、そのページに書かれていることが起きている(C#はDLLを動的にローディングしている)
のだろうな、とは思っていたのですが、それを回避する方法がなにかあるのではないかと質問させてい
ただきました。

>>682
MangedなラッパDLLを作成し、これにMyDll.libをリンクしてみましたが、ラッパDLLがC#アプリからは
動的にローディングためか結局ダメでした。

何か、裏技がありませんかねえ??

684 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:52:25 ]
別 Exe にしてプロセス間通信するしかないだろ。

685 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:57:02 ]
C++/CLIから起動してC#側を動的ロードするとか

686 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:23:54 ]
DLLのほうを触っていいならTlsAllocを使えばいいはずだけど。


687 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 23:40:08 ]
COMのアウトプロセスサーバーでラップすると何とかなりそうだが、
激しくめんどい。
インプロセスサーバーだと駄目だった。

688 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 02:56:45 ]
一番現実的なのは>>685だろうな
マネージ側は参照だけでいいんで動的ロードとか言わんけど



689 名前:デフォルトの名無しさん [2009/08/07(金) 08:47:30 ]
.NETのWindowsアプリケーションで作成したプログラムにおいて、
ネットワークPCのドライブにあるフォルダをアクセスしようとした時、
たまたまそのPCが立ち上がっていなくてネットワーク上に見つからない
場合に長く待たされていました。このタイムアウト時間はたぶんOS
の設定で変えられるものとは思うのですが、タイムアウトにならない
うちにプログラムでアクセスを中断してしまうことは可能でしょうか?

690 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 10:09:55 ]
C#でパケットキャプチャしたいのですが、サンプルありますか?

691 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 10:18:07 ]
www.stackasterisk.jp/tech/program/howtosniff01_01.jsp
sourceforge.net/projects/sharppcap/files/SharpPcap/

692 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 11:42:39 ]
>>691
ども、でもなんかよくわからないです
エラー 2 型または名前空間名 'NetDefineSet' は名前空間 'StackAsterisk' に存在しません。アセンブリ参照が不足しています。
とか

693 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 12:04:49 ]
お前にはまだ早いということだね

694 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 12:16:19 ]
>>689
別スレッドでチェックしに行って適当にタイムアウトとかできるんじゃ?

695 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 13:22:57 ]
>>692
そういやなんかサンプルそのままじゃビルドできなかった記憶があるな

>The Code Projectによいサンプルがあったので拝借させていただき、それを元に書いてみました。
>元となったのは 「RawSocket Class-Create Network Monitoring (Packet Sniffing) Apps」 というものです。

って書いてあるしそっちも参考にするといい

696 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 14:39:34 ]
スレッド分けるのに一票

697 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 14:49:45 ]
Process.Start()で存在しないフォルダを起動したら、FileNotFoundExceptionじゃなくてSystem.ComponentModel.Win32Exceptionというのが来る
Frameworkが吸収するところじゃないのか

698 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 15:34:45 ]
あなたはそれがいいと思うかもしれないが、
大多数の他人はそう思わない



699 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 16:48:15 ]
いやそうでもない

700 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 16:59:52 ]
Frameworkが吸収すべき所のような気がするけど
実害は無いからとやかく言わない

701 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 17:06:23 ]
>>697
つうかふつうに固まるだろ・・・・
問題はみに行く時に固まるつうのが問題なわけで

なにかボタン押したときにチェック

チェック中ですのダイアログ的なものと共に強制キャンセルボタン

チェック開始(バックグラウンドワーカーでもなんでも)

バックグラウンド終了前にキャンセルされたら
ナックグラウンドワーカー停止

こんなんでいいんじゃね?

成功のときはバックグラウンドの完了イベントかなんかで処理するとか

色々あると思うけど

702 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 17:25:47 ]
Microsoftの決めたことなんだから正しいお

703 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 18:37:58 ]
>>697
吸収してどうしろって?
別プロセスからの例外をプロセス間通信で受け取るの?
それをフレームワークでやれって?

704 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 19:01:23 ]
なん…だと…

705 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:19:40 ]
Windowsフォームで質問。

Form2 _form2 = new Form2(_form1);

としたとき、_form2.FormClosedのイベントハンドラで_form1.Close()するコードを書くと、
Form2.OnFormClosed()が何度も呼ばれる(つまりFormClosedイベントが何度も発生する)
ようなんだけど、これは仕様?バグ?

仕様だとしたらどう理解したらいいんだろう?

706 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:25:45 ]
OwnerはCloseするときOwnedFormsを全部Closeする
って言えば分かる?

707 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:34:10 ]
>>706
そのレベルの話はOK

708 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:53:58 ]
普通に再帰呼び出しになってるだけっしょ
止まるのはハンドルが消えるから



709 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:59:15 ]
>>708
現象の説明としてはそれでいいと思うんだけど、
俺が聞きたいのはそういうことじゃなくて、それが仕様なのか、
仕様だとしてそれに何らかの意味があるのかってこと。

FormClosedイベントの意味は、「Close()が呼ばれました」ではないはずだよね。

710 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 21:06:03 ]
> FormClosed イベントは、ユーザー、Close メソッド、または Application クラスの Exit メソッドによって
> フォームが閉じられた後に発生します。
「Form.Closeが呼ばれました」でも大体いいんじゃないかな

ま、おいらはMSの人じゃないので意味とか答えられないけど

711 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 21:09:46 ]
>>710
それはさすがに読解力マズいんじゃないかと思うけど。。

712 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 21:50:30 ]
何度も呼ばれるって何度?

713 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 21:52:55 ]
バグだよ、>>705のプログラムのね

714 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 21:55:57 ]
Closed≠Disposedと理解すれば良い

715 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 22:07:36 ]
>>710-711
MSDNの説明から読み取れるのは

・ユーザ操作、Close()、Application.Exit()で発生しうる
・FormClosedが発生した時点ではフォームは閉じられている

の2点だけじゃね?

てか、説明が怪しいと感じたら英語版を読むといい
それでも怪しいときも多いけどな

716 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 22:20:48 ]
ちなみに何回くらい呼ばれるの?
また毎回同じ回数なのか場合によって変わるのかどんな感じ?


717 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 22:33:34 ]
>>716
以下が問題を再現する最短のコード。
コンストラクタは省略してある。

public partial class Form1 : Form
{
  Form2 _form2;

  protected override void OnLoad(EventArgs e)
  {
    base.OnLoad(e);
    _form2 = new Form2();
    _form2.FormClosed += new FormClosedEventHandler(_form2_FormClosed);
    _form2.Show(this);
  }

  void _form2_FormClosed(object sender, FormClosedEventArgs e)
  {
    Close();
  }
}

public partial class Form2 : Form
{
  int _count = 0;
  protected override void OnFormClosed(FormClosedEventArgs e)
  {
    base.OnFormClosed(e);
    Console.WriteLine("Form2.OnFormClosed Called ! // count = {0}", _count++);
  }
}

718 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 22:53:53 ]
>>717
とりあえずDisposedイベントでForm1.Closeやるように変更したら
現象回避出来たぞ



719 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 23:00:06 ]
>>718
うん、それはわかるけど、
俺が知りたいのはこういうコードを書くと「何故」そんなことになってしまうか、なんだ。

普通に考えれば、OnFormClosedが何度も呼ばれるのは理解に苦しむと思うんだが。

720 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 23:00:45 ]
Form2ClosedでForm1Closeして新しいClosedが発生するのがおかしいと言ってるの?
何がおかしいのかよくわからない

721 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 23:02:44 ]
>>719

まあ所持関係にあるForm同士として呼び出してるんだから
>    _form2.Show(this);

Form1閉じる→Form2閉じる
っていうのは標準動作として組み込まれてる

逆方向の動きを追加したい場合(Form2閉じる→Form1閉じる)は
標準の動作と競合しないようにしなきゃ不具合が起きて当たり前

FormClosed()の時点ではForm同士の所持関係を破棄していないようなので
無限ループが起きる
Disposed()の時点でForm同士の所持関係を破棄しきったので
やりたい動作が実現できる

722 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 23:07:42 ]
FormClosedイベントなんだから、「完全にフォームが閉じた後」に発生しないとおかしい
と言いたい訳か。
んで_form2が完全に閉じた後だから、_form2_FormClosedが呼ばれても子フォームのCloseが呼ばれるのはおかしい、と

723 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 23:15:06 ]
Close()をこうやって呼べばいけるっちゃいける。
this.BeginInvoke((MethodInvoker) (() => Close()));

親フォームが子フォームを閉じるための参照のコレクションを持ってて、
親フォームから登録を抹消するタイミングがFormClosedの後なんだろうな。

724 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 23:16:44 ]
>>722
>_form2が完全に閉じた後だから、_form2_FormClosedが呼ばれても子フォームのCloseが呼ばれるのはおかしい、と
いや、そこは必ずしもそうは思わないけど、>>717のコードの動作が「おかしい」と思う点は、
何度も言うけどOnFormClosedの呼ばれ方が、MSDNに書かれたFormClosedイベントの仕様に
反するように思える点。

725 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 23:17:10 ]
>>723
なんかそれタイミング次第で
うまく行ったり例外おきたり
危険な動作しそうな気がする

726 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 23:18:43 ]
例えば、Form.Show()は何度でも呼べるけど、
その都度Shownイベントが発生したりはしないよね。

727 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 23:19:47 ]
>>724
Formのオーナーシップの関係で
Formクラスから子FormのCloseが呼び出されるってことでしょ
何も反してないよ

728 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 23:23:40 ]
>>727
だから、FormClosedイベントの意味、つまり仕様は、「Closeメソッドが呼ばれました」
ではないよね。少なくともMSDNライブラリを詠む限り、そうは読み取れない。



729 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 00:26:58 ]
お前が明示的に呼んだときしかCloseメソッドが呼ばれないと思ってるということか

730 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 00:37:46 ]
>>729
こんなこと言いたくないが、馬鹿はすっこんでてくれよ。
二重の意味で日本語も読めないのかまったく……

731 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 00:40:59 ]
>>730
どう見てもお前の方が馬鹿だが

732 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 00:41:33 ]
むしろMSDライブラリを読み取れないレベルの馬鹿がやめた方がいい
お話になりません

733 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 00:59:09 ]
横やりだが>>728とかの言ってることは別にそんなおかしくないぞ。
Closeを何度呼ぼうが、実際に閉じたタイミングで一度だけ発生する
と期待するのは普通の感覚。
MSDNの説明も普通に読めばそうだと期待する。

一度しか呼ばれない、とは明記されてないし結局仕様なんだろうとは思うけど。


734 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 01:05:38 ]
1度テストしてみて理解できないようなら方法は無い

735 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 01:14:25 ]
MSDNのクラスのドキュメントって
クラス単体の動作を説明してるのが基本であって
フレームワークの中でそのクラスがどう扱われてるかは
オマケ程度にしか説明されていない

っていうことをわかって無いから的外れなこと言い出すんだよね

736 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 01:28:44 ]
>>735
ほほう、「的外れ」とは?
具体的に何がどう「的外れ」だ、と?

いや、無理しなくていいよ。
そんな自分の頭で理解していることを表現しているとは思えない、
悪いけど意味不明な文章を書いているようじゃたぶん正面からの回答は無理だと思うから。

しかし、別に初心者が悪いと思わんけど(誰だって最初はそうだし)
知りもしないことに口出しして挙句に相手をいきなり罵倒する奴っていうのは
迷惑以外の何者でもないな本当。

初心者どころか自分でイベントを生成するコードすら書いたことすらないのが、
言っちゃ悪いがミエミエなのに。
まあそれ以前に日本語もまともに読めていないようだけどw

2chでこんなこと言ってみても仕方ないのは分かっているが、あまりに腹が立ったのでね。

737 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 03:20:05 ]
ここでクダ巻いててもしょーもねーだろw

738 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 04:57:36 ]
長文書いたら負けですよ



739 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 06:37:29 ]
閉じられる理由位見ろ
_form2_FormClosed() の処理が
if (e.CloseReason == CloseReason.UserClosing)
  Close();
じゃないの点が問題なんだよ

何度も Form2 に FormClosed が送られてくるのも
あくまでも Form2.FormClosed イベントが終了していない段階で
Form1 を改めて閉じようとしているからループしてるに決まってるだろ

ユーザ操作以外ではどうせ親から Close が送られてくるから無視でいい

740 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 16:24:06 ]
Form 1 の中で生成した Form2 を破棄しようとして起きるんじゃないの

741 名前:デフォルトの名無しさん [2009/08/08(土) 18:41:56 ]
テキストボックスやパネルの境界線の色をグレーや薄いブルーなどにするにはどうすればいいですか?
また、
ラベルの上に小さめのテキストボックスを重ね、一つのコントロールにすることはできますか?

調べましたが分かりませんでした。
どなたか教えてください
(T_T;)。




742 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 19:08:28 ]
WPFをつかっとけ

743 名前:デフォルトの名無しさん [2009/08/08(土) 19:45:28 ]
>>742
WindowsフォームアプリケーションでWPFのコントロールを使えるんだっけ…。

744 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 19:50:05 ]
>>740
ユーザ要求により Form2 に WM_CLOSE が送られ
その処理中に Form2 から Form1 に WM_CLOSE が送られ
Form1 が閉じる際に子ウィンドウに対して WM_CLOSE が送られ
その処理中に Form2 から Form1 に WM_CLOSE が送られ……

WM_CLOSE から発生する一連の処理が終了してない間に
改めて WM_CLOSE を流したらループするだろ

745 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 19:51:38 ]
>>743
Windows Forms の編集時にツールボックス見たら
WPF 相互運用機能グループに ElementHost あるでしょ

746 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 19:56:57 ]
>>717の場合は、別にWin32のウィンドウメッセージの水準で連鎖が起こってるわけじゃなく、
あくまで.NET Frameworkの、いわゆる「イベントの連鎖」が起こってるだけ
(しかも仕様というよりバグが原因ぽい)だから、ちょっとその説明は違うと思うけど。

747 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 19:57:05 ]
なんでElementHost なんてわけわからん名前にしたんだ?

748 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 20:09:08 ]
至って普通の名前だと思うが・・・



749 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 20:11:01 ]
わけわからんって。
Element(UIElement) を Host するから ElementHost。


750 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 20:14:18 ]
WinFormだけでやるなら、
TextBoxやらはボーダーなしにして、
その親としてPanelを用意して、
そのPanelのPaintで枠を描画

751 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 20:15:37 ]
このスレはMS信者に乗っ取られているようだ
嘆かわしい

752 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 20:31:56 ]
まぁC#使ってる奴の99.9%がMS使いだと思うよ(´・ω・`)
だれかC#でiPhone開発してる人来ないかな・・・

753 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 20:34:52 ]
というかどこから >>751 が出てきたんだ?

754 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 20:44:26 ]
何かのキーワードに反応するボットじゃない?

755 名前:デフォルトの名無しさん [2009/08/08(土) 21:12:16 ]
>>750
PanelにPaintができるの?
枠線入りの画像をパネルの背景にするってこと?

756 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 21:17:07 ]
普通にPaintできるだろ
もしWPFを使うなら,テキストボックス一つ一つをElementHostでホストするようなことはお勧めしない
ある程度の大きい範囲で丸ごとWPFにしてElementHostに乗せる

757 名前:デフォルトの名無しさん [2009/08/08(土) 21:28:28 ]
>>755
具体的にどうやるの?
panel1_iventが出てきたけど…。

758 名前:デフォルトの名無しさん [2009/08/08(土) 21:45:35 ]
paintイベントって、formをloadしたときに自動で発生するの?



759 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 21:51:23 ]
描画が必要なとき
もちろん初めにフォームを表示するときも呼ばれるな

760 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 21:51:35 ]
くれくれしすぎは

761 名前:デフォルトの名無しさん [2009/08/08(土) 22:14:24 ]
もしパネルやテキストボックスがたくさんある場合、
それらの全ての四辺を描画するならば、
重たくなりそう。


762 名前:デフォルトの名無しさん [2009/08/08(土) 22:16:19 ]
>>756
ラベルやテキストボックスにbordercolorがないのが困る。

763 名前:デフォルトの名無しさん [2009/08/08(土) 22:17:19 ]
>>756
エレメントホストはどれくらい重たいのかな。
今からやってみよ。

764 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 23:01:35 ]
>>741
なんかまともにレスする奴がいないんで見てられないからレスするけど、
そんなのは普通にTextBoxを継承してカスタムコントロール作ってやればいいんだよ。
class TextBoxEx:TextBox
{
  public TextBoxEx()
  {
    BorderColor = Color.Red;
    BorderStyle = BorderStyle.FixedSingle;
  }

  [Category("Design"), DefaultValue(typeof(Color), "Red")]
  public Color BorderColor { get; set; }

  [Browsable(false),
  DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
  public new BorderStyle BorderStyle
  {
    get { return base.BorderStyle; }
    set { base.BorderStyle = value; }
  }

765 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 23:02:47 ]
* 764続き *

  protected override void WndProc(ref Message m)
  {
    base.WndProc(ref m);
    const int WM_PAINT = 0xF;
    switch (m.Msg)
    {
      case WM_PAINT:
        using (Graphics g = CreateGraphics())
        {
          using (Pen pen = new Pen(BorderColor))
          {
            Rectangle rect = ClientRectangle;
            rect.Width -= 1; rect.Height -= 1;
            g.DrawRectangle(pen, rect);
          }
        }
        break;
    }
  }
}

766 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 23:09:41 ]
>>765
細かいことだけど、WndProcよりもOnPaintのオーバーライドのほうが簡潔では?
もちろんsuper.OnPaint呼ぶ手間含んで。

767 名前:デフォルトの名無しさん [2009/08/08(土) 23:09:50 ]
>>765
すごい。ありがとうございます。がんばって解読します。
この継承クラスをまた継承したら、命令を抑えてコーディングできますね。

※ なんで継承したら、bodercolorが出てくるんだろう---。


768 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 23:10:55 ]
>>766
やってみればわかるよ。



769 名前:デフォルトの名無しさん [2009/08/08(土) 23:12:08 ]
例えば50個のテキストボックスを表示させ、
それら全てに色枠線を描いたら、重たいのかな。

770 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 23:30:00 ]
>>768
ごめんなさい。言うとおりだった。

ググったらこんな記述も見つけた。PaintイベントがないならOnPaintもなくて当然か。
msdn.microsoft.com/ja-jp/library/system.windows.forms.textboxbase.paint.aspx
> TextBoxBase.Paint イベント
> コントロールが再描画されると発生します。このクラスでは、このイベントは使用されません。

771 名前:デフォルトの名無しさん [2009/08/08(土) 23:35:45 ]
panelならOnpaintも可能なんだろか。

772 名前:デフォルトの名無しさん [2009/08/09(日) 07:46:49 ]
>>765
さんの記事に、
「using (Pen pen = new Pen(BorderColor)) 」
という行がありますが、using句は名前空間の定義のみに使用するわけではないのですか?
どういうケースでusing句を指定するケースがあるのでしょうか。

773 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 07:47:50 ]
msdn.microsoft.com/ja-jp/library/yh598w02.aspx
MSDNくらい読めよクソタコ

774 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 07:54:42 ]
>>765
using (Graphics g = CreateGraphics())
{
 using (Pen pen = new Pen(BorderColor))
 {
 }
}

だとネストが深くなるから

using (Graphics g = CreateGraphics())
using (Pen pen = new Pen(BorderColor))
{
}

の方がいいな。

775 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 07:56:28 ]
}それならこれでいいだろ
using (Graphics g = CreateGraphics(), Pen pen = new Pen(BorderColor))


776 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 09:16:17 ]
>>775
そうやって並べると見辛くないか? >>774でいいじゃん

777 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 10:00:28 ]
わざわざ1行にする意味ないな

778 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 10:26:24 ]
「黄金分割」<副題> ピラミッドから ル・コルビュジェまで 柳亮著 美術出版社
1965年の出版でしかも純粋な美術書。でも、なぜフィボナッチ数の課題を
出されるのかピンとこないプログラマは一度目を通してみるとよい。



779 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 11:14:40 ]
黄金分割なんてうさんくさいと思うのは俺だけか?

780 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 12:15:28 ]
みんなが黄金といっているのだから黄金なんだろう






[ 続きを読む ] / [ 携帯版 ]

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

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