ti-enxame.com

abrindo um formulário de janela a partir de outro formulário programaticamente

Eu estou fazendo um aplicativo do Windows Forms. Eu tenho um formulário. Eu quero abrir um novo formulário em tempo de execução do formulário original em um clique de botão. E feche esta nova forma (depois de 2,3 seg) programaticamente, mas a partir de um segmento diferente de thread principal gui. 

  1. Alguém pode me guiar como fazer isso?
  2. A nova forma afetará ou atrapalhará as coisas que estão acontecendo na forma principal original? (se sim do que como parar isso?) 
14
vow

Para abrir a partir do botão, adicione o seguinte código no manipulador de eventos do botão.

Form1 m = new Form1();
            m.Show();

Aqui Form1 é o nome do formulário que você deseja abrir.

Também para fechar o formulário atual, você pode usar

this.close();
31
Amrit Sharma

Eu faria assim: 

Form2 frm2 = new Form2();
frm2.Show();

e para fechar a forma atual eu usaria 

this.Hide(); em vez de 

this.close();

confira este canal do Youtube link para tutoriais de fácil inicialização que você pode achar útil se você é um iniciante

11
Tacit

Você só precisa usar o Dispatcher para executar operações gráficas a partir de um segmento diferente do thread da interface do usuário. Eu não acho que isso afetará o comportamento do formulário principal. Isso pode ajudá-lo: Acessando o controle da interface do usuário do segmento BackgroundWorker

0
mohamedHabib

Esta é uma questão muito antiga, mas respondendo por reunir conhecimento.

Temos um formulário original (formulário principal) com um botão para mostrar o novo formulário (segundo formulário).

enter image description here

O código para o clique do botão está abaixo

        private void button1_Click(object sender, EventArgs e)
        {
            New_Form new_Form = new New_Form();
            new_Form.Show();
        }

Agora, quando o clique é feito, Novo formulário é exibido. Desde então, você quer esconder depois de 2 segundos estamos adicionando um evento onload para o novo designer de formulário 

this.Load += new System.EventHandler(this.OnPageLoad);

Esta função OnPageLoad é executada quando esse formulário é carregado

Em NewForm.cs,

    public partial class New_Form : Form
    {
        private System.Windows.Forms.Timer formClosingTimer;
        public New_Form()
        {
            InitializeComponent();
        }
        private void OnPageLoad(object sender, EventArgs e)
        {
            formClosingTimer = new System.Windows.Forms.Timer();  // Creating a new timer 
            formClosingTimer.Tick += new EventHandler(CloseForm); // Defining tick event to invoke after a time period
            formClosingTimer.Interval = 2000; // Time Interval in miliseconds
            formClosingTimer.Start(); // Starting a timer
        }
        private void CloseForm(object sender, EventArgs e)
        {
            formClosingTimer.Stop(); // Stoping timer. If we dont stop, function will be triggered in regular intervals
            this.Close(); // Closing the current form
        }
    }

Nesta nova forma, um timer é usado para invocar um método que fecha esse formulário.

Aqui está a nova forma que fecha automaticamente após 2 segundos, poderemos operar em ambas as formas onde não há interferência entre essas duas formas.

enter image description here

Para o seu conhecimento,

form.close () irá liberar a memória e nunca mais poderemos interagir com essa forma

form.hide () irá apenas esconder o formulário, onde a parte do código ainda pode ser executada 

Para obter mais detalhes sobre o timer, consulte este link, https://docs.Microsoft.com/en-us/dotnet/api/system.timers.timer?view=netframework-4.7.2

0
Nivas
private void btnchangerate_Click(object sender, EventArgs e)
    {
        this.Hide();  //current form will hide
        Form1 fm = new Form1(); //another form will open
        fm.Show();


    }

no formulário atual clique btn irá esconder e novo formulário será aberto

0
Anjan Thakuri