Проект C # windows form

#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 🙂 Я просто отвечал на ваш второй абзац этого ответа.