Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Как добавить новый item в listView?


Автор: oleeg 14.7.2008, 01:29
Все доброго времени суток.
Вообщем, есть у нас listView, в который надо добавить итем. Создаем кнопку и на эту кнопку вешаем открытие формы, в которой  есть текстбокс и кнопка “добавить”. Вот код обработчика события это кнопки:
Код


private void buttonAddItem_Click(object sender, EventArgs e)
        {
            Output newOutput = new Output();            
            ListViewItem lstIt = new ListViewItem(textBoxItemName.Text);  
            newOutput.listView1.Items.Add(lstIt);
            this.Close();
            
            
        }



Output – это класс, в котором находиться listView, грубо говоря, потому что там находиться не только он. Ну вот. Только ничего не добавляеться. Почему? Может, Вы поможете? =) 
Написал коряво, но, наверное, Вы поймете. Заранее благодарю.

Автор: nikitao 14.7.2008, 02:38
Если я все верно понял то деагноз такой.

Вы создаете новый экземпляр Output и добавляете туда новый итем. Вам же надо добавлять его в ту форму что вызвала появление окна. Т е вы добавляете итем не в тот ListView , который вам нужен , а в совершенно новый , который потом уничтожается.

В любом случае такой дезайн является кривым и имхо требует срочной переработки.

Автор: Butsa 14.7.2008, 10:03
Код

private void buttonAddItem_Click(object sender, EventArgs e)
        { 
            ListView1.Items.Add(TextBoxItemName.Text);
            this.Close();
        }



Так ты обращаешься к  текущему экземпляру окна и с добавлением бу все чики пики 

Автор: oleeg 14.7.2008, 13:29
не, обращаються так 
Код

class1.method1();

насколько я знаю.
а тут напрямую
нужно что-то типа 
Код

newOutput.ListView1.Items.Add(textbox1.Text);

только как?

Автор: nikitao 14.7.2008, 13:33
Елки палки. Я же вам сказал. Вы не туда обращаетесь. Вы обращаетесь к новому обьекту т е к новому ListView , а надо обращаться к старому( который у вас отображается ) smile 

Автор: oleeg 14.7.2008, 14:05
Цитата(nikitao @ 14.7.2008,  13:33)
Елки палки. Я же вам сказал. Вы не туда обращаетесь. Вы обращаетесь к новому обьекту т е к новому ListView , а надо обращаться к старому( который у вас отображается ) smile

Да  это я понял. КАК К НЕМУ ОБРАТИТЬСЯ?

Добавлено через 6 минут и 56 секунд

это форма, где добавляем итем
Код

 // в этой форме будем добавлять новый итем
    public partial class FormForAddItemInOutPut : Form
    {

        public Output output;
        public FormForAddItemInOutPut(Output _output)
        {
            InitializeComponent();
            output = _output;
        }
        // добавление нового ListViewItem
        private void buttonAddItem_Click(object sender, EventArgs e)
        {
            
            ListViewItem lstIt = new ListViewItem(textBoxItemName.Text);
            output.listView1.Items.Add(lstIt);
            output.ShowDialog();
            this.Close();

        }
        
    }
}






Код

// добавление итема в listView
        private void buttonAddItemInListView_Click(object sender, EventArgs e)
        {
            // в параметрах нужно задать наш класс Output
            Output ourOutput = new Output();
            // не пашет OMG
            FormForAddItemInOutPut newFrmAddItem = new FormForAddItemInOutPut(ourOutput);
            newFrmAddItem.ShowDialog();
                        

        }

как теперь вызвать метод создания формы, указав в качестве параметра наш класс output?
Причем, если в форму FormForAddItemInOutPut  добавить output.ShowDialog();, то показываеться Форма с добавленным итемом, что, в принципе и должно быть.
Прошу помочь =)

Автор: nikitao 14.7.2008, 14:27
Код

// добавление итема в listView
        string _result="";
        public string GetNewItem()
        {
           return _result;
         }
        private void buttonAddItemInListView_Click(object sender, EventArgs e)
        {
           _resutl=      textBoxItemName.Text;         
           DiaologResult = DialogResult.Ok;
        }



Код

// добавление итема в listView
        private void buttonAddItemInListView_Click(object sender, EventArgs e)
        {
           FormForAddItemInOutPut newFrmAddItem = new FormForAddItemInOutPut()
           if ( newFrmAddItem.ShowDialog()== DialogResult.Ok)
           {
                output.listView1.Items.Add(newFrmAddItem.getNewitem());
            }
        }


Что то в этом роде.

Автор: oleeg 14.7.2008, 20:11
делаю так. в форме, в которой содержиться текстовое поле и кнопка, добавляю 
Код

public string result = "";

потом в обработчике для клика кнопки пишу
Код

 private void buttonAddItem_Click(object sender, EventArgs e)
        {
            result = textBoxItemName.Text;
            this.Close();
        }



далее в обработчике кнопки главной формы пишу

Код

private void buttonAddItemInListView_Click(object sender, EventArgs e)
        {
            
            FormForAddItemInOutPut newFrmAddItem = new FormForAddItemInOutPut();

            if (newFrmAddItem.ShowDialog() == DialogResult.OK)
            {
                ListViewItem lstIT = new ListViewItem(newFrmAddItem.result);
                listView1.Items.Add(lstIT);
            }

        }


и нифига не работает! в чем может быть дело? никак допереть не могу.
А задание такое. Есть listView, в него надо просто добавить итем )

Добавлено через 9 минут и 58 секунд
Вообщем, все, я сделал это) Главное, что сам.
делаеться также, как и в предыдущем посте, но только вместо 
Код

if (newFrmAddItem.ShowDialog() == DialogResult.OK)


пишем
Код

newFrmAddItem.ShowDialog();

всем спасибо за ответы. Очень хороший форум =)

Автор: nikitao 14.7.2008, 20:34
oleeg,  вы убрали из того , что я вам написал инкапсуляцию , что очень плохо. Кроме того лучше писать именно

Код

if (newFrmAddItem.ShowDialog() == DialogResult.OK)


Потому что вы даете возможность пользователю отменить ввод нового итема. Но тогда естественно вместо

Код

private void buttonAddItem_Click(object sender, EventArgs e)
        {
            result = textBoxItemName.Text;
            this.Close();
        }


надо писать 
Код

private void buttonAddItem_Click(object sender, EventArgs e)
        {
            result = textBoxItemName.Text;
            DialogResult= DialogResult.OK
        }


ЗЫ  И пометьте тему как решенную , если не сложно smile

Добавлено через 1 минуту и 42 секунды
Цитата(oleeg @  14.7.2008,  21:11 Найти цитируемый пост)

всем спасибо за ответы. Очень хороший форум =) 


Да. Форум хороший.....но когда то был еще лучше имхо ))))

Автор: Idsa 14.7.2008, 21:32
Цитата(nikitao @  15.7.2008,  00:34 Найти цитируемый пост)
но когда то был еще лучше

 smile Да... сейчас .NET раздел уже практически не посещают mr.Duda, tol05, Mymik...

Автор: nikitao 14.7.2008, 22:54
Еще Exception забыл  smile  да я вообще не про .NET говорил , а вообще про Винград ( года 3 назад)

Автор: oleeg 15.7.2008, 12:48
ОК, пометил. Всем спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)