Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
1
.NET 4.x

Отслеживание изменения DataGridViewComboBoxCell

21.06.2013, 12:32. Показов 4424. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добый день. Начал изучать С# и столкнулся с одной проблеймой.
Есть таблица DataViewGrid, в которую дабавляю данные из БД. В этой таблице мне нужно изменять данные. Для удобства я добавил 3 списка.
Вот код добавления:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
DataGridViewComboBoxCell cmb = new DataGridViewComboBoxCell();
DataGridViewComboBoxCell cmb1 = new DataGridViewComboBoxCell();
DataGridViewComboBoxCell cmb2 = new DataGridViewComboBoxCell();
 
                cmb.MaxDropDownItems = 5;
                cmb.Items.Add("Машинист");
                cmb.Items.Add("Помощник");
                cmb.Items.Add("Дублер");
                cmb.Items.Add("Машинист - инструктор");
                cmb.Items.Add("Водитель");
                dataGridView1.Rows[6].Cells[0] = cmb;
                cmb.Value = (string)dataReader["post"];
 
               
                cmb2.MaxDropDownItems = 2;
                cmb2.Items.Add("М");
                cmb2.Items.Add("Ж");
                dataGridView1.Rows[10].Cells[0] = cmb2;
                cmb2.Value = (string)dataReader["gender"];
 
               
                if (cmb.Value.ToString() == "Машинист")
                {
                    cmb1.MaxDropDownItems = 3;
                    cmb1.Items.Add("1 кл");
                    cmb1.Items.Add("2 кл");
                    cmb1.Items.Add("3 кл");
                    dataGridView1.Rows[7].Cells[0] = cmb1;
                    cmb1.Value = (string)dataReader["class"];
                }
                else
                {
                    cmb1.MaxDropDownItems = 1;
                    dataGridView1.Rows[7].Cells[0] = cmb1;
                }
Мне нужно отследить изменения в списке "cmb". Т.е. Если там выбрано "Машинист", то в списке "cmb1" нужно добавить список классов, если выбрано что-либо другое, то список очищаю.
Я думал, что в DataGridViewComboBoxCell есть события, а их увы нет... Сделал по событию "CellParsing".
Вот код события:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void dataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
        {
            if (e.RowIndex == 6)
            {
                //MessageBox.Show(cmb.Selected.ToString());
                if (cmb.Value.ToString() == "Машинист")
                {
                    if (cmb1.MaxDropDownItems == 1)
                    {
                        cmb1.MaxDropDownItems = 3;
                        cmb1.Items.Add("1 кл");
                        cmb1.Items.Add("2 кл");
                        cmb1.Items.Add("3 кл");
                    }
                }
                else
                {
                    cmb1.MaxDropDownItems = 1;
                    cmb1.Value = null;
                    cmb1.Items.Clear();
                }
            }
        }
Но проблема в том, что при первом выборе элемента списка значение не заносится в cmb.Value. Нужно выбрать еще раз и тогда прошлой выбранное внесется в Value. Так же после выбора элемента нужно кликнуть на любой ячейке таблицы, что бы вызвать событие CellParsing.

Подскажите как правильно сделать отслеживание изменения значений в списке, что бы не счелкать на любой ячейке и не выбирать два раза значение... То что смог придумать это сделать свой класс DataGridViewComboBoxCell с добавлением события изменения значения ячейки, но для этого моих знаний пока не хватает...

Буду очнь благодарен за помощь

Добавлено через 1 час 56 минут
Вроде получилось, наверно, не совсем правильно... Но увы, пока так. Если можно по другому посоветуйте как.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
 
        //определение ячейки, на которую нажали. И в зависимости от выбранной ячейки выводятся разные списки
        private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            SetComboBoxCellType objChangeCellType = new SetComboBoxCellType(ChangeCellToComboBox);
            if (e.RowIndex == 6)
            {
                this.dataGridView1.BeginInvoke(objChangeCellType, e.RowIndex);
                bIsComboBox = false;
            }
            if (e.RowIndex == 7)
            {
                this.dataGridView1.BeginInvoke(objChangeCellType, e.RowIndex);
                bIsComboBox = false;
            }
            if (e.RowIndex == 10)
            {
                this.dataGridView1.BeginInvoke(objChangeCellType, e.RowIndex);
                bIsComboBox = false;
            }
        }
 
        //создание и вывод списков в зависимости от нажатой ячейки
        private void ChangeCellToComboBox(int iRowIndex)
        {
            if (iRowIndex == 6)
            {
                if (bIsComboBox == false)
                {
                    DataGridViewComboBoxCell dgComboCell = new DataGridViewComboBoxCell();
                    dgComboCell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
 
                    DataTable dt = new DataTable();
                    dt.Columns.Add("work", typeof(string));
 
                    //for (int i = 0; i < 5; i++)
                    //{
                    //DataRow dr = dt.NewRow();
                    //dr["Name"] = "Name - " + i.ToString();
 
                    dt.Rows.Add("Машинист");
                    dt.Rows.Add("Помощник");
                    dt.Rows.Add("Машинист - инструктор");
                    dt.Rows.Add("Водитель");
                    dt.Rows.Add("Дублер");
 
                    //}
                    //for (int i = 0; i < 5; i++)
 
                    dgComboCell.DataSource = dt;
                    dgComboCell.ValueMember = "work";
                    dgComboCell.DisplayMember = "work";
 
                    try
                    {
                        MessageBox.Show(dgComboCell.Value.ToString());
                    }
                    catch
                    { }
                    dataGridView1.Rows[iRowIndex].Cells[dataGridView1.CurrentCell.ColumnIndex] = dgComboCell;
                    bIsComboBox = true;
                }
            }
            if (iRowIndex == 7)
            {
                if (bIsComboBox == false)
                {
                    DataGridViewComboBoxCell dgComboCell = new DataGridViewComboBoxCell();
                    dgComboCell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
 
                    DataTable dt = new DataTable();
                    dt.Columns.Add("class", typeof(string));
 
                    //for (int i = 0; i < 5; i++)
                    //{
                    //DataRow dr = dt.NewRow();
                    //dr["Name"] = "Name - " + i.ToString();
 
                    dt.Rows.Add("1 кл");
                    dt.Rows.Add("2 кл");
                    dt.Rows.Add("3 кл");
 
                    //}
                    //for (int i = 0; i < 5; i++)
 
                    dgComboCell.DataSource = dt;
                    dgComboCell.ValueMember = "class";
                    dgComboCell.DisplayMember = "class";
 
                    dataGridView1.Rows[iRowIndex].Cells[dataGridView1.CurrentCell.ColumnIndex] = dgComboCell;
                    bIsComboBox = true;
                }
            }
 
            if (iRowIndex == 10)
            {
                if (bIsComboBox == false)
                {
                    DataGridViewComboBoxCell dgComboCell = new DataGridViewComboBoxCell();
                    dgComboCell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
 
                    DataTable dt = new DataTable();
                    dt.Columns.Add("gender", typeof(string));
 
                    //for (int i = 0; i < 5; i++)
                    //{
                    //DataRow dr = dt.NewRow();
                    //dr["Name"] = "Name - " + i.ToString();
 
                    dt.Rows.Add("М");
                    dt.Rows.Add("Ж");
 
                    //}
                    //for (int i = 0; i < 5; i++)
 
                    dgComboCell.DataSource = dt;
                    dgComboCell.ValueMember = "gender";
                    dgComboCell.DisplayMember = "gender";
 
                    dataGridView1.Rows[iRowIndex].Cells[dataGridView1.CurrentCell.ColumnIndex] = dgComboCell;
                    bIsComboBox = true;
                }
            }
        }
//после завершения изменения обрабатываю событие и смотрю что было выбрано. Если выбрано "Машинист", то разрешаю изменение ячейки со списком класс, в противном случае запрещаю изменение ячейки.
 private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex == 6)
            {
                if (dataGridView1[0, 6].Value != null)
                {
                    if (dataGridView1[0, 6].Value.ToString() != "Машинист")
                    {
                        dataGridView1.Rows[7].Cells[0].ReadOnly = true;
                    }
                    else
                    {
                        dataGridView1.Rows[7].Cells[0].ReadOnly = false;
                    }
                }
            }
        }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.06.2013, 12:32
Ответы с готовыми решениями:

Отслеживание изменения переменной
Здравствуйте! Вопрос немного ламерский. Есть trackBar. Есть значение переменной, допустим, а....

Отслеживание изменения файла
Не могу разобраться, почему при отслеживании изменений в файле происходит двойной вызов. Вот код...

Отслеживание изменения значения переменной
Привет! Возникла такая задача - есть адрес переменной в памяти какого-то процесса. Мне нужно...

Отслеживание изменения значения переменной
Как мне сделать так, что бы при изменении переменной, выполнялась функция из другого класса и после...

14
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
21.06.2013, 12:33 2
Как вариант,далеко не самый лучший и не полностью готовый,только по-сабжу..

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public delegate void valchng(object sender,EventArgs e);
    public class MyDataGridViewComboBoxCell : DataGridViewComboBoxCell
    {
        public event valchng ValueChanged;
        
        protected override bool SetValue(int rowIndex, object value)
        {
 
            if (ValueChanged != null)
            {
 
                ValueChanged(this, new EventArgs());                
 
                return base.SetValue(rowIndex,value);
 
            } return false;
 
        }
 
        protected override object GetValue(int rowIndex)
        {
            return base.GetValue(rowIndex);
        }
    
       
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 MyDataGridViewComboBoxCell cell = new MyDataGridViewComboBoxCell();
 
      
        private void Form1_Load(object sender, EventArgs e)
        {
            cell.Items.Add("assa");
            cell.Items.Add("ooo");
            cell.Value = "";
            cell.ValueChanged += (sn, ea) => { MessageBox.Show("Value changed!"); };
            dataGridView1.Columns.Add("ds", "sdsds");
            dataGridView1.Rows.Add(1);
            dataGridView1.Rows[0].Cells[0]=cell;
}
1
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
21.06.2013, 13:00  [ТС] 3
Добрый день sniper_lunev.
Попробую разобраться в коде, который Вы дали.

Мы создаем делегат. Создаем класс DataGridViewComboBoxCell, который наследуется от DataGridViewComboBoxCell. Создаем событие и переназначаем SetValue и GetValue; Т.к. выбрали элемент и изменили содержимое ячейки мы вызываем событие ValueChanged.
Далее я создаю обработчик этого события
C#
1
2
3
4
5
6
7
cell.ValueChanged+=new System.EventHandler(this.valueChanged);
 
//обработчик
private void valueChanged(object sender, EventArgs e)
        {
             
        }
правильно?
0
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
21.06.2013, 13:05 4
Цитата Сообщение от Stelsing Посмотреть сообщение
правильно?
да,все верно.
1
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
21.06.2013, 13:15  [ТС] 5
Хорошо, а чем такой вариант плох?
0
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
21.06.2013, 13:23 6
Кстати,вот еще
C#
1
2
3
4
5
6
7
8
 if (ValueChanged != null)
            {
 
                ValueChanged(this, new EventArgs());                
 
                return base.SetValue(rowIndex,value);
 
            } return false;//Заменить на return base.SetValue(rowIndex,value);
Я не знаю,зачем я в возврат пихнул false,получается,если обьект не подписан на событие,то и меняться ничего не будет..Мой косяк)
0
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
21.06.2013, 13:30  [ТС] 7
вот теперь я немного не понял
Если изменения были (ValueChanged != null) то мы вызываем событие, возвращаем номер строки и значение, на что изменилось.
Если изменений не было (ValueChanged == null) то мы не вызываем событие. Зачем возвращать return base.SetValue(rowIndex,value); ?

Если вопросы глупые, извиняюсь, я только учусь...
0
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
21.06.2013, 13:38 8
C#
1
(ValueChanged != null)
говорит,есть ли подписчики у события.
Если вызывается метод SetValue,то изменения уже есть.

т.е. мы вызываем событие только тогда,когда есть подписчики на это событие и,независимо от этого,изменяем значение..
1
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
21.06.2013, 14:35  [ТС] 9
Понял. Если мы создали обработчик события, то вызываем событие и передаем ему параметры (ValueChanged(this, new EventArgs()); ) и возвращаем значения номер строки и значение. В противном случае все тоже, но без вызова события.
Попробую это использовать.

Добавлено через 53 минуты
Попробовал я Ваш вариант. Работает не совсем так как хотелось бы
C#
1
2
3
4
5
6
7
8
9
MyDataGridViewComboBoxCell dgComboCell = new MyDataGridViewComboBoxCell();
 
dgComboCell.ValueChanged += dgComboCell_ValueChanged;
 
void dgComboCell_ValueChanged(object sender, EventArgs e)
        {
            //throw new NotImplementedException();
            MessageBox.Show("ok");
        }
Событие выполняется когда нажимаю на списке (еще ничео не выбрав). А когда выбираю значение из списка событие выполняется только, когда счелкаю на любом другом поле таблицы...
Сейчас попробую еще, может получится переделать немного.
0
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
21.06.2013, 14:44 10
А когда выбираю значение из списка событие выполняется только, когда счелкаю на любом другом поле таблицы...
Сейчас попробую еще, может получится переделать немного.
Так и должно быть,в принципе,т.к. значения применяются после...
когда счелкаю на любом другом поле таблицы...
Событие выполняется когда нажимаю на списке (еще ничео не выбрав).
В смысле?
0
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
21.06.2013, 14:53  [ТС] 11
После открытия окна и создания таблицы я счелкаю на поле, где список. После этого срабатывает событие. После я нажимаю еще раз для раскрытия списка, выбираю нужный параметр. Затем счелкаю на любом другом поле таблицы и у меня срабатывает событие. Я в нем вывожу значение
C#
1
MessageBox.Show(dataGridView1.Rows[6].Cells[0].Value.ToString());
Но строка не меняется. Если, к примеру, было выбрано Машинист, я переключаю на Водитель, то в событие высвечивается Машинист. Получается как предыдущее значение сохраняется в ячейке...
0
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
21.06.2013, 15:06 12
Потому что,сначала вызывается событие,а потом применяются значения.Тогда уж вот так:

C#
1
2
3
4
5
6
7
8
 if (ValueChanged != null)
            {
                base.SetValue(rowIndex, value);
                ValueChanged(this, new EventArgs());
                return true;
 
 
            } return base.SetValue(rowIndex, value);
После открытия окна и создания таблицы я счелкаю на поле, где список. После этого срабатывает событие.
А этого по-идее не должно быть,да и у меня такого нету..
1
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
21.06.2013, 15:47  [ТС] 13
Кстати да, в начале отрисовать, а потом событие вызвать... Не додумался...
Вот что мне передается в событие Sender -ом при нажатии на список, без выбора и без его раскрытия.
C#
1
{DataGridViewComboBoxCell { ColumnIndex=-1, RowIndex=-1 }}
0
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
21.06.2013, 15:58 14
Говорю же,у меня нету такого,видимо Вы где-то что-то напутали.

Можно тогда еще добавить проверку
C#
1
2
3
4
5
6
7
8
if (ValueChanged != null && rowIndex > -1)
            {
         base.SetValue(rowIndex, value);
                ValueChanged(this, new EventArgs());
                return true;
 
 
            } return base.SetValue(rowIndex, value);
1
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
21.06.2013, 21:36  [ТС] 15
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

2 sniper_lunev
Вроде получилось.
Вот код результата:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public delegate void valchng(object sender, EventArgs e);
    public class MyDataGridViewComboBoxCell : DataGridViewComboBoxCell
    {
        public event valchng ValueChanged;
 
        protected override bool SetValue(int rowIndex, object value)
        {
 
            if (ValueChanged != null && rowIndex!=-1)
            {
 
                base.SetValue(rowIndex, value);
                ValueChanged(this, new EventArgs());
                return true;
 
            } return base.SetValue(rowIndex, value);
 
        }
 
        protected override object GetValue(int rowIndex)
        {
            return base.GetValue(rowIndex);
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            SetComboBoxCellType objChangeCellType = new SetComboBoxCellType(ChangeCellToComboBox);
            if ((e.RowIndex == 6)||(e.RowIndex == 7)||(e.RowIndex == 10))
            {
                this.dataGridView1.BeginInvoke(objChangeCellType, e.RowIndex);
                bIsComboBox = false;
            }
        }
 
        private void ChangeCellToComboBox(int iRowIndex)
        {
            if (iRowIndex == 6)
            {
                if (bIsComboBox == false)
                {
                    MyDataGridViewComboBoxCell dgComboCell = new MyDataGridViewComboBoxCell();
                    dgComboCell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
 
                    //dgComboCell.ValueChanged += new System.EventHandler(this.ValueChanged);
                    //dgComboCell.ValueChanged += new 
                    dgComboCell.ValueChanged += dgComboCell_ValueChanged;
 
                    DataTable dt = new DataTable();
                    dt.Columns.Add("work", typeof(string));
 
                    dt.Rows.Add("Машинист");
                    dt.Rows.Add("Помощник");
                    dt.Rows.Add("Машинист - инструктор");
                    dt.Rows.Add("Водитель");
                    dt.Rows.Add("Дублер");
 
 
                    dgComboCell.DataSource = dt;
                    dgComboCell.ValueMember = "work";
                    dgComboCell.DisplayMember = "work";
                    dgComboCell.Value = dataGridView1.Rows[iRowIndex].Cells[dataGridView1.CurrentCell.ColumnIndex].Value;
 
                    try
                    {
                        //MessageBox.Show(dgComboCell.Value.ToString());
                    }
                    catch
                    { }
                    dataGridView1.Rows[iRowIndex].Cells[dataGridView1.CurrentCell.ColumnIndex] = dgComboCell;
                    bIsComboBox = true;
                }
            }
            if (iRowIndex == 7)
            {
                if (bIsComboBox == false)
                {
                    MyDataGridViewComboBoxCell dgComboCell = new MyDataGridViewComboBoxCell();
                    dgComboCell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
 
                    DataTable dt = new DataTable();
                    dt.Columns.Add("class", typeof(string));
 
                    dt.Rows.Add("1 кл");
                    dt.Rows.Add("2 кл");
                    dt.Rows.Add("3 кл");
 
                    dgComboCell.DataSource = dt;
                    dgComboCell.ValueMember = "class";
                    dgComboCell.DisplayMember = "class";
                    if (dataGridView1.Rows[6].Cells[0].Value.ToString() == "Машинист")
                    {
                        dgComboCell.Value = dataGridView1.Rows[iRowIndex].Cells[dataGridView1.CurrentCell.ColumnIndex].Value;
                    }
                    else
                    {
                        dgComboCell.Value = "";
                    }
 
                    dataGridView1.Rows[iRowIndex].Cells[dataGridView1.CurrentCell.ColumnIndex] = dgComboCell;
                    bIsComboBox = true;
                }
            }
 
            if (iRowIndex == 10)
            {
                if (bIsComboBox == false)
                {
                    MyDataGridViewComboBoxCell dgComboCell = new MyDataGridViewComboBoxCell();
                    dgComboCell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
 
                    DataTable dt = new DataTable();
                    dt.Columns.Add("gender", typeof(string));
 
                    dt.Rows.Add("М");
                    dt.Rows.Add("Ж");
 
 
                    dgComboCell.DataSource = dt;
                    dgComboCell.ValueMember = "gender";
                    dgComboCell.DisplayMember = "gender";
                    dgComboCell.Value = dataGridView1.Rows[iRowIndex].Cells[dataGridView1.CurrentCell.ColumnIndex].Value;
 
                    dataGridView1.Rows[iRowIndex].Cells[dataGridView1.CurrentCell.ColumnIndex] = dgComboCell;
                    bIsComboBox = true;
                }
            }
        }
 
        //обработка изменения в списке
        void dgComboCell_ValueChanged(object sender, EventArgs e)
        {
               if (dataGridView1[0, 6].Value != null)
                {
                    if (dataGridView1[0, 6].Value.ToString() != "Машинист")
                    {
                        dataGridView1.Rows[7].Cells[0].ReadOnly = true;
                    }
                    else
                    {
                        dataGridView1.Rows[7].Cells[0].ReadOnly = false;
                        dataGridView1.Rows[7].Cells[0].Value = "";
                    }
                }
        }
0
21.06.2013, 21:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2013, 21:36
Помогаю со студенческими работами здесь

Отслеживание программного изменения положения курсора
Добрый день. Как можно, да и можно ли вообще узнать, указатель переместился с помощью мыши, или его...

Отслеживание изменения значения свойства класса
Доброго всем времени суток! Есть некий класс, которых хранит свойства в виде class SomeClass {...

Отслеживание изменения файлов.
Подскажите пожалуйста, как можно отследить время изменения файлов в папке, учитывая, что их там...

Отслеживание изменения состояния службы
7. Служба отслеживает изменения состояния (приостановка, запуск, остановка) заданной службы и...

Отслеживание изменения файла
Саму программу написал, но вот часть задания, которую не очень понимаю: &quot;...Программа должна...

Отслеживание и изменения в таблице
У меня есть таблица и каждый tr в ней имеет определенный id, Мне нужно отследить изменения input в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru