Делаю простой файловый менеджер. Папки/файлы отображает компонент webBrowser. Сверху над webBrowser отображается адрес в textBox и его можно редактировать самостоятельно, тем самым переходя по нужному адресу. Проблема в том, что когда отображается адрес C:\ и если я допишу C:\Windows я соответственно перейду в папку C:\Windows, но если после Windows поставить новый слэш, то он сам стирается и курсор ввода сам переходит в начало всей строчки. Решается тем что нужно намеренно сделать ошибку, написав C:\WindowsS, после поставить слэш и прописать следующую папку C:\WindowsS\Help, а потом убрать ошибку C:\Windows\Help, тогда переходит. Подскажите, как исправить это?
private bool adds = true;
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (Directory.Exists(textBox1.Text) || (File.Exists(textBox1.Text)))
{
adds = false;
webBrowser1.Navigate(textBox1.Text);
adds = true;
}
}
1 Выносим в отдельный метод код из обработчика
private void _navigate(string path)
{
if (Directory.Exists(path) || (File.Exists(path)))
webBrowser1.Navigate(path);
}
2 Подписываемся на событие TextBox.KeyDown
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode < Keys.Enter)
{
var tb = (TextBox)sender;
_navigate(tb.Text)
}
}
3 Подписываемся на событие кнопки Click
private void button1_Click(object sender, System.EventArgs e)
{
_navigate(textBox1.Text);
}
4 При потере фокуса, TextBox забывает положение курсора и возвращает его в начало строки когда фокус возвращается к нему. Возвращаем курсор в конец текста, если TextBox терял фокус.
private void textBox1_GotFocus(Object sender, EventArgs e)
{
var tb = (TextBox)sender;
tb.SelectionStart = tb.Text.Length > 0 ? tb.Text.Length-1 : 0;
tb.SelectionLength = 0
}
5 Profit!
TextBox.Changed
срабатывает на ввод каждого символа, поэтому на это событие можно повесить предварительную валидацию введенного пути, и подкрашивать фон другим цветом, если пользователь ввел чушь. Только учтите, что File.Exists
и Directory.Exists
использовать для этого не стоит, т.к. они могут работать медленно, все таки к диску обращаются. Лучше составить словарь запрещенных символов и проверять последний введенный символ. Хотя если вы хотите сделать аналог autocomplete, то без обращений к диску не получится, но это уже другая история.
Не перегружайте логикой обработчики событий, оставьте там только логику связанную непосредственно с событием. Делайте отдельные методы для выполнения определенных действий и вызывайте эти методы из обработчиков. Если таких методов становится много, есть смысл думать о выносе логики не связанной непосредственно с контролами формы в отдельный класс.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Скажите пожалуйста, в чем разница между созданием веб-сокета с помощью конструкции типа:
Вроде бы уже поменял все названия столбцов так, что бы они не совпадали с ключевыми словами SQL, но ошибка осталась
Не могу понять что не так?, должна выводиться текущая темаВместо этого выводиться весь список тем в переменную $t['code']
Использую аякс запрос, и хочу чтобы отправить запрос, и не ждать пока обработается пхп скрипт