foreach(Control c in Controls)
{
if (c == sender) continue;
c.BackColor = Color.White;
}
((Control)sendor).BackColor = Color.LightCyan;
or
lastbtn.Backcolor = Color.White;
lastbtn = (Control)sender;
lastbtn.Backcolor = Color.LightCyan;
>>949 質問とソースが微妙に一致してないぞ。
質問からは押したボタンの色が変わって欲しいように想像するが、
ソースはテキストボックスにセットされてる文字列からボタンを決めて、
そのボタンはシアン系、それ以外は白って感じだが。
何がしたいのかハッキリしてくれ
955 :
デフォルトの名無しさん:2007/02/06(火) 13:36:23
>>950 >今環境がないので調べられんがMSDNに必ず元のに代入しろとか書いてなかったか?>Text
>Nameと変な風に連動してた気がするからなんか独自にやっているのかもしれん。
そうだったんですか、どのプロパティも同じとはいかないのかもしれませんね。
これがBackColorで同様のことをやったときは、baseの方は透明にしておいても
独自変数の値がちゃんと出てきてたので、Textでも同じかと思ったのでした・・・
>>951 >現状でデザイナで操作できなくなるような変更はやめたほうがいいかもね。
もともとPanelにはTextプロパティがなかったので追加で実装する必要が出たのですが、
今改めてみてみると、ヘルプによるとControlクラスにも、実際には Public にも
Protected にも Text プロパティはリストに載っていないです、??
それで、別の、VBのプロジェクトと組み合わせたソリューション内でやってみると、
この Textプロパティに関する Control と Panel の区別はちゃんと出てきて、
Controlクラスから派生した方は base.Text への代入はOK、Panel クラスから
派生した方は base.Text への代入でビルドエラーが出て来ていました。
C#だけで単独でやっているとこの差が現われず、VBとの混用でやっている方では
これが出るということは、両者の設定に関係しているのでしょうか・・・?
956 :
デフォルトの名無しさん:2007/02/06(火) 13:41:37
>>954 そうなのですが、
>>954のような状況でした。
このことから、この Panel と Control の違いは、Text プロパティが
プロパティ・ウインドウに現われるかどうかの違いと一致していましたので
Panel ではたぶん Textプロパティを殺しているのではないかと思ったのですが
そうではないのでしょうか・・・。
957 :
949:2007/02/06(火) 14:05:25
>>952 具体的な回答ありがとうございます。
まだ始めたばかりなので逆引き大全を片手に今眺めてます…orz
>>953 質問の仕損ないで申し訳ないです。
今はボタンを押したときにtextBox1に[A01]等のデータが入るようにしてます。
958 :
デフォルトの名無しさん:2007/02/06(火) 14:11:05
>>955 >今改めてみてみると、ヘルプによるとControlクラスにも、実際には Public にも
>Protected にも Text プロパティはリストに載っていないです、??
この Control は System.Windows.Forms のではない別の Control でした、
System.Windows.Forms.Control では Text も BackColor もやはり存在してました。
Panel の方ももう一度みてみようと思いましたら、今度は Help で 「見つかりません」
になって探せなくなってしまった・・・、まずこっちから直さないと。。。。
>>958 PanelにもTextはあるがこのクラスでは使用しないことになっている。
プロパティグリッドに表示されないのは非表示になってるから。
[Category("Appearance"), Description("hogehohe"), Browsable(true)]
public override string Text {
get { return base.Text; }
set { base.Text = value; }}
MSDNしらないの?
MSDN引いたらすぐに分かるようなこと質問してるってことは知らないんだろ
962 :
デフォルトの名無しさん:2007/02/06(火) 19:24:33
すいません 質問させて下さい。
private const int WM_CLOSE = 0x0010;
protected override void WndProc(ref Message message) {
base.WndProc(ref message);
switch(message.Msg) {
case WM_CLOSE:
MesssageBox.Show("test");
break;
default: break;
}
}
と書いたのですが、フォームを閉じてもWM_CLOSEを受け取れません。
終了処理などをさせたい場合、どうしたら良いのでしょうか!!!
お願いします。。。
何故そんな回りくどいことをするの?
OnClosed,OnClosingをオーバーライド。
なんだってそんな低級な方法をとるよ
普通にClosingとかClosedとかイベントあるだろ。
ありがとう
>>965 他にもウィンドウプロシージャーで受け取りたいメッセージが多くある<
なんだってそんな低級な方法をとるよ
ウィンドウプロシージャーをオーバーライドしてイジくるのは低級だったのか・・・
⊂二二二( ^ω^)二⊃
プロパティウインドウで終了関連のイベントのところダブルクリックするだけなんだがなあ?
C++から来たの?
>>967 変な例えかもしれないが。
アセンブラでウィンドウズプログラム作るのは低級。
C++ & win32APIから来ました。が、元はAssemble出身です。
>>962 やむにやまれぬ事情もあるのかも知れんな(笑
WndProcを使うとして、base.WndProcを先に呼んでるからじゃない?
.NET Framework のソースってどこからみれるの?
えーと質問です。
class hoge {}
class hogelist : List<hoge> {
public String Value { get() { return ""; } }
}
private readonly hogelist hogelist = new hogelist();
public form1(.......) // こんすとらくた
{
InitializeComponent();
textBox1.DataBinding.Add("Text", terolist, "Value");
}
というコードを書いて、外部のフォームからこのフォームを表示させようとすると
form1->Show(); // ここで例外。
ArgumentExceptionはハンドルされませんでした。
DataSource のプロパティまたは列Valueにバインドできません。
パラメータ名:dataMember
と言われて、データバインディングに失敗します。
Show() のところから、ステップ実行すると IEnumerable.GetEnumerator() が呼ばれて
いて、これは素直に通過するのだけど通過した後の外部コードの中で例外が発生します。
どうすればデータバインディングできるのでしょうか?
スレッドについての質問です
どこか思いこみがあるようですので間違いを指摘していただけると有り難いです。
Formを作成し、自分で新規にスレッドを作成していない状態で
(つまり自分はシングルスレッドのつもり)
aというメソッドに処理が入り、抜け出す前にbというメソッドに入っているようです。
シングルスレッドの状態でこのようなことはありえるのでしょうか?
尚、a、bともにリストビューのItem選択によるイベント起動がもとになっている物と
思われます。
>form1->Show()
ネタですね…
ありがとう
>>971 base.WndProc(ref message); を、switch文の後に回しても解決出来ました。
低級だな。
977 :
デフォルトの名無しさん:2007/02/06(火) 19:40:15
>>973 どうせDoEventsしてるとか言うオチだろ。
>>978 >どうせDoEventsしてるとか言うオチだろ。
していません。
一応検索してみましたが、つかってません。
ちなみに、しょうがないので、lockもしてみましたがうまくいきません。
AutoResetEventとかでしたら、同一スレッド間でも排他制御ができるのでしょうか?
>>980 「同一スレッド間でも排他制御」って具体的にはどういうことだ?
同一スレッド「間」???
>>979 ちげーよ
多分ネタだよ。
>hogelist
>terolist
>尚、a、bともにリストビューのItem選択によるイベント起動がもとになっている物と
>思われます。
ここらを詳しく書かないとダメ
void a()
{
b();
}
って書いてないよなw
>>981 >「同一スレッド間でも排他制御」って具体的にはどういうことだ?
レスした後自分でも書いてて変だと思った。
まあ、
>>973の状況でわけわかんなくなっていると思ってください
一応プロセスはThread.CurrentThread.GetHashCode()で同一かどうか見てるつもりです。
(これも変?)
>>984 >aがbを呼んでるというオチ?
a,bとも単にdllの関数を呼ぶためのラッパーですのであり得ません
なぜaの動作中にbが動作しているとわかった?
dll内で呼んでるとか。
次スレ余路!
989 :
973:2007/02/06(火) 20:06:13
念のためにa,bの関数の例を出します。
UnLha.dllの関数を呼び出すだけです。
(lockとか例外処理とかどうしようもなくてつけてます)
基本”S”と”E”が交互に表示されるはずですが、”S”が続くケースがあり、その後”E”が続くことが
あるため、メソッドの途中でメソッドが呼ばれている物と判断しています。
public static int UnlhaLck(IntPtr hwnd, string szCmdLine, StringBuilder SzOutput, int dwSize)
{
int ret;
lock (obj)
{
System.Diagnostics.Debug.WriteLine("S1" + Thread.CurrentThread.GetHashCode().ToString());
try
{
ret = Unlha(hwnd, szCmdLine, SzOutput, dwSize);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
ret = -1;
}
System.Diagnostics.Debug.WriteLine("E1");
}
return ret;
}
990 :
958:2007/02/06(火) 20:08:53
>>959 ありがとうございます、オンラインヘルプでみましたら、やはり Panel では
Text プロパティは 「無効になっています」 とのことでした・・・。
それでも、やはり Set{}側で その無効な Text プロパティに代入さえして
おけば InitializeComponent() に書き込まれるらしいことが確認できました。
つまり、Control ベースでも、Panelベースでも同様にできそうでした。
ソリューションに、これらのコントロールも内部のプロジェクトとして入れ込んで
いたのですが、これら部品のコントロールをビルドしたら、一旦 VS2005 自体を
終了し、また再度起動してソリューションをオープンし直してからやってみたところ、
VBとの混用側でも InitializeComponent() に記録されるようになりました。
InitializeComponent() に Text プロパティが保存されなかった問題の原因は、
どうも、これら部品クラスのビルド後の取り込みが行なわれていなかったためかと
思われ(「ソリューションのビルド」で行なってもできませんでした・・・)、
VB との混用で行なう場合は面倒でも VS2005 を再起動する必要があるの
かもしれません・・・。
おかげさまでとりあえず InitializeComponent() に取り込むことができました、
ありがとうございました。
必要なのはココじゃない。
ネタ?
993 :
デフォルトの名無しさん:2007/02/06(火) 20:12:19
>>961 MSDNはオンラインで知っていますが、それ以前に、どうして Panel のメンバーぐらいの
参照が オフライン側のほうでできなくなってしまったのか不思議でした。
どっちにしても Textって名前は使わないほうがいいんじゃないかな。
996 :
デフォルトの名無しさん:2007/02/06(火) 20:16:19
>>994 Text は特別なのですか、やはり同一名称は new キーワードでも
問題あるのでしょうか・・・・・?
997 :
デフォルトの名無しさん:2007/02/06(火) 20:17:51
>>995 前には見たことはあったのですが、今日はそのページの参照リンクから叩いたのですが
飛んで行かず、「みつかりません」が出てきたのでした。
>>992 残念ながら見方が分かりません。
さしあたって、>973の質問のシングルスレッドの状態では、a,bが同時に実行されることは
ないと思って良さそうですね(あたりまえでしょうけど)。
どうもありがとうございました。もうちょっとがんばってみます。
999 :
デフォルトの名無しさん:2007/02/06(火) 20:19:18
new にせざるを得なかったのは、virtual にしたかったからでした。
virtual にすると、 override か書けないとのことでした。
どうもでした。またよろしくです。
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。