Как изменить изображение PictureBox из другой формы - PullRequest
0 голосов
/ 22 декабря 2018

Я хочу открыть form2, пока загружается form1.Кроме того, я хочу изменить изображение PictureBox в form2, когда действие запускается в form1.

Чтобы открыть form2 при загрузке form1, я использовал этот код:

private void MONITOR3_Load(object sender, EventArgs e)
{
    MONITOR4 mo4 = new MONITOR4(this);
    mo4.Show();
}

Чтобы изменить изображение PictureBox в form2 Я использовал этот код, который должензапускаться после выполнения условия:

if (textBox1.Text == @"QUEBEC - ALPHA - TANGO - ALPHA - ROMEO - ")
{
    MONITOR4 mo4 = new MONITOR4(this);
    mo4.pictureBox1.Image = Image.FromFile("D:/QResources/images/HIA.jpg");
}

1 Ответ

0 голосов
/ 23 декабря 2018

Существуют две проблемы с вашим текущим кодом:

  • Вам не нужно создавать новый экземпляр формы каждый раз, когда вам нужно установить некоторые из его свойств: сохранить ссылку на эту форму ииспользуйте эту ссылку для вызова открытых свойств или методов формы.
  • Вы пытаетесь получить прямой доступ к свойствам дочернего элемента управления другой формы.Событие, хотя вы можете определить дочерний элемент управления public, вы не должны, и в этом нет необходимости.Форма - это класс, аналогичный любому другому в этом аспекте: создайте в форме открытый метод, который предоставляет средства для изменения частного свойства, не подвергая свойство Control непосредственному доступу напрямую.
    Это просто, безопаснее и более portable : если требуется изменить элемент управления (имя изменено, тип элемента управления изменен и т. д.), вам не нужно отправляться на охоту, чтобы выяснить, где использовалось старое имя / свойствадругие классы.
    Открытый метод будет таким же, и он будет единственно ответственным за ссылку на текущие имена, свойства затронутого элемента управления.Единственное место, где код, в конце концов, необходимо изменить.Вы также можете использовать открытое событие или реализовать INotifyPropertyChanged , чтобы уведомить подписчиков об изменении некоторых свойств.

Здесь я создаю ссылку на Monitor4 в Monitor3 Форма:

Monitor4 mo4 = null;

Эта ссылка будет использоваться для вызова открытого метода (UpdatePictureBox) Monitor4.

Monitor3 Форма:
(I 'm используя событие TextChanged TextBox, чтобы выбрать изображение для показа в Monitor4 PictureBox. Конечно, это может быть событие Validate или что-либо еще, что соответствует вашему дизайну)

public partial class Monitor3 : Form
{
    Monitor4 mo4 = null;

    private void Monitor3_Load(object sender, EventArgs e)
    {
        mo4 = new Monitor4();
        //Show Monitor4 on the right side of this Form
        mo4.Location = new Point(this.Right + 10, this.Top);
        mo4.Show(this);
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        string NewText = textBox1.Text;
        switch (NewText)
        {
            case "[Some text 1]":
                mo4.UpdatePictureBox(@"[Images1 Path]");
                break;
            case "QUEBEC - ALPHA - TANGO - ALPHA - ROMEO - ":
                mo4.UpdatePictureBox(@"[Images2 Path]");
                break;
            case "[Sme text 3]":
                mo4.UpdatePictureBox(@"[Images3 Path]");
                break;
        }
    }
}

Monitor4 Форма:

public partial class Monitor4 : Form
{
    public void UpdatePictureBox(string BitmapImage)
    {
        if (File.Exists(BitmpImage))
        {
            if (this.pictureBox1.Image != null)
                this.pictureBox1.Image.Dispose();
            this.pictureBox1.Image = (Image)Image.FromFile(BitmapImage, true).Clone();
        }
    }
}

Пример выборки:

Access a Form's Control from another class

...