Ir ao conteúdo

Posts recomendados

Postado

No visual studio estou tentando fazer a chamada de uma função de um form em outro form mas não está dando certo.

Criei uma aplicação Windows Forms App (.NET Framework) e criei dois forms. No primeiro form eu criei uma lista de uma struct e uma função que recebe um parâmetro correspondente a um item da struct pra receber o outro. Mas o segundo Form não consegue encontrar a função definida no primeiro form:

 

//Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CS_Teste
{
    public struct Valor
    {
        public string nome;
        public int valor;
        public Valor(String name, int value)
        {
            nome = name;
            valor = value;
        }
    }

    public partial class Form1 : Form
    {

        List<Valor> valores = new List<Valor>();

        public Form1()
        {
            InitializeComponent();
            valores.Add(new Valor("ABC",1));
            valores.Add(new Valor("DEF", 2));
            valores.Add(new Valor("GHI", 3));
        }

        public int EncontraValorPeloNome(string nome)
        {
            for (int i = 0; i < valores.Count; i++)
            {
                if (valores[i].nome.Equals(nome))
                {
                    return valores[i].valor;
                }
            }
            return -1;
        }
    }
}

//------------------------------------------------------------------//
                                              
                                              
//Form2.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CS_Teste
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            Form1.EncontraValorPeloNome("ABC"); // *** erro ***
        }
    }
}

 

Obs.: sei que este código por enquanto não tem nada útil mas a partir do momento em que conseguir avançar na questão apontada aqui, poderei fazer coisas realmente uteis


 

Encontrei a resposta. No arquivo Program.cs eu tenho que criar um objeto do form1 pra depois poder acessar no form2:

 

//Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CS_Teste
{
    internal static class Program
    {
        public static Form1 form1; //<------- declaração da instancia
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            form1 = new Form1();     //<------- deve ser criado depois de "Application.SetCompatibleTextRenderingDefault(false);"
            Application.Run(form1);  //<------- chama o form
        }
    }
}

//-------------------------------------
//  Agora pode ser usado no Form2
//-------------------------------------

//Form2.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CS_Teste
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = Program.form1.EncontraValorPeloNome("ABC").ToString(); //<--- chama a função através do comando "Program.form1.xxxx"
        }
    }
}

 

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

GRÁTIS: Aprenda a Ler Resistores e Capacitores

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!