Doubt - Design on the secondary screen and Form

0

The following event code click:

//Estendido
telaSecundaria = new SegundaTela();
Screen[] telas = Screen.AllScreens;
Rectangle bounds = telas[1].Bounds; // pode ser outro índice.
telaSecundaria.SetBounds(bounds.X, bounds.Y, bounds.Width, bounds.Height);
telaSecundaria.StartPosition = FormStartPosition.Manual;

telaSecundaria.Show();
telaSecundaria?.ChangeLabel(label1);

The above code works ok (showing normal in secondary display), how do I get the result of the secondary screen and play in the panel1 % Form1?

Any solution?

    
asked by anonymous 02.12.2017 / 18:06

1 answer

1

There are several ways you can do this. The one I imagine is easiest is to give your new Form an object of what you need to use in your form1

//form1
Form2 form2 = new Form2(seuResultado);
if(form2.ShowDialog() == DialogResult.OK)
{
    // adicione o que você quer fazer com o objeto alterado no seu form1
    // ex:
    textBox1.Text = seuResultado.alteracoesQuePreciso;
}

//form2
SeuResultado seuResultado;
public Form2(SeuResultado seuResultado)
{
    InitializeComponent();
    this.seuResultado = seuResultado;
}

On your form2 when you have finished modifying seuResultado inside your onClick button you confirm that the result is ready to be returned

seuResultado.alteracoesQuePreciso = TudoQuePrecisa;
DialogResult = DialogResult.OK;

And your form2 will close your result will be ready to be used in form1.

In this way your form1 will be 'on hold' until you finalize your form2

If you need to leave both forms open and work with them simultaneously, I think the easiest way is to pass a delegate to form2.

In form1 you add in your method to update InvokeRequired checking, to avoid problem with Threads

public void Atualizar(SeuResultado seuResultado)
{
    if(InvokeRequired)
    {
        Invoke(new Action(() => Atualizar(seuResultado)));
        return;
    }
    textBox1.Text = seuResultado.alteracoesQuePreciso;
}

// para criar seu form2 você passa seu metodo de atualização como parametro
Form2 f = new Form2(Atualizar);
f.Show();

And in form2 you modify the constructor with a delegate to update form1

Action<SeuResultado> action;
public Form2(Action<SeuResultado> action)
{
    InitializeComponent();
    this.action = action;
}

public void EnviarAtualizacao()
{
    //SeuResultado res
    action(res);
}
    
02.12.2017 / 19:06