powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / не понятная ошибка
9 сообщений из 9, страница 1 из 1
не понятная ошибка
    #35309615
ошибка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в TreeView свойство LabelEdit установлено в True.
На событие AfterLabelEdit повешен код. Все работает. Но... Если редактируя текст TreeNode я нажму мышью какую-нибудь кнопку на форме (т.е. выхожу из режима редактирования, тем самым соглашаясь со сделанными мною изменениями, и запускаю команду,прописанную для кнопки), то получаю ошибку:
и в коде выделяется эта строка:

static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}

текст ошибки:
Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
если завершать редактирование надписи не нажатием на кнопке, а нажатием на том же TreeView - все работает нормально.
Как справиться с этим? Я же не могу юзеру запретить выходить из режима правки текста таким способом, который выдаст эту ошибку, к тому же с точки зрения удобства то, что юзер нажмет на кнопку - не лишено смысла, т.к. создавать ноды он постарается как можно быстрее и клики будет экономить...
...
Рейтинг: 0 / 0
не понятная ошибка
    #35309630
vagner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. В студии Debug -> Exceptions (включите все что можно).
2. Запустите программу еще раз и воспроизведите ситуацию, приводящую к ошибке.
3. По идее, выполнение программы должно остановиться на той строчке, которая вызывает проблему.
4. Найдите ошибку в своей программе.
...
Рейтинг: 0 / 0
не понятная ошибка
    #35309662
ошибка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vagner1. В студии Debug -> Exceptions (включите все что можно).
2. Запустите программу еще раз и воспроизведите ситуацию, приводящую к ошибке.
3. По идее, выполнение программы должно остановиться на той строчке, которая вызывает проблему.
4. Найдите ошибку в своей программе.
ошибку получаю практически сразу же - на третьей строке:
Код: plaintext
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.
private void treeStructure_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
        {
            if (e.Label == null && ((MyNode)e.Node).IsNewNode) { e.CancelEdit = true;
            e.Node.Remove();
                return; } // ошибка получается как только доходит до этой строки (брэйкпоинт поставил здесь и увидел...
            if (e.Label == null) { e.CancelEdit = true; return; }            
            if (e.Label.Trim() == "" && ((MyNode)e.Node).IsNewNode) 
            { e.CancelEdit = true;
            e.Node.Remove();
                return; }
            if (e.Label.Trim() == "") { e.CancelEdit = true; return; }
            if (((MyNode)e.Node).Father == null)
            {
                foreach (TreeNode item in treeStructure.Nodes)
                {
                    if (e.Label.Trim().ToUpper() == item.Text.Trim().ToUpper())
                    {
                        e.CancelEdit = true;
                        MessageBox.Show("Позиция с таким наименованием уже существует", "Внимание",
                             MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        if (((MyNode)e.Node).IsNewNode) e.Node.Remove();
                        return;
                    }
                }
            }
            else
            {
                foreach (TreeNode item in e.Node.Parent.Nodes)
                {
                    if (e.Label.Trim().ToUpper() == item.Text.Trim().ToUpper())
                    {
                        e.CancelEdit = true;
                        MessageBox.Show("Позиция с таким наименованием уже существует", "Внимание",
                             MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        if (((MyNode)e.Node).IsNewNode) e.Node.Remove();
                        return;
                    }
                }
            }
            MyNode node = (MyNode)e.Node;
            if (node.IsNewNode)
            {                
                DataRow row = DataTableSource.NewRow();
                row[NodeTextFieldName] = e.Label.Trim();
                DataTableSource.Rows.Add(row);
                node.ID = (int) row[PrimaryKeyFieldName];
                node.IsNewNode = false;
                node.Text = (string)row[NodeTextFieldName];
                if (node.Parent != null)
                {
                    node.Father = ((MyNode)node.Parent).ID;
                    row[ForeignKeyFieldName] = node.Father;
                }
            }
            else
            {
                DataRow row = DataTableSource.Rows.Find(node.ID);
                row[NodeTextFieldName] = e.Label.Trim();
            }            
        }
...
Рейтинг: 0 / 0
не понятная ошибка
    #35309672
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что происходит раньше потеря фокуса или AfterLabelEdit?
...
Рейтинг: 0 / 0
не понятная ошибка
    #35309676
ошибка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
причем, повторюсь, ошибка будет только если в режиме редактирования текста нажму на любую кнопку контрола, а не предварительно выйду из него, нажав Ентер, или кликнув на тривью...
...
Рейтинг: 0 / 0
не понятная ошибка
    #35309700
ошибка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pationа что происходит раньше потеря фокуса или AfterLabelEdit?
х.з.
...
Рейтинг: 0 / 0
не понятная ошибка
    #35309748
vagner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понял - ошибка вот здесь?
Код: plaintext
e.Node.Remove();
Если да - почитайте про Remove, возможно его нельзя вызывать из обработчиков событий.
А, возможно, Вам повезло и Вы наткнулись на ошибку в FW :)
...
Рейтинг: 0 / 0
не понятная ошибка
    #35309766
ошибка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vagnerНе совсем понял - ошибка вот здесь?
Код: plaintext
e.Node.Remove();
Если да - почитайте про Remove, возможно его нельзя вызывать из обработчиков событий.
А, возможно, Вам повезло и Вы наткнулись на ошибку в FW :)
нет. ошибка после return;
щас пошагово смотрю в чем дело...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
не понятная ошибка
    #38081915
Hard_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Простите если возможно повторюсь, или напишу не в тему...
У меня иногда выходит та же самая ошибка, я знаю где, но проблема в том что она не всегда есть и буквально на прямом месте.
Код: vbnet
1.
2.
3.
4.
5.
Dim tmpNode As System.Windows.Forms.TreeNode() = CustomerTree_TreeView.Nodes.Find(sKey, True)
If tmpNode.Length > 0 Then
	CustomerTree_TreeView.SelectedNode = tmpNode(0) ' тут возникает ошибка
	CustomerTree_TreeView.SelectedNode.EnsureVisible()
End If



с деревом работа простая, в основном передвижение. заполнятся оно в начале открытия формы, либо по мере изменение данных.
предполагаю что ошибка связана с моментом перерисовки дерева и его активации. Если есть у кого другие предположения или он сталкивался с подобной проблемой прошу написать.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / не понятная ошибка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]