Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11790
Последний выпуск: 19.06.2015

Обновление ListBox

12K
14 ноября 2016 года
alcatraz_kms
96 / / 01.10.2013
Написал приложение на C# в среде Visual Studio 2013
Структура , в кратце, есть форма1, 2, 3
форма 1 - главная на ней два листобокса и кнопки
В листбоксы заносятся инфа с БД Access

Кнопка "Добавить запись" открывает форму3 и после заполнения сохранения все данные попадают в БД и закрывается форма3
НО вопрос
А по каким причинам происходит задержка обновления LISTBOX или считывания данных с БД Access?
т.е. я добавляю сотрудника в компанию в базу данных он попадает, но отображение в листбоксе проходит с задержкой (~ 3 сек)
1
14 ноября 2016 года
kot_
7.3K / / 20.01.2000
Необходимо обновлять данные после добавления.
12K
15 ноября 2016 года
alcatraz_kms
96 / / 01.10.2013
Лист бокс то обновляется инфа в базе тоже, проблема в том, что сразу не отображаются элементы в лист боксе после добавления записи. Приходится обновлять вручную список в лист боксе
Вручную обновлять не вариант!
1
15 ноября 2016 года
kot_
7.3K / / 20.01.2000
раз "не вариант" - не обновляйте. Всегда есть выбор.
12K
17 ноября 2016 года
alcatraz_kms
96 / / 01.10.2013
ок, что тогда нужно написать на события закрытия формы3 , чтобы обновился листбокс2 на форме 1?
444
17 ноября 2016 года
cronya
417 / / 03.01.2009
Цитата: alcatraz_kms
ок, что тогда нужно написать на события закрытия формы3 , чтобы обновился листбокс2 на форме 1?

Простите за вопрос, а принципы ООП вам не знакомы?
Пример:

Код:
private void Form1_Load(object sender, EventArgs e)
        {
            for (int idx = 0; idx < 5; idx++)
            {
                this.listBox1.Items.Add(idx);
            }
        }

        private ListBox listBox;
        private Button button;
        private Form form;

        private void button1_Click(object sender, EventArgs e)
        {
            form = new Form();
            form.ClientSize = new System.Drawing.Size(377, 309);
            form.StartPosition = FormStartPosition.CenterScreen;
            form.Text = "Form2";                        
            listBox = new ListBox();
            listBox.FormattingEnabled = true;
            listBox.Location = new System.Drawing.Point(34, 30);
            listBox.Name = "listBox";
            listBox.Size = new System.Drawing.Size(120, 134);
            listBox.TabIndex = 0;
            button = new Button();            
            button.Location = new System.Drawing.Point(177, 30);
            button.Name = "button";
            button.Size = new System.Drawing.Size(75, 23);
            button.TabIndex = 1;
            button.Text = "button";
            button.UseVisualStyleBackColor = true;
            button.Click += new System.EventHandler(this.button_Click);
            form.Controls.Add(listBox);
            form.Controls.Add(button);
            for (int idx = 5; idx < 10; idx++)
            {
                listBox.Items.Add(idx);
            }
            form.Show();            
        }

        private void button_Click(object sender, EventArgs e)
        {
            for (int idx = 0; idx < listBox.Items.Count; idx++)
            {
                listBox1.Items.Add(listBox.Items[idx]);
                form.Close();
            }
        }
так если через 2 формы в редакторе MVS
1 форма:
Код:
private void Form1_Load(object sender, EventArgs e)
        {
            for (int idx = 0; idx < 5; idx++)
            {
                this.listBox1.Items.Add(idx);
            }
        }
       
        private Form2 form;

        private void button1_Click(object sender, EventArgs e)
        {
            form = new Form2();  
            form.button1.Click += new EventHandler(form2_button1_Click);                    
            for (int idx = 5; idx < 10; idx++)
            {
                form.listBox1.Items.Add(idx);
            }
            form.Show();            
        }

        private void form2_button1_Click(object sender, EventArgs e)
        {
            for (int idx = 0; idx < form.listBox1.Items.Count; idx++)
            {
                listBox1.Items.Add(form.listBox1.Items[idx]);
                form.Close();
            }
        }
в ствойствах 2 ой формы выставляете модификаторы доступа для контролов(в вашем случаи listbox1), чтобы он доступен из первый формы:
Код:
namespace WindowsFormsApplication3
{
    partial class Form2
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.button1 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            //
            // listBox1
            //
            this.listBox1.FormattingEnabled = true;
            this.listBox1.Location = new System.Drawing.Point(21, 12);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(120, 134);
            this.listBox1.TabIndex = 1;
            //
            // button1
            //
            this.button1.Location = new System.Drawing.Point(157, 12);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 2;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            //
            // Form2
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(377, 309);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.listBox1);
            this.Name = "Form2";
            this.Text = "Form2";
            this.ResumeLayout(false);

        }

        #endregion

        public System.Windows.Forms.ListBox listBox1;
        public System.Windows.Forms.Button button1;
    }
}
Цитата:
А по каким причинам происходит задержка обновления LISTBOX или считывания данных с БД Access?
т.е. я добавляю сотрудника в компанию в базу данных он попадает, но отображение в листбоксе проходит с задержкой (~ 3 сек)

все зависит от информации в базе и способа обновления listbox, чем больше информации тем дольше идет обновление.

12K
18 ноября 2016 года
alcatraz_kms
96 / / 01.10.2013
спс за ответы, с ООП я только начал знакомится в более так сказать тесном контакте
323
18 ноября 2016 года
UserNet2008
679 / / 03.04.2010
Цитата: alcatraz_kms
ок, что тогда нужно написать на события закрытия формы3 , чтобы обновился листбокс2 на форме 1?

 
Код:
//можно так
// из Form3
//listBox2.Items.Insert(input_data);
Form1.listBox2.Update();

// OR

Form3.Closing or Form3.Closed
// перед закрытием Form3 or после закрытия Form3
Form1.listBox2.Update();
p/s это есть Сoncept code
444
18 ноября 2016 года
cronya
417 / / 03.01.2009
Цитата: UserNet2008
Цитата: alcatraz_kms
ок, что тогда нужно написать на события закрытия формы3 , чтобы обновился листбокс2 на форме 1?

 
Код:
//можно так
// из Form3
//listBox2.Items.Insert(input_data);
Form1.listBox2.Update();

// OR

Form3.Closing or Form3.Closed
// перед закрытием Form3 or после закрытия Form3
Form1.listBox2.Update();
p/s это есть Сoncept code

возможно я вас не понял, но таким методом вы не сможете получить указатель родительской формы в дочерней. И смысла нету делать Update, после получения фокуса первой формы, когда закрыли 2 форму, так как событие paint в любом случаи вызывается.

323
18 ноября 2016 года
UserNet2008
679 / / 03.04.2010
Автор темы не говорил о Parent and Child form, если есть три формы это не показатель Parent and Child form.
событие paint здесь не при делах
444
19 ноября 2016 года
cronya
417 / / 03.01.2009
Цитата: UserNet2008
событие paint здесь не при делах

Ошибаетесь, если речь идет о Controls.
Автору советовал был попробывать так при добавлении информации в листбокс:

 
Код:
this.listBox1.BeginUpdate();
for (int idx=0; idx < 10000; idx++)
{
     this.listBox1.Items.Add(idx);
}
this.listBox1.EndUpdate();
323
19 ноября 2016 года
UserNet2008
679 / / 03.04.2010
событие paint нужно для работы с кистями для рисования на объектах поддерживающие событие paint
А Controls есть почти у всех объектов только не могу понять причём тут Controls
444
19 ноября 2016 года
cronya
417 / / 03.01.2009
Цитата: UserNet2008
событие paint нужно для работы с кистями для рисования на объектах поддерживающие событие paint
А Controls есть почти у всех объектов только не могу понять причём тут Controls

Control.Paint здесь почитайте
WM_PAINT здесь почитайте
Control.Update и здесь
Если вы до сих пор считаете, что там нету связи, нам с вами разговаривать не о чем...

 
Код:
//можно так
// из Form3
//listBox2.Items.Insert(input_data);
Form1.listBox2.Update();

// OR

Form3.Closing or Form3.Closed
// перед закрытием Form3 or после закрытия Form3
Form1.listBox2.Update();
Ничего не даст, кроме еще одной перерисовки котрола Listbox и всей формы, которая выполняется и так после добавления каждого элемента в этот контрол.
12K
22 ноября 2016 года
alcatraz_kms
96 / / 01.10.2013
причина была проста не верно выставлен adapter который должен обновится)))))
12K
28 ноября 2016 года
alcatraz_kms
96 / / 01.10.2013
В листбоксе вкл возможность изменения расположения элементов т.е. перетаскивание мышкой. Вопрос возможно ли сохранить расположение элементов в файл или как то еще, чтобы когда заново запустил приложение элементы находились там где были в прошлый раз?
1
28 ноября 2016 года
kot_
7.3K / / 20.01.2000
Цитата: alcatraz_kms
В листбоксе вкл возможность изменения расположения элементов т.е. перетаскивание мышкой. Вопрос возможно ли сохранить расположение элементов в файл или как то еще, чтобы когда заново запустил приложение элементы находились там где были в прошлый раз?

Если выборка делается из БД - разумней в таблице сделать столбец типа сорт_ид и при выборке сортировать по этому столбцу в первую очередь. Соответственно при перетаскивании инкрементироватьдекрементировать это значение и записывать в БД.

444
30 ноября 2016 года
cronya
417 / / 03.01.2009
Цитата: alcatraz_kms
В листбоксе вкл возможность изменения расположения элементов т.е. перетаскивание мышкой. Вопрос возможно ли сохранить расположение элементов в файл или как то еще, чтобы когда заново запустил приложение элементы находились там где были в прошлый раз?

Что вам мешает сохранить список в нужном порядке в файл, потом загрузить обратно в листбоск.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог