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

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

текст ошибки:
Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
если завершать редактирование надписи не нажатием на кнопке, а нажатием на том же TreeView - все работает нормально.
Как справиться с этим? Я же не могу юзеру запретить выходить из режима правки текста таким способом, который выдаст эту ошибку, к тому же с точки зрения удобства то, что юзер нажмет на кнопку - не лишено смысла, т.к. создавать ноды он постарается как можно быстрее и клики будет экономить...
...
Рейтинг: 0 / 0
13.05.2008, 16:40
    #35309630
vagner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понятная ошибка
1. В студии Debug -> Exceptions (включите все что можно).
2. Запустите программу еще раз и воспроизведите ситуацию, приводящую к ошибке.
3. По идее, выполнение программы должно остановиться на той строчке, которая вызывает проблему.
4. Найдите ошибку в своей программе.
...
Рейтинг: 0 / 0
13.05.2008, 16:47
    #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
13.05.2008, 16:51
    #35309672
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понятная ошибка
а что происходит раньше потеря фокуса или AfterLabelEdit?
...
Рейтинг: 0 / 0
13.05.2008, 16:52
    #35309676
ошибка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понятная ошибка
причем, повторюсь, ошибка будет только если в режиме редактирования текста нажму на любую кнопку контрола, а не предварительно выйду из него, нажав Ентер, или кликнув на тривью...
...
Рейтинг: 0 / 0
13.05.2008, 16:59
    #35309700
ошибка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понятная ошибка
pationа что происходит раньше потеря фокуса или AfterLabelEdit?
х.з.
...
Рейтинг: 0 / 0
13.05.2008, 17:14
    #35309748
vagner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понятная ошибка
Не совсем понял - ошибка вот здесь?
Код: plaintext
e.Node.Remove();
Если да - почитайте про Remove, возможно его нельзя вызывать из обработчиков событий.
А, возможно, Вам повезло и Вы наткнулись на ошибку в FW :)
...
Рейтинг: 0 / 0
13.05.2008, 17:20
    #35309766
ошибка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понятная ошибка
vagnerНе совсем понял - ошибка вот здесь?
Код: plaintext
e.Node.Remove();
Если да - почитайте про Remove, возможно его нельзя вызывать из обработчиков событий.
А, возможно, Вам повезло и Вы наткнулись на ошибку в FW :)
нет. ошибка после return;
щас пошагово смотрю в чем дело...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
17.12.2012, 14:18
    #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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / не понятная ошибка / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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