Рейтинг:
7
OriginalGriff
Вы делаете это очень неправильно: ваша форма 2 не должна знать, что форма 1 вообще существует, но меньше того, какие свойства или поля она имеет.
Как только я увижу ключевые слова public static
очевидно, что вы идете неправильно - вам не нужно использовать static
переменные в коде настолько просты, и вы не должны создавать поля или элементы управления public
вообще!
Начните с чтения этого: Передача информации между двумя формами, Часть 1: Родитель-Ребенок[^]
Форма form1 ваших родителей, форму Form2 вашего ребенка.
Затем создайте свойство в Form2 и установите его при создании экземпляра. Теперь ваши формы "развязаны", поэтому только родитель должен знать что-либо о ребенке.
Тогда исправь свою ошибку. null
проблема - и это тоже просто:
FolderPath = Path.GetDirectoryName(folder.SelectedPath);
Path.GetDirectoryName
ожидает путь к файлу, а не к папке - и возвращает папку, в которой находится этот файл. Поэтому, когда вы передаете ему папку вместо файла, он "вычеркивает" окончательное имя папки:
C:\docs\today
становится
C:\docs
C:\docs
становится
C:
C:\
становится
null
То
SelectedPath
собственность компании
FolderBrowserDialog
это уже папка, а не файл - вам не нужно получать имя папки из этого!
dejf111
Когда я прочитаю эту статью, могу ли я предложить здесь, как я ее решаю?
OriginalGriff
Помоги себе сам!
dejf111
в переводе на мой язык это означает две вещи и я не знаю какую именно ты имеешь в виду
OriginalGriff
И не имея ни малейшего представления о том, что вы говорите, я тоже не знаю!
Вернитесь к своему первоначальному комментарию "когда я прочитаю статью, могу ли я предложить здесь, как я ее решу?" и напишите это снова на своем родном языке - используйте много деталей. Затем используйте Google Translate, чтобы преобразовать его на английский язык и опубликовать перевод здесь.
dejf111
Надеюсь, я вас не расстроил
OriginalGriff
Нет - нет, простите, если я произвел на вас такое впечатление.
Ваш комментарий "Когда я читаю статью, могу ли я предложить здесь, как я ее решаю?" По - английски это звучит так: "Когда я прочитаю статью, могу ли я опубликовать здесь свое решение?" - отсюда и мой ответ.
Если это не то, что вы имели в виду, то, пожалуйста, используйте Google translate, чтобы попытаться объяснить более подробно! :смеяться:
dejf111
твоя статья потрясающая может быть я начинаю понимать ее
OriginalGriff
О, хорошо! :большой палец вверх:
dejf111
Я попытался переписать его в соответствии со статьей
OriginalGriff
И что же? Что случилось?
dejf111
две вещи не работают для меня, одна сдвигает form2, а другая close() не закрыла ни одного моего окна
OriginalGriff
"одна изменяющаяся форма2"
"close() не закрыл ни одного моего окна"
Они не имеют никакого смысла для меня в изоляции ...
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы. Поэтому, если вы пишете код, который не работает, мы не можем сказать, что именно вы написали, пока вы не покажете его нам!
dejf111
возможно, я смогу объяснить это подробнее
частная form2_FormClosed недействительным(объект отправителя, FormClosedEventArgs е)
{
Закрывать();
}
записывает ошибку StackOverflowException и ни одно окно не закрывается
form2.Location = новая точка( Location.X,Местоположение.Y+Высота+30);
Я полагаю, что он должен переместить второе окно под главное окно, меня просто перекрывают
OriginalGriff
"Пишет исключение переполнения стека" - это показывает, что вы просто догадывались, что делать! :смеяться:
Происходит то, что вы обрабатываете событие FormClosed для Form2 в Form2 и закрываете форму в этом случае. Это приводит к тому, что система снова вызывает обработчик FormClosing, который закрывает форму, которая вызывает обработчик, который ... до тех пор, пока стек не заполнится и приложение не выйдет из строя с исключением переполнения стека.
Как вы думаете, почему вам нужно закрыть форму в обработчике close для нее?
Вернитесь к статье и перечитайте ее еще раз - обратите внимание на то, что и где нужно обрабатывать!
dejf111
о'кей, я собираюсь прочитать его еще раз :D
dejf111
Я читаю столько, сколько могу, и все еще не вижу ошибки.
OriginalGriff
Как выглядит ваш код в данный момент?
То, что показывает вам отладчик, происходит - вы использовали отладчик, не так ли?
dejf111
с отладчиком я не очень хороший друг как и со всем остальным
OriginalGriff
Познакомьтесь с отладчиком - это лучший инструмент, который у вас есть, и вы будете тратить на него больше времени, чем на написание кода!
Это может сэкономить Вам дни, даже недели поиска неисправностей.
OriginalGriff
Зачем ты это делаешь?
public static int GetDirectoryCount()
{
var directoryCount = 0;
var directoryIter = Directory.EnumerateDirectories(folderPath);
foreach (var directory in directoryIter)
directoryCount++;
return directoryCount;
}
Когда вы могли бы просто сделать это:
public static int GetDirectoryCount()
{
return Directory.EnumerateDirectories(folderPath).Count();
}
dejf111
Я не знаю почему но я думал что циклы должны быть использованы
OriginalGriff
И почему вы используете статическую переменную для передачи пути, вместо этого используйте параметр:
public static int GetDirectoryCount(string folderPath)
...
dejf111
вы можете быть счастливы за меня, но я наконец-то получил его работу :) :D
OriginalGriff
Ура! Молодец! :большой палец вверх:
dejf111
Еще один вопрос: возможно ли, что он просчитывается?
OriginalGriff
:смеяться:
Откуда мне знать? У меня нет доступа к вашему коду или вашей системе, поэтому я не могу сказать отсюда!
Что вы сделали, чтобы проверить это, и почему вы думаете, что это неправильно?
dejf111
Я спросил мнение более опытного человека, если он сталкивался с этим :)
некоторые каталоги он считает хорошо, документы все хорошо, но я не знаю, как это возможно
OriginalGriff
Не зная, для каких каталогов он работает, а для каких нет, я ничем не могу помочь!
В качестве предложения попробуйте добавить файл журнала в свой код, чтобы он записывал каждую папку, которую он пробует, и сколько он нашел - после этого вы можете проверить вручную и проверить количество. Любые расхождения, и вы можете начать искать, почему они отличаются - но если у вас нет конкретной информации, вы просто свистите в темноте ...
dejf111
хммм я попробую что нибудь сделать
dejf111
Цель достигнута, для меня большая работа.
Большое вам спасибо!
OriginalGriff
Всегда пожалуйста!
dejf111
в этот момент я думаю о том, как я собираюсь прикрепить индивидуальный подсчет
dejf111
В свою защиту скажу, что это была не моя вина, я запустил новый файл проекта, и он уже работал :D
BillWoodruff
+5 Между нами двумя, он может что-то сделать:
https://www.codeproject.com/Answers/5282505/How-to-load-text-in-richtext-box