2016-05-24 7 views
-5

メインフォームファイル(Form1.cs)にオブジェクトリスト<>があり、このオブジェクトのデータを他のクラスで使用したいとします。メインフォームからオブジェクトを取得する方法

私はカスタムコントロールを作成しています(新しいUserControlクラスを追加しました)、そのリストの名前で埋めたいComboBoxを持っています。そのコントロールを作成するときに渡さずに塗りつぶしたい私のメインフォーム。

つまり、自分のカスタムコントロールに関するすべてのアクションを自分のUserControlクラスに入れたいので、メインフォームでコントロールを作成するときに、既にコンボボックスにリストから名前が入っています。 ユーザーが選択を変更すると、そのコントロールで変更されるラベルがあります。

メインフォーム -

namespace Shibutz 
{ 
    public partial class Form1 : Form 
    { 
     //I want to use these lists in the UserControl class 
     List<Person> persons = new List<Person>(); 
     List<Conditions> conditions = new List<Conditions>(); 
     List<Missions> missions = new List<Missions>(); 
     Tools tools = new Tools(); 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

ユーザーコントロールは

namespace Shibutz 
{ 
    public partial class CellUI : UserControl 
    { 
     public CellUI() 
     { 
      InitializeComponent(); 
     } 

     //Here I want to get the List<Person> object, and fill a ComboBox 
     // like - cbCellPersonsList.Add(*all the items in persons from the main form*); 
     private void cbCellPersonsList_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      //when index changes, change Label lblPersonName in the cusom control 
     } 
    } 

私はそれをどのように行うのですがクラス - ?

+2

あなたが試したことをお見せしてください... – Sean

+1

問題のリストまたはオブジェクトを他のオブジェクトに渡す必要があります。 –

+1

他のクラスとは何ですか?新しい 'Windows.Forms'? –

答えて

0

カスタムUIを作成するときに、コンストラクターを使用してListを渡すことができます。 カスタムUIのloadイベントを使用してコンボボックスに入力することもできます。

public partial class Form1 : Form 
{ 
    //I want to use these lists in the UserControl class 
    List<Person> persons = new List<Person>(); 
    List<Conditions> conditions = new List<Conditions>(); 
    List<Missions> missions = new List<Missions>(); 
    Tools tools = new Tools(); 


    public Form1() 
    { 
     InitializeComponent(); 
    } 

    // here gets some code that will create an instance of your CellUI class 
    // and pass the list through the constructor whenever you like to 
} 

public partial class CellUI : UserControl 
{ 
    // List to catch the List from the main form 
    List<Person> persList; 

    //Hand it over in the Constructor 
    public CellUI(List<Person> pList) 
    { 
     InitializeComponent(); 

     persList = pList; 
    } 

    //Here I want to get the List<Person> object, and fill a ComboBox 
    private void CellUI_Load(object sender, EventArgs e) 
    { 
     // populate the combobox with persons 
    } 

    // like - cbCellPersonsList.Add(*all the items in persons from the main form*); 
    private void cbCellPersonsList_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     //when index changes, change Label lblPersonName in the cusom control 
    } 
} 
+0

問題は私が他のクラスのForm1クラスに内部としてアクセスできません。 –

+0

あなたはいくつかのコードを掲示できますか? –

+0

まあ私はForm1のインスタンスを作ることができることを意味するが、Form1でgetterを作成してUserControlの –

0

Form1のインスタンスが1つしかない場合は、それを静的にすることができます。 オプション2は、他のオブジェクトにForm1オブジェクトがあることを確認しています。

class Form1 
{ 
    public List<string> _myList = new List<string>(); 
    public void CreateObject() 
    { 
     var otherObject = new OtherObject(this); 
    } 
} 
class OtherObject 
{ 
    public OtherObject(Form1 form) 
    { 
     form._myList.Add("hello"); 
    } 
} 

または

class Form1 
{ 
    public static List<string> _myList = new List<string>(); 
    public void CreateObject() 
    { 
     var otherObject = new OtherObject(); 
    } 
} 
class OtherObject 
{ 
    public OtherObject() 
    { 
     Form1._myList.Add("hello"); 
    } 
} 
+0

Form1は私が作成したクラスではなく、アプリケーションのメインクラスであり、他のクラスの変数にアクセスすることは不可能です –

関連する問題