#c# #winforms
#c# #winforms
Вопрос:
Метод 1-го класса формы:
private void englishToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Hide();
var Editor = new Editor();
Editor.Engprop = 1;
Editor.Closed = (s, args) => this.Close();
Editor.Show();
}
Метод 2-го класса формы:
public partial class Editor : Form
{
public int Engprop { get; set; }
public Uri MyProperty { get; set; }
public Editor()
{
InitializeComponent();
webBrowser1.ScriptErrorsSuppressed = true;
}
Uri temp = new Uri("file:///C:/Users/PC/Desktop/projese302/newtmp.html");
Uri eng = new Uri("file:///C:/Users/PC/Desktop/projese302/engtemp.html");
private void Editor_Load(object sender, EventArgs e)
{
if (Engprop==1)
{
webBrowser1.Navigate(eng);
}
}
Я пытаюсь сделать это, когда Engprop
становится 1 (когда пользователь нажимает на элемент ToolStripMenu), он должен перейти по eng
URL-адресу, но он не работает должным образом. Я буду благодарен за вашу помощь.
Комментарии:
1. «но это не работает должным образом» Что именно это значит? Если веб-браузер не переходит к целевому URL-адресу, используйте отладчик , посмотрите,
webBrowser1.Navigate()
достигнут ли он, и / или проверьте значениеEngprop
.2. В качестве дополнительного примечания не используйте
Form.Closed
события илиForm.Closing
, аForm.FormClosed
Form.FormClosing
вместо этого используйте и .
Ответ №1:
Я полагаю, что метод Editor_Load вызывается из события OnLoad формы.
Если это так, я не уверен, когда возникает это событие… Может быть после конструктора (он объясняет, почему у вас возникла эта проблема) или после метода Show (в данном случае я не знаю, почему он не работает)
Попробуйте проверить, вызывается ли событие до или после установки свойства Engprop (debug точки останова)
В любом случае, я думаю, что вашему коду не хватает архитектуры, поскольку те, кто использует ваш класс Editor, должны знать, что это может изменить Engprop только между конструктором и методом Show .
Я думаю, вы можете сделать лучший / повторно используемый код, если:
- Установите свойство Engprop как доступное только для чтения и примите его значение в конструкторе: обычно это делается, когда язык задается при создании экземпляра вашего класса и никогда не изменится
- В установщике Engprop вызывает событие при его изменении: это делается, когда вы разрешаете изменять язык также после создания экземпляра. Таким образом, ваш класс Editor может добавлять обработчик к этому событию и изменять язык страницы каждый раз, когда кто-то изменяет это свойство
Комментарии:
1. В
Load
этом случае событие происходит после вызова.Show()
, а не после конструктора. Или, как выразилась Microsoft: «Происходит до того, как форма отображается в первый раз» .2. Я сделал простой проект с двумя формами: основной, который показывает вторую, как вы это сделали. И он всегда показывает английскую версию второй формы … итак, каково ваше поведение?
3. Я не OP 🙂 Я просто отвечал на ваш второй абзац этого ответа.