none
Chamar uma função de um form num usercontrol RRS feed

  • Pergunta

  • Olá pessoal, tô fazendo uma aplicação aqui onde uso um form e um usercontrol, ai to precisando passar um vetor de pontos do usercontrol para o form, tentei inicialmente fazer uma função no form e chamá-la no usercontrol, mas não tá dando certo, alguém tem como ajudar?
    quarta-feira, 15 de setembro de 2010 18:04

Respostas

  • Olá, caso o seu componente esteja em um projeto diferente do projeto do form, vc tem que adicionar uma referencia no projeto do componente.

    Bem, mas como eu sou insistente rsrsrsrrs, caso vc queira fazer o evento no seu componente, faça desta maneira:

    Crie o evento no seu componente, abaixo criei um componente que tem um botão e criei um evento para ele:

     public partial class UserControl1 : UserControl
      {
    
        //Criando o Evento no componente
        public event EventHandler<ExtracaoEventArgs> DadosExtraidos;
    
        public UserControl1()
        {
          InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
          //Disparando o Evento
          if (DadosExtraidos != null)
          {
            ExtracaoEventArgs Evento = new ExtracaoEventArgs();
            Evento.X = xx; //Aqui vc passa seu xx
            Evento.Y = yy; //Aqui vc passa seu yy
            DadosExtraidos(this, Evento);
          }
        }
      }
    
      public class ExtracaoEventArgs
      {
        private double[] x;
        private double[] y;
    
        public double[] X
        {
          get
          {
            return x;
          }
          set
          {
            x = value;
          }
        }
    
        public double[] Y
        {
          get
          {
            return y;
          }
          set
          {
            y = value;
          }
        }
    
      }
    

    Depois que fizer isso, compile seu projeto, vá no seu Form,  depois clique em cima do seu user control que está no Form, vá nos eventos e procure o evento que se chama DadosExtraidos.  Dentro do evento, os valores XX, e YY estárao dentro da variavel e, então para acessar basta utilizar:

    e.X e e.Y;

    Abraços.

    • Marcado como Resposta Jnhony quinta-feira, 16 de setembro de 2010 18:22
    quarta-feira, 15 de setembro de 2010 18:48

Todas as Respostas

  • Olá Jnhony.

    Eu particularmente acho que isso não muito certo, pq se vc utilizar este controle em outro form, provavelmente irá ter problemas.

    Uma Solução, seria vc criar um evento dentro do seu UserControl, e lá no form vc usaria este exemplo.

    Caso precise de um exemplo, poste aqui novamente.

    Mas se vc quiser desta maneira, tente assim (dentro do seu usercontrol):

    ((AquiÉoNomedoSeuFormSemAspas)this.ParentForm).NomedoSeuMetodo(parametros);
    

    Abraços.

    • Sugerido como Resposta rogfranz quinta-feira, 23 de janeiro de 2020 14:27
    quarta-feira, 15 de setembro de 2010 18:15
  • A melhor forma de manipulação de UserControls é via delegate .

    Se quiser dê uma olhada aqui em como usar o delegate:

    http://www.webfinal.com.br/blog/2010/08/13/sexta-net-aula-10-asp-net-e-c-parte-i/


    Victor Santos
    Email: victor@webfinal.com.br
    MSN: victor.desenv@gmail.com
    Skype: victor.santoss
    WebFinal - www.webfinal.com.br
    Blog: www.webfinal.com.br/blog/
    quarta-feira, 15 de setembro de 2010 18:27
  • Obg pela atenção R1c4rd0.

    Fiz o q vc me pediu, mas ai tá mostrando o seguinte erro:

    Error    2    The type or namespace name 'Form1' could not be found (are you missing a using directive or an assembly reference?)    C:\Users\João Paulo\Documents\Visual Studio 2010\Projects\Liec\Liec\UserControl1.cs    347    15    Liec

     

    O nome do meu form é Form1 mesmo, mesmo assim, já tentei várias possibilidades.

    No user Control:

    ((Form1)this.ParentForm).MostraExtracao(xx, yy);

    No form:

    namespace LiecForm
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();

            }

    ....

       public void MostraExtracao(double[] x, double[] y)
            {
                ....
            }

    quarta-feira, 15 de setembro de 2010 18:32
  • Olá, caso o seu componente esteja em um projeto diferente do projeto do form, vc tem que adicionar uma referencia no projeto do componente.

    Bem, mas como eu sou insistente rsrsrsrrs, caso vc queira fazer o evento no seu componente, faça desta maneira:

    Crie o evento no seu componente, abaixo criei um componente que tem um botão e criei um evento para ele:

     public partial class UserControl1 : UserControl
      {
    
        //Criando o Evento no componente
        public event EventHandler<ExtracaoEventArgs> DadosExtraidos;
    
        public UserControl1()
        {
          InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
          //Disparando o Evento
          if (DadosExtraidos != null)
          {
            ExtracaoEventArgs Evento = new ExtracaoEventArgs();
            Evento.X = xx; //Aqui vc passa seu xx
            Evento.Y = yy; //Aqui vc passa seu yy
            DadosExtraidos(this, Evento);
          }
        }
      }
    
      public class ExtracaoEventArgs
      {
        private double[] x;
        private double[] y;
    
        public double[] X
        {
          get
          {
            return x;
          }
          set
          {
            x = value;
          }
        }
    
        public double[] Y
        {
          get
          {
            return y;
          }
          set
          {
            y = value;
          }
        }
    
      }
    

    Depois que fizer isso, compile seu projeto, vá no seu Form,  depois clique em cima do seu user control que está no Form, vá nos eventos e procure o evento que se chama DadosExtraidos.  Dentro do evento, os valores XX, e YY estárao dentro da variavel e, então para acessar basta utilizar:

    e.X e e.Y;

    Abraços.

    • Marcado como Resposta Jnhony quinta-feira, 16 de setembro de 2010 18:22
    quarta-feira, 15 de setembro de 2010 18:48
  • Esqueci de uma coisa,

    na classe ExtracaoEventArgs, ela deve herdar da EventArgs, então modifique:

    public class ExtracaoEventArgs

    para:

    public class ExtracaoEventArgs:EventArgs

     

    Abraço.

     

    quarta-feira, 15 de setembro de 2010 19:25
  • Cara, muito bom, funcionou...
    quinta-feira, 16 de setembro de 2010 18:22
  • Resolveu meu problema!!! 

    Meu uso ficou assim, dentro de um método no meu UserControl!
    ((frmPrincipal)this.ParentForm).popularListaTarefas();

    Obrigado pela informação !!!
    quinta-feira, 23 de janeiro de 2020 14:27