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

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

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

Re[3]: usercontrolについて


(過去ログ 106 を表示中)

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

■63362 / inTopicNo.1)  usercontrolについて
  
□投稿者/ 黒木 (5回)-(2012/08/20(Mon) 23:20:07)

分類:[C#] 

現在、複数の異なるusercontrol内でデータを入力して、一つのusercontrolにデータを集めて表示するものを作成しています。

usercontrol1:リストボックスが2つ、ボタンが1つあります。
       ボタンは、リストボックス1の選択項目をリストボックス2に移動するというものです。
usercontrol2:usercontrol1を2つ貼り付けたもの。
usercontrol3:usercontrol2のリストボックス2を表示する。

usercontrol2でボタンを押したときに、usercontrol3のリストボックスにusercontrol2のリストボックス2を表示するにはどうしたらよいでしょうか。

・usercontrol3のリストボックスのプロパティをstaticにすると「オブジェクトの参照が必要です」と言われます。
 これは、どう対処するべきですか?

意味不明で分かりにくいかもしれないですが、回答頂ければ嬉しいです。

//// Form1 ///////
    public partial class Form1 : Form
    {

        UserControl2 control1 = new UserControl2();
        UserControl3 control2 = new UserControl3();
        UserControl[] temp = new UserControl[2];

        public Form1()
        {

            InitializeComponent();


            control_Initial();
        }

        public void control_Initial()
        {
            temp[0] = control1;
            temp[1] = control2;

            for (int i = 0; i < temp.Length; i++)
            {
                temp[i].Location = new Point(12, 20);
                tabPage1.Controls.Add(temp[i]);
                temp[i].Visible = false;
            }
            control1.GroupBoxName1 = "グループ1";
            control1.GroupBoxName2 = "グループ2";

            string[] path_mp3;
            path_mp3 = System.IO.Directory.GetFiles(
               @"C:\Users\xxxxxxxx\Desktop\xxxx", "*", System.IO.SearchOption.AllDirectories);
            if (path_mp3 != null)
            {
                control1.listBox1_clear1 = path_mp3;
                control1.listBox1_clear2 = path_mp3;
                foreach (string filename in path_mp3)
                {
                    control1.listBox1_items1 = Path.GetFileName(filename);
                    control1.listBox1_items2 = Path.GetFileName(filename);
                }
            }

        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox box = (ComboBox)sender;

            for (int i = 0; i < temp.Length; i++)
            {
                temp[i].Visible = false;
                if (i == box.SelectedIndex)
                {
                    temp[i].Visible = true;
                }
            }
        }
    }

//// usercontrol1 ///////
        private void button1_Click(object sender, EventArgs e)
        {
            // listBox1選択されているItemのインデックス取得
            int Index = listBox1.SelectedIndex;
            //リストボックスで選択されているものがある場合(無い場合Indexは「-1」)
            if (Index >= 0)
            {
                listBox2.Items.Add(listBox1.SelectedItem);
                if (GroupName == "グループ1")
                {
 //                   listbox1 = listBox1.SelectedItem; ←ここでusercontrol3のリストボックスに表示したいです。
                }
                else if (GroupName == "グループ2")
                {
 //                   listbox2 = listBox1.SelectedItem; ←ここでusercontrol3のリストボックスに表示したいです。
                }
 
                // listBox1から選択済みItemを削除
                listBox1.Items.Remove(listBox1.SelectedItem);
                if (listBox1.Items.Count == Index)
                {
                    listBox1.SelectedIndex = Index - 1;
                }
                else
                {
                    listBox1.SelectedIndex = Index;
                }
            }
        }


////// UserControl2 //////////

    public partial class UserControl2 : UserControl
    {
        public string GroupBoxName1
        {
            set { userControl11.GroupName = value; }
            get { return userControl11.GroupName; }
        }
        public string GroupBoxName2
        {
            set { userControl12.GroupName = value; }
            get { return userControl12.GroupName; }
        }
        public object listBox1_items1
        {
            set { userControl11.ListNameL.Items.Add(value); }
            get { return userControl11.ListNameL.Items; }
        }
        public object listBox1_items2
        {
            set { userControl12.ListNameL.Items.Add(value); }
            get { return userControl12.ListNameL.Items; }
        }
        public string[] listBox1_clear1
        {
            set { userControl11.ListNameL.Items.Clear(); }
        }
        public string[] listBox1_clear2
        {
            set { userControl12.ListNameL.Items.Clear(); }
        }

        public object listBox2_items1
        {
            set { userControl11.ListNameR.Items.Add(value); }
            get { return userControl11.ListNameR.Items; }
        }
        public object listBox2_items2
        {
            set { userControl12.ListNameR.Items.Add(value); }
            get { return userControl12.ListNameR.Items; }
        }
   }

//////// UserControl3 ////////
   public partial class UserControl3 : UserControl
    {
        public object listbox1 ← staticにするとオブジェクト参照が必要と言われます。
        {
            set { listBox1.Items.Add(value); }
            get { return listBox1; }
        }
        public object listbox2
        {
            set { listBox2.Items.Add(value); }
            get { return listBox2; }
        }
       public UserControl3()
        {
            InitializeComponent();
            groupBox1.Text = "グループ1";
            groupBox2.Text = "グループ2";
        }
    }

引用返信 編集キー/
■63363 / inTopicNo.2)  Re[1]: usercontrolについて
□投稿者/ shu (36回)-(2012/08/21(Tue) 07:35:21)
No63362 (黒木 さん) に返信

具体的にやりたいことがよく分かりませんが
ユーザーコントロールが沢山あって情報を共有したければ
共通の親へ自身の変化をイベントにて通知し共通の親が
各コントロールのプロパティなどを通して状態を変えてあげると
良いです。

> usercontrol3:usercontrol2のリストボックス2を表示する。
これは無理なのでusercontorl3にもリストボックスを作成しDataSourceを共有するか中身を
コピーするかしないと駄目です。
引用返信 編集キー/
■63364 / inTopicNo.3)  Re[2]: usercontrolについて
□投稿者/ miyabi (5回)-(2012/08/21(Tue) 09:45:35)
2012/08/21(Tue) 09:59:45 編集(投稿者)

No63363 (shu さん) に返信
> ■No63362 (黒木 さん) に返信
>
> 具体的にやりたいことがよく分かりませんが
> ユーザーコントロールが沢山あって情報を共有したければ
> 共通の親へ自身の変化をイベントにて通知し共通の親が
> 各コントロールのプロパティなどを通して状態を変えてあげると
> 良いです。
>
>>usercontrol3:usercontrol2のリストボックス2を表示する。
> これは無理なのでusercontorl3にもリストボックスを作成しDataSourceを共有するか中身を
> コピーするかしないと駄目です。


引用返信 編集キー/
■63366 / inTopicNo.4)  Re[3]: usercontrolについて
□投稿者/ 黒木 (6回)-(2012/08/21(Tue) 10:05:54)
2012/08/21(Tue) 10:06:30 編集(投稿者)

> ■No63363 (shu さん) に返信
>>■No63362 (黒木 さん) に返信
>>
>>具体的にやりたいことがよく分かりませんが
>>ユーザーコントロールが沢山あって情報を共有したければ
>>共通の親へ自身の変化をイベントにて通知し共通の親が
>>各コントロールのプロパティなどを通して状態を変えてあげると
>>良いです。
>>
> >>usercontrol3:usercontrol2のリストボックス2を表示する。
>>これは無理なのでusercontorl3にもリストボックスを作成しDataSourceを共有するか中身を
>>コピーするかしないと駄目です。
>
>

usercontrol3にもリストボックスはあります。
usercontrol2のリストボックスの中身をusercontrol3のリストボックスに表示したいんです。

usercontrol1のボタンを押す処理でusercontrol3に入ってusercontrol3のリストボックスに選択項目を追加していきたいのですが、上手くいきません。

usercontrol1からusercontrol3のリストボックスに項目を追加するのは無理なのでしょうか。

引用返信 編集キー/
■63367 / inTopicNo.5)  Re[4]: usercontrolについて
□投稿者/ shu (37回)-(2012/08/21(Tue) 10:28:57)
No63366 (黒木 さん) に返信

各リストボックスをユーザーコントロールの外へ公開する。
例)デザイナでModifierをpublicにする 
public System.Windows.Forms.ListBox listBox1

UserControl2へイベント定義
(※下記サンプルはUserControl2ではなくUserControl1になっています。)
	public partial class UserControl1 : UserControl
	{
		public event EventHandler UserControl1Button1Click;

		public UserControl1()
		{
			InitializeComponent();
		}

		private void button1_Click(object sender, EventArgs e)
		{
			UserControl1Button1Click(sender, e);
		}
	}

Formでイベントを受ける。
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
			userControl11.UserControl1Button1Click += userControl11_UserControl1Button1Click;
		}

		private void userControl11_UserControl1Button1Click(object sender, EventArgs e)
		{

			userControl21.listBox1.Items.AddRange(
						userControl11.listBox1.Items);
		}
	}

引用返信 編集キー/
■63369 / inTopicNo.6)  Re[5]: usercontrolについて
□投稿者/ 黒木 (7回)-(2012/08/21(Tue) 11:36:58)
No63367 (shu さん) に返信
> ■No63366 (黒木 さん) に返信
>
> 各リストボックスをユーザーコントロールの外へ公開する。
> 例)デザイナでModifierをpublicにする
> public System.Windows.Forms.ListBox listBox1
>
> UserControl2へイベント定義
> (※下記サンプルはUserControl2ではなくUserControl1になっています。)
> public partial class UserControl1 : UserControl
> {
> public event EventHandler UserControl1Button1Click;
>
> public UserControl1()
> {
> InitializeComponent();
> }
>
> private void button1_Click(object sender, EventArgs e)
> {
> UserControl1Button1Click(sender, e);
> }
> }
>
> Formでイベントを受ける。
> public partial class Form1 : Form
> {
> public Form1()
> {
> InitializeComponent();
> userControl11.UserControl1Button1Click += userControl11_UserControl1Button1Click;
> }
>
> private void userControl11_UserControl1Button1Click(object sender, EventArgs e)
> {
>
> userControl21.listBox1.Items.AddRange(
> userControl11.listBox1.Items);
> }
> }


???よくわからないです。UserControl2はボタンイベントはないのですがUserControl1ではないのですか。


引用返信 編集キー/
■63370 / inTopicNo.7)  Re[6]: usercontrolについて
□投稿者/ shu (39回)-(2012/08/21(Tue) 12:13:31)
No63369 (黒木 さん) に返信

> ???よくわからないです。UserControl2はボタンイベントはないのですがUserControl1ではないのですか。
こっちもよくわからないんです。サンプルなのでそのまま使わないで自分の状況に合わせて読み替えて下さい。

>usercontrol2でボタンを押したときに、
と書いてありますが違うのですね?
引用返信 編集キー/
■63371 / inTopicNo.8)  Re[7]: usercontrolについて
□投稿者/ 黒木 (8回)-(2012/08/21(Tue) 12:46:02)
No63370 (shu さん) に返信
> ■No63369 (黒木 さん) に返信
>
>>???よくわからないです。UserControl2はボタンイベントはないのですがUserControl1ではないのですか。
> こっちもよくわからないんです。サンプルなのでそのまま使わないで自分の状況に合わせて読み替えて下さい。
申し訳ないです・・・。

> >usercontrol2でボタンを押したときに、
> と書いてありますが違うのですね?
usercontrol2はボタン等のプロパティの定義のみがあります。
usercontrol2の本体はusercontrol1です。

usercontrol1にボタンの処理があって、押されたらusercontrol3のリストボックスに追加しに行くって感じなんですが・・・


引用返信 編集キー/
■63373 / inTopicNo.9)  Re[1]: usercontrolについて
□投稿者/ wwJww (4回)-(2012/08/21(Tue) 12:47:53)
横やり入れて申し訳ないのですが...

そもそもなぜわざわざ UserControl を使っているのかすらわからない用途なので困惑しますね。
UserControl はコンテナとして汎用性があるからコンテナにするわけでして...
引用返信 編集キー/
■63374 / inTopicNo.10)  Re[2]: usercontrolについて
□投稿者/ 黒木 (9回)-(2012/08/21(Tue) 12:52:06)
No63373 (wwJww さん) に返信
> 横やり入れて申し訳ないのですが...
>
> そもそもなぜわざわざ UserControl を使っているのかすらわからない用途なので困惑しますね。
> UserControl はコンテナとして汎用性があるからコンテナにするわけでして...

これは、簡易バージョンなので・・・・
引用返信 編集キー/
■63394 / inTopicNo.11)  Re[3]: usercontrolについて
□投稿者/ shu (40回)-(2012/08/22(Wed) 11:46:15)
No63374 (黒木 さん) に返信

usercontrol1で発生させたイベントをusercontrol2で受け
さらにusercontrol2でイベントを発生させればFormでイベントを処理出来ます。
このときusercontrol2上のどちらのusercontrol1で発生したイベントなのかを
知るために情報を伝播するようにして下さい。(EventArgsを派生させ情報を持たせるなど)
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -