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

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

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

Re[2]: c# ユーザコントロール同士のデータ受け渡し


(過去ログ 107 を表示中)

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

■63793 / inTopicNo.1)  c# ユーザコントロール同士のデータ受け渡し
  
□投稿者/ tori (1回)-(2012/10/11(Thu) 15:33:00)

分類:[C#] 

ベースフォーム上に選択されたメニューにより
表示する画面(ユーザコントロール)を切り替えるようにしておりますが
表示する画面間(ユーザコントロール間)でデータの受け渡しをしたいと
思いますが どのような方法があるのでしょうか
引用返信 編集キー/
■63795 / inTopicNo.2)  Re[1]: c# ユーザコントロール同士のデータ受け渡し
□投稿者/ howling (10回)-(2012/10/11(Thu) 16:38:55)
2012/10/11(Thu) 16:40:06 編集(投稿者)
こんにちわ。質問がうまく読めないので、以下のように解釈しますね。
ニホンゴムズカシイ…。

Form上に何かしらの値が変更できるメニューを置き、
そのメニューの値が変更された場合に、
メニューの値に応じたUserControlを表示する。
この別々のUserControl間でデータの受け渡しを行いたいが、
どうすれば良いか。

私なら…なんですが。
Form上にあるメニューからは当然各UserControlにアクセスできると思います。
この「各UserControl」というのは、全て自分でUserControlクラスを継承した自作クラスです。
それぞれの自作クラスのコンストラクタに、
「他の自作クラスへアクセス可能なインスタンス(例えばメニューのインスタンス)」を渡し、
他の自作クラスへデータの受け渡しを行う際には、
「他の自作クラスへアクセス可能なインスタンス(例えばメニューのインスタンス)」へセットしてもらうようにお願いする、
という形を取ります。
大体以下のような感じです。
Form自体とか、メニュークラス自体とかは省略してしまっているので、
そこは補完してください。

public class MyMenu //: SomeMenuClass  //SomeMenuClassは何かしらの値が変更できるメニュークラス
{
    private UserControlType m_eNowSelectType = UserControlType::TYPE_USERCONTROL_NONE;
    private ArrayList m_arrayUserControl = new ArrayList(); //取り扱う全てのユーザーコントロールを格納

    public enum UserControlType 
    {
        TYPE_USERCONTROL_MY,
        ///他にもユーザーコントロールの種類を入れる
        TYPE_USERCONTROL_NONE,
    }
    public MyMenu()
    {
        //base.SomeMenuClass();
    }
    
    //このクラスが管理している他のユーザーコントロールに対してデータをセットするメソッド
    public void SetData(UserControlType eType, object objSetData)
    {
         switch(eType)
         {
         //ユーザーコントロールの種類に応じたなんらかの処理
         }
    }

    //ユーザーが他のUserControlを表示するように指示した場合に呼ばれるメソッド(Setプロパティで十分かも)
    public void SelectUserControlType(UserControlType eType)
    {
         //表示済みのUserControlを消して、設定したUserControlを表示するとか
    }
}

public class MyUserControl : UserControl
{
    private MyMenu m_clsMenu = null;
    public MyUserControl(MyMenu clsMenu)
    {
        m_clsMenu = clsMenu;
        //base.UserControl();
    }

    //とりあえずint型のデータをセットしてみるメソッド
    public SetParamToOtherControl(MyMenu::UserControlType eType, int iData)
    {
        m_clsMenu.SetData(eType, iData);
    }
}


いかがでしょうか。

引用返信 編集キー/
■63824 / inTopicNo.3)  Re[2]: c# ユーザコントロール同士のデータ受け渡し
□投稿者/ tori (2回)-(2012/10/15(Mon) 12:53:44)
howling さん

初心者なので 理解に時間がかかり 報告遅くなりましたが
やっと理解でき 実装できました。
ありがとうございました。

No63795 (howling さん) に返信
> 2012/10/11(Thu) 16:40:06 編集(投稿者)
>
> こんにちわ。質問がうまく読めないので、以下のように解釈しますね。
> ニホンゴムズカシイ…。
>
> Form上に何かしらの値が変更できるメニューを置き、
> そのメニューの値が変更された場合に、
> メニューの値に応じたUserControlを表示する。
> この別々のUserControl間でデータの受け渡しを行いたいが、
> どうすれば良いか。
>
> 私なら…なんですが。
> Form上にあるメニューからは当然各UserControlにアクセスできると思います。
> この「各UserControl」というのは、全て自分でUserControlクラスを継承した自作クラスです。
> それぞれの自作クラスのコンストラクタに、
> 「他の自作クラスへアクセス可能なインスタンス(例えばメニューのインスタンス)」を渡し、
> 他の自作クラスへデータの受け渡しを行う際には、
> 「他の自作クラスへアクセス可能なインスタンス(例えばメニューのインスタンス)」へセットしてもらうようにお願いする、
> という形を取ります。
> 大体以下のような感じです。
> Form自体とか、メニュークラス自体とかは省略してしまっているので、
> そこは補完してください。
>
> public class MyMenu //: SomeMenuClass //SomeMenuClassは何かしらの値が変更できるメニュークラス
> {
> private UserControlType m_eNowSelectType = UserControlType::TYPE_USERCONTROL_NONE;
> private ArrayList m_arrayUserControl = new ArrayList(); //取り扱う全てのユーザーコントロールを格納
>
> public enum UserControlType
> {
> TYPE_USERCONTROL_MY,
> ///他にもユーザーコントロールの種類を入れる
> TYPE_USERCONTROL_NONE,
> }
> public MyMenu()
> {
> //base.SomeMenuClass();
> }
>
> //このクラスが管理している他のユーザーコントロールに対してデータをセットするメソッド
> public void SetData(UserControlType eType, object objSetData)
> {
> switch(eType)
> {
> //ユーザーコントロールの種類に応じたなんらかの処理
> }
> }
>
> //ユーザーが他のUserControlを表示するように指示した場合に呼ばれるメソッド(Setプロパティで十分かも)
> public void SelectUserControlType(UserControlType eType)
> {
> //表示済みのUserControlを消して、設定したUserControlを表示するとか
> }
> }
>
> public class MyUserControl : UserControl
> {
> private MyMenu m_clsMenu = null;
> public MyUserControl(MyMenu clsMenu)
> {
> m_clsMenu = clsMenu;
> //base.UserControl();
> }
>
> //とりあえずint型のデータをセットしてみるメソッド
> public SetParamToOtherControl(MyMenu::UserControlType eType, int iData)
> {
> m_clsMenu.SetData(eType, iData);
> }
> }
>
>
> いかがでしょうか。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -