2015-08-04 5 views
0

Я пытаюсь настроить список на C#, и я хочу его, чтобы при нажатии кнопки «Добавить» он откроет окно с полями, в которых я могу ввести данные, нажать кнопку ok и затем эти поля текстовых полей передаются в список. Это мой код для всплывающей формы.Изменение списка из другой формы

public partial class addtoLibraryDialog : Form 
{ 
    public addtoLibraryDialog() 
    { 
     InitializeComponent(); 
    } 


    private void btnOK_Click(object sender, EventArgs e) 
    { 
     ListViewItem list = new ListViewItem("name"); 
     list.SubItems.Add("path"); 
     listView1.Items.Add(list); 
    } 
} 

И мне было интересно, как я могу это сделать, чтобы Listview1 был признан. Я нашел информацию об этом наброске, но поскольку я новичок в программировании, я не могу сделать из них головы хвостов.

ответ

2

Передайте свой экземпляр основной формы в свою вспомогательную форму (addtoLibraryDialog) либо в свой конструктор, либо путем назначения перед вызовом метода ShowDialog.

Просто обновите в дизайнере свойство «Модификаторы» списка viewview1: установите его в «internal». Затем вы сможете получить доступ к mainform.listview1 во вторичной (addtoLibraryDialog) форме.

public partial class addtoLibraryDialog : Form 
{ 
    internal MainForm mainfom ; // Change "MainForm" by real form name 

    public addtoLibraryDialog() 
    { 
    InitializeComponent(); 
    } 


    private void btnOK_Click(object sender, EventArgs e) 
    { 
    ListViewItem list = new ListViewItem("name"); 
    list.SubItems.Add("path"); 
    mainfom.listView1.Items.Add(list); 
    } 
} 

В MainForm:

addtoLibraryDialog dlg=new addtoLibraryDialog() ; 
dlg.mainform = this ; 
dlg.ShowDialog() ; 
+0

«Передайте свой экземпляр основной формы в свою вторичную форму (addtoLibraryDialog) либо в свой конструктор, либо путем назначения перед вызовом метода ShowDialog». Можете ли вы направить меня на код, необходимый для выполнения этой части, поскольку я не совсем понимаю. – icestroge

+0

Я добавил код к моему ответу. – Graffito

+0

Спасибо, что мне удалось заставить его работать. Однако мне пришлось изменить 'private MainForm mainfom'' на 'main Mainform mainfom', чтобы он работал. Надеюсь, это не проблема. – icestroge

1

Мой предпочтительный метод, чтобы создать новый файл класса в моей программе под названием Global, и поставить все, что необходимо мульти доступ формы, как это в него. Таким образом, вы бы просто сделать публичный список в глобальном файле, и доступ к нему в любом месте вашего проекта

1

Лучший способ сделать это, отправившим ListView как конструктор зависимости в форму создания нового конструктора:

public partial addtoLibraryDialog : Form 
{ 
    private readonly ListView _listViewItem; 

    public addtoLibraryDialog(ListView listViewItem) 
    { 
    InitializeComponent(); 
    this._listViewItem = listViewItem; 
    } 

    private void btnOK_Click(object sender, EventArgs e) 
    { 
    list = new ListViewItem("name"); 
    list.SubItems.Add("path"); 
    this._listViewItem.Items.Add(list); 
    } 
} 

public class MyClass 
{ 
    public void Main() 
    { 
    addtoLibraryDialog popupForm = new addtoLibraryDialog(this.ListViewItem1); 
    addtoLibraryDialog.ShowDialog(); 
    } 
} 
+0

Это почти то же самое, что и у меня, но вы не передаете объект ListView по ссылке, а по значению. Не 100% уверен, но будет ли ваш код фактически обновлять объект ListView, когда он вернется в главную форму? –

+0

В C# все объекты, кроме структур передаются в качестве ссылки, тогда он будет работать нормально, потому что объект тот же. Вам нужно только ref в структурах (sting, int, bool ...) –

2

Добавить конструктор:

public partial class addtoLibraryDialog : Form 
{ 
    ListView objLV; 
    public addtoLibraryDialog() 
    { 
     InitializeComponent(); 
    } 
    public addtoLibraryDialog(ref ListView lv) 
    { 
     objLV = lv; 
     InitializeComponent(); 
    } 


    private void btnOK_Click(object sender, EventArgs e) 
    { 
     ListViewItem list = new ListViewItem("name"); 
     list.SubItems.Add("path"); 
     objLV.Items.Add(list); 
    } 
} 

Для вызова его из основной формы:

ListView myList = new ListView(); 
    ... 
    addtoLibraryDialog dlg=new addtoLibraryDialog(ref myList); 
    dlg.ShowDialog(); 
Смежные вопросы