Ir ao conteúdo

Dúvida no C#


FBorges22

Posts recomendados

  • Membro VIP
Postado

Saudações

Estou precisando criar um programa no C# onde eu preciso mudar um valor de um textBox presente em um formulário utilizando um outro formulário independente dele. Alguém tem alguma ideia de como fazer isso?

Abraços,

FBorges22

  • Membro VIP
Postado

Você precisa manter uma referência a instância do formulário, ai vai depender de como esta o seu código, tem como mostrar a parte que instancia e mostra o segundo form?

  • Membro VIP
Postado

O segundo form possui o seguinte código:

namespace Nobreak2
{
public partial class SysEfficiencyDialog : Form
{
public SysEfficiencyDialog()
{
InitializeComponent();
}

private void button2_Click(object sender, EventArgs e)
{
Close();
}

private void button1_Click(object sender, EventArgs e)
{
float alpha;
alpha = float.Parse(textBox1.Text);
Form1 MainProg = new Form1(); // Instancia o primeiro form
MainProg.setEfficiency(alpha); // Muda o desejado parametro no primeiro form
}
}
}

O método setEfficiency do primeiro form é:

public void setEfficiency(float e)
{
efficiency = e;
efficiency = toolStripProgressBar1.Value;
toolStripStatusLabel2.Text = efficiency.ToString() + "%";
}

  • Membro VIP
Postado

Ok, vou tentar explicar, quando você faz:


Form1 MainProg = new Form1(); // Instancia o primeiro form
MainProg.setEfficiency(alpha); // Muda o desejado parametro no primeiro form

Você cria uma nova instância do Form1 e chama o método setEfficiency dela, essa nova instância não é a mesma que foi aberta no início do programa, ela só esta oculta, usando o Show ira ficar com dois Form1 na tela.

Quando eu digo "manter a referência" é fazer algo para que a instância do Form2 possa ver a primeira instância do Form1, você pode fazer isso com variáveis estaticas ou com uma variável no Form2, ai vai depender de cada caso, no caso da variável no Form2 poderia ser:


public partial class SysEfficiencyDialog : Form
{
public Form1 pai;
;...
}

Na hora de abrir o Form2:


SysEfficiencyDialog form = new SysEfficiencyDialog();
form.pai = this;
form.Show();

E na hora de chamar o setEfficiency:


pai.setEfficiency(alpha);

  • Membro VIP
Postado

Eu tentei fazer as modificações descritas e não deu certo... As modificações que eu fiz foram as seguintes:

Formulario 2 (SysEfficiencyDialog)

namespace Nobreak2
{
public partial class SysEfficiencyDialog : Form
{
public Form1 pai;

public SysEfficiencyDialog()
{
InitializeComponent();
}

private void button2_Click(object sender, EventArgs e)
{
Close();
}

private void button1_Click(object sender, EventArgs e)
{
float alpha = float.Parse(textBox1.Text); // Guarda o valor do textBox1 na variavel alpha
pai.setEfficiency(alpha); // Muda o valor do progressBar do Form1 para alpha
}
}
}

Formulario 1 (Form1)

namespace Nobreak2
{
public partial class Form1 : Form
{
public float efficiency;

public Form1()
{
InitializeComponent();
}

private void button4_Click(object sender, EventArgs e)
{
Application.Exit();
}

private void button2_Click(object sender, EventArgs e)
{
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
textBox7.Text = "";
}

private void button3_Click(object sender, EventArgs e)
{
AboutBox1 About = new AboutBox1();
About.Show();
}

private void aboutNobreakIIToolStripMenuItem_Click(object sender, EventArgs e)
{
AboutBox1 About = new AboutBox1();
About.ShowDialog();
}

private void quitProgramToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}

public void setEfficiency(float e)
{
efficiency = e;
efficiency = toolStripProgressBar1.Value;
toolStripStatusLabel2.Text = efficiency.ToString() + "%";
}

private void ajustSystemEfficiencyToolStripMenuItem_Click(object sender, EventArgs e)
{
SysEfficiencyDialog EffControl = new SysEfficiencyDialog();
EffControl.pai = this;
EffControl.Show();
}
}
}

  • Membro VIP
Postado

Quando não da certo posta o erro junto, fica BEM mais fácil de ajudar, de qualquer jeito, na função setEfficiency tem um erro de lógica:


public void setEfficiency(float e)
{
efficiency = e;//ok pegou o valor do parâmetro
efficiency = toolStripProgressBar1.Value;//sobreescreveu o valor do parâmetro...
toolStripStatusLabel2.Text = efficiency.ToString() + "%";
}

  • Membro VIP
Postado

Ok, consegui corrigir o erro de lógica. Realmente a função setEfficiency não estava correta.

EduardoS muito obrigado pela a ajuda. A solução funcionou perfeitamente! :)

Abraços,

FBorges22

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!