C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: コントロール名を変数に保存する方法


(過去ログ 43 を表示中)

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■23137 / inTopicNo.1)  コントロール名を変数に保存する方法
  
□投稿者/ piece (1回)-(2008/08/09(Sat) 00:01:47)

分類:[C#] 

はじめまして。pieceというものです。
開発環境はVS2005,C#です。
早速質問なのですが、現在私が作っているソフトの一部にある
        private void listBox1_DoubleClick(object sender, EventArgs e)
        {
            if (a < b)
            {
                aNum[a] = listBox1.SelectedItem.ToString();
                textBox1.Text = "";
                for(int i=0;i<=a;i++)
                    textBox1.Text += aNum[i];
                a++;
                label4.Text = (b - a).ToString();
            }
        }
        private void listBox2_DoubleClick(object sender, EventArgs e)
        {
            if (a < b)
            {
                aNum[a] = listBox2.SelectedItem.ToString();
                textBox1.Text = "";
                for (int i=0; i <= a; i++)
                    textBox1.Text += aNum[i];
                a++;
                label4.Text = (b - a).ToString();
            }
        }
 ・
 ・
 ・
というコードを簡潔に書きたいのですが、if文の中のlistBoxXが違うために、メソッドが抽出できません。
そこでコントロール名を変数に保存して渡したいと思ったのですが、コントロール名はどのような型に入れればよいのでしょうか?
わかる方、よろしくお願いします。

引用返信 編集キー/
■23138 / inTopicNo.2)  Re[1]: コントロール名を変数に保存する方法
□投稿者/ ま (102回)-(2008/08/09(Sat) 00:23:20)
listBox
を引数に取ればいいです。
マウスカーソル置けばヒントが出てきます。
というか、listBox1 も listBox2 も貴方が作った名前じゃないのでしょ?
この2つの名前の共通する部分を抜き出してみなされ。
クラス名は頭1文字を大文字にするルールです。



引用返信 編集キー/
■23139 / inTopicNo.3)  Re[1]: コントロール名を変数に保存する方法
□投稿者/ bad14mg (28回)-(2008/08/09(Sat) 00:26:46)
No23137 (piece さん) に返信
> そこでコントロール名を変数に保存して渡したいと思ったのですが、コントロール名はどのような型に入れればよいのでしょうか?
> わかる方、よろしくお願いします。

単純に質問に答えるなら
 両方Listboxなので、Listbox。
 private void メソッド名(Listbox lb)


引用返信 編集キー/
■23142 / inTopicNo.4)  Re[2]: コントロール名を変数に保存する方法
□投稿者/ piece (2回)-(2008/08/09(Sat) 00:52:51)
なるほど、クラスを利用すればよかったのですね。うまくいきました。
ま さん、bad14mg さんありがとうございました。

短文ですみません
解決済み
引用返信 編集キー/
■23143 / inTopicNo.5)  Re[1]: コントロール名を変数に保存する方法
□投稿者/ やじゅ (525回)-(2008/08/09(Sat) 01:00:20)
やじゅ さんの Web サイト
2008/08/09(Sat) 01:06:21 編集(投稿者)
2008/08/09(Sat) 01:01:10 編集(投稿者)

■No23137 (piece さん) に返信

> というコードを簡潔に書きたいのですが、if文の中のlistBoxXが違うために、メソッドが抽出できません。
> そこでコントロール名を変数に保存して渡したいと思ったのですが、コントロール名はどのような型に入れればよいのでしょうか?
> わかる方、よろしくお願いします。

質問の意図とは若干違いますが、簡潔に書きたいということであれば
複数イベントを1つにまとめ、senderにイベントが発生したコントロール名が
入ってくるので、キャストして使用する。
ちなみに、私はVB使いなので、どこか間違ってるかも・・・

listBox1.DoubleClick+=new System.EventHandler(this.listBox_DoubleClick);
listBox2.DoubleClick+=new System.EventHandler(this.listBox_DoubleClick);

private void listBox_DoubleClick(object sender, EventArgs e)
{
  if (a < b)
  {
    // aNum[a] = listBox1.SelectedItem.ToString();
  aNum[a] = ((ListBox)sender).SelectedItem.ToString();
    textBox1.Text = "";
    for(int i=0;i<=a;i++)
    textBox1.Text += aNum[i];
    a++;
    label4.Text = (b - a).ToString();
  }
}

追記:解決済みなので、付けておきます。

解決済み
引用返信 編集キー/
■23148 / inTopicNo.6)  Re[2]: コントロール名を変数に保存する方法
□投稿者/ piece (3回)-(2008/08/09(Sat) 12:55:18)
No23143 (やじゅ さん) に返信
> 質問の意図とは若干違いますが、簡潔に書きたいということであれば
> 複数イベントを1つにまとめ、senderにイベントが発生したコントロール名が
> 入ってくるので、キャストして使用する。
なるほど。そういう方法もあるのですね。
残念ながら私の力ではC#にうまく移植出来ませんでしたが・・・
もう少し勉強してから参考にさせていただきますね。
スマートな方法を紹介してくださってありがとうございました。
解決済み
引用返信 編集キー/
■23149 / inTopicNo.7)  Re[3]: コントロール名を変数に保存する方法
□投稿者/ よこはいり (1回)-(2008/08/09(Sat) 13:53:19)
No23142 (piece さん) に返信
> なるほど、クラスを利用すればよかったのですね。うまくいきました。
> ま さん、bad14mg さんありがとうございました。
> 
> 短文ですみません

pieceさん、できあがったコードあげていただけませんか?
参考にさせていただきたいと思います。

引用返信 編集キー/
■23154 / inTopicNo.8)  Re[4]: コントロール名を変数に保存する方法
□投稿者/ piece (4回)-(2008/08/09(Sat) 17:16:37)
No23149 (よこはいり さん) に返信
> pieceさん、できあがったコードあげていただけませんか?
> 参考にさせていただきたいと思います。

    private void listBox1_DoubleClick(object sender, EventArgs e)
    {
        ListBox temp = new ListBox();
        temp = listBox1;
        listClick(temp);
    }
    private void listBox2_DoubleClick(object sender, EventArgs e)
    {
        ListBox temp = new ListBox();
        temp = listBox2;
        listClick(temp);
    }

    private void listClick(ListBox temp)
    {
        if (a < b)
        {
            aNum[a] = temp.SelectedItem.ToString();
            textBox1.Text = "";
            for (int i=0; i <= a; i++)
                textBox1.Text += aNum[i];
            a++;
            label4.Text = (b - a).ToString();
        }
    }
 ・
 ・
 ・
こんなかんじです。やじゅさんのコードと比べるとシンプルではないですねやはり・・・

引用返信 編集キー/
■23155 / inTopicNo.9)  Re[5]: コントロール名を変数に保存する方法
□投稿者/ k-yamamoto (1回)-(2008/08/09(Sat) 17:34:02)
2008/08/09(Sat) 17:35:55 編集(投稿者)

もう解決済みかもしれませんが、、、
やじゅさんの書かれているコードのように1つのメソッドを、複数のコントロールから
共用するのが楽ですね。

あと、
> ListBox temp = new ListBox();
> temp = listBox1;
の部分ですが、わざわざインスタンスを作らなくても、
senderをキャストすればいいのでは?

private void listBox1_DoubleClick(object sender, EventArgs e)
{
listClick(sender as ListBox);
}


引用返信 編集キー/
■23158 / inTopicNo.10)  Re[5]: コントロール名を変数に保存する方法
□投稿者/ よこはいり (2回)-(2008/08/09(Sat) 20:41:15)
No23154 (piece さん) に返信
>
> private void listBox1_DoubleClick(object sender, EventArgs e)
> {
> ListBox temp = new ListBox();
> temp = listBox1;
> listClick(temp);
> }
> private void listBox2_DoubleClick(object sender, EventArgs e)
> {
> ListBox temp = new ListBox();
> temp = listBox2;
> listClick(temp);
> }
>
> private void listClick(ListBox temp)
> {
> if (a < b)
> {
> aNum[a] = temp.SelectedItem.ToString();
> textBox1.Text = "";
> for (int i=0; i <= a; i++)
> textBox1.Text += aNum[i];
> a++;
> label4.Text = (b - a).ToString();
> }
> }
>  ・
>  ・
>  ・
>
お忙しところお手数かけて申し訳ありません。有り難うございました。
引用返信 編集キー/
■23159 / inTopicNo.11)  Re[5]: コントロール名を変数に保存する方法
□投稿者/ Jitta on the way (154回)-(2008/08/09(Sat) 21:52:01)
No23154 (piece さん) に返信
> ■No23149 (よこはいり さん) に返信
>>pieceさん、できあがったコードあげていただけませんか?
>>参考にさせていただきたいと思います。
>
> private void listBox1_DoubleClick(object sender, EventArgs e)
> {
> ListBox temp = new ListBox();
> temp = listBox1;
> listClick(temp);
> }
> private void listBox2_DoubleClick(object sender, EventArgs e)
> {
> ListBox temp = new ListBox();
> temp = listBox2;
> listClick(temp);
> }
>
> private void listClick(ListBox temp)
> {
> if (a < b)
> {
> aNum[a] = temp.SelectedItem.ToString();
> textBox1.Text = "";
> for (int i=0; i <= a; i++)
> textBox1.Text += aNum[i];
> a++;
> label4.Text = (b - a).ToString();
> }
> }
>  ・
>  ・
>  ・
> こんなかんじです。やじゅさんのコードと比べるとシンプルではないですねやはり・・・


んなことせんでも、フォーム デザイナで2つの listbox を選んで、プロパティ ウィンドウの稲妻をクリックしてイベントを表示、double click イベントにイベント名を書けば、2つの listbox から1つのイベント ハンドラを呼び出せるよ。
引用返信 編集キー/
■23169 / inTopicNo.12)  Re[6]: コントロール名を変数に保存する方法
□投稿者/ よこはいり (3回)-(2008/08/10(Sun) 08:44:19)
2008/08/10(Sun) 08:45:40 編集(投稿者)
No23159 (Jitta on the way さん) に返信

解決済み
引用返信 編集キー/
■23174 / inTopicNo.13)  Re[3]: コントロール名を変数に保存する方法
□投稿者/ piece (5回)-(2008/08/10(Sun) 14:13:50)
長々と引きずってすみません
おかげさまでやじゅさんのコードを実装できなかった原因が、
イベントハンドラの宣言にミスがあったためであることがわかり、実装することが出来ました。
皆さん、いろいろヒントをくださってありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -