none
Utilizando eventos RRS feed

  • Pergunta

  • Dai galerinha estou tentando aprender a manipular eventos no C# e venho encontrando algumas dificuldades para entender a lógik de como funciona o trem rsrs mas aos pocos estou me entrosando mas no (discupem o trocadilho rs) eventual momento estou com um problema como não tenho mto conhecimento avançado com c# me limito ao básico to com um problema
    tenho um forms principal q contém um panel e 2 buttons o button1 abre um forms dentro do panel do form principal +- assim
    .....
    {
         Form2 frm = new Form2();
         frm2.TopLevel = false;
        panel1.Controls.Add(frm2);
        frm2.Show();
    }
    fazendo isso no botão1 ele abre o form dentro do panel ateah ai blz dai o segundo botão do forms principal eu qru usar para q qndu apertalo eu faça com q num label q o segundo forms tem ele mostre a hr
    tentei de muitos gtos agora to apelando para os eventos e já conversei com alguns programadores bons e eles me falaram para criar um evento no forms 2 q dispare qndo o evento click do botão2 do forms principal seja apertado e então esse evento no forms2 mostre a hr no label do msmo e como dominu mto poco a lógik de eventos e delegates vim pedir um HELP urgenti pra vcs alguém podi mi dar uma mão em como fazer um evento de um forms disparar quando o evento de outro forms for disparado?? socorro rsrs
    domingo, 7 de fevereiro de 2010 01:06

Todas as Respostas

  • Amigo, não escrevo muito no msn. Fica dificil de entender.
    Se sua pergunta foi respondida por favor marque a resposta como certa.
    quarta-feira, 10 de fevereiro de 2010 19:21
  • Simples de resolver:

    - Primeiramente crie o objeto frm(primeira linha do seu codigo) fora do metodo do botao para que ele fique visivel para todas os eventos, inclusive para o segundo botao e assim poder manipular o form.
    - Segundo, no contrutor do form2 coloque o objeto label do tipo public para voce poder alterar seus atributos de um outro form e esta pronto.

    //Form1
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
           //Criado fora do metodo
            Form2 Form = new Form2();
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Form.TopLevel = false;
                panel1.Controls.Add(Form);
                Form.Show();
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                Form.label1.Text = System.DateTime.Now.ToString();
            }
        }
    }


    Alterar para public o label no construtor do form2, veja alteraçao no final do codigo do construtor.



     partial class Form2
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Windows Form Designer generated code
    
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                this.label1 = new System.Windows.Forms.Label();
                this.SuspendLayout();
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.Location = new System.Drawing.Point(121, 58);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(35, 13);
                this.label1.TabIndex = 0;
                this.label1.Text = "label1";
                // 
                // Form2
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(321, 238);
                this.Controls.Add(this.label1);
                this.Name = "Form2";
                this.Text = "Form2";
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
    
            #endregion
    
            //Essa linha abaixo que deve ser mudado de private para public
            public System.Windows.Forms.Label label1;
        }
    Pronto, sua aplicação estará funcionando da forma que voce quer sem ter q usar delegates para isso

    Se resolveu marque como resposta

    Um forte abraço,

    Alexsandro Nunes Lacerda
    Especialista DotNet
    quinta-feira, 11 de fevereiro de 2010 18:32
  • Isso infringe os principios da orientação a objeto. Deixar uma variavel de classe como publica, sem um metodo para acessar ela, isso não se deve fazer.
    Então se vc quiser fazer isto, crie uma propriedade que muda o texto, mas nao coloque a variavel como publica.
    Se sua pergunta foi respondida por favor marque a resposta como certa.
    sexta-feira, 12 de fevereiro de 2010 00:30
  • sim, é tambem uma opçao para complementar a resposta.

    Obrigado
    sexta-feira, 12 de fevereiro de 2010 02:57