Jump to content

Mudar valor de Label a partir de outra classe


rmlm
 Share

Recommended Posts

Boa noite...

Estou com um problema dos grandes (pelo menos para mim)

Eu tenho uma classe remota que é chamada, e esta tem que mudar um texto da label.

O problema é que nao consigo aceder á label...

Ja tentei criar um método estático:

public static void sendText(string msg)
{
      label1.Text = msg
}

Depois era só chamar Form1.sendText("blabla"); mas esta solução não funciona porque a label não e estatica

Existe alguma maneira de por a label static?

Tambem não posso fazer isto:

     Form1 frm = new Form1();

Porque depois ia-me criar uma nova janela e não iria modificar a que está aberta...

Conclusão não sei mesmo como modificar uma label ou textbox a partir de outra classe

Soluções?

Cumps

Link to comment
Share on other sites

Isso depende de como tens a tua aplicação organizada.

Para alterares o texto da label, podes expor uma propriedade no teu form que faça isso.

Depois tens que arranjar forma do teu form ser passado para a outra classe. Existem várias maneiras de fazer isso, a melhor para o teu caso depende do resto da aplicação.

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Link to comment
Share on other sites

Eu vou tentar mais ao menos como é a minha aplicação:

Eu estou a fazer um messenger.

Quando mando uma mensagem acontece isto:

1º Cliente pede ao servidor que quer mandar uma msg para user X

2º Servidor consulta IP e porta do user X

3º Servidor chama metodo remoto disponivel no user X (Aqui esta o metodo que devia escrever na TextBox)

Eu ja testei isto com uma MessageBox e a mensagem chega ao user X sem problemas.

Posso ficar com um Messenge á base de popups  😉

Agora falando a sério não sei mesmo como fazer isto...

O objecto remoto é colocado á disposição assim:

RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteRecebeNotificacoes), "recebe_notifica", WellKnownObjectMode.Singleton);

Por isso é impossível meter construtores...

Link to comment
Share on other sites

É na classe RemoteRecebeNotificacoes que queres alterar o conteudo do form?

Se for podes por nessa classe uma propriedade que afectas com o form que queres alterar (ou uma interface a representar o form se quiseres abstrair).

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Link to comment
Share on other sites

Boas,

Basicamente tu precisas de um delegate ou uma interface, mas neste caso faz mais sentido um delegate.

Um delegate permite guardar a referencia de uma instancia e um metodo, funcionam quase como um ponteiro para funções.

Vou deixar aqui um exemplo depois adapta ao que precisas.

Neste exemplo estão duas classes, a primeira contem uma lista e um botao que abre o form para adicionar novos elementos.

Nesse form existe um campo de texto e um botao que adiciona elementos a lista. 


/*********** Primeiro Form ***************/

    //criaçao do delegate
    public delegate void NovoDelegate(string item);

    public partial class Lista : Form
    {
        public Lista()
        {
            InitializeComponent();
        }

        //evento que abre o form para adicionar um novo elemento
        private void button1_Click(object sender, EventArgs e)
        { 
            NovoElemento frm = new NovoElemento();

            //faz referencia ao metodo utilizado pela classe NovoElemento para adicionar items 
            frm.RefAdicionaItems = new NovoDelegate(this.AdicionaItems);  
            frm.ShowDialog();
        }

        //metodo que adiciona os items 
        private void AdicionaItems(string item)
        {
            listBox1.Items.Add(item);        
        }
    }

/*********** SegundoForm ***************/

    public partial class NovoElemento : Form
    {  
        
        public NovoDelegate RefAdicionaItems;

        public NovoElemento()
        {
            InitializeComponent();   
        }

        private void button1_Click(object sender, EventArgs e)
        {
             RefAdicionaItems(textBox1.Text);
        }

    }

Espero que ajude mas de qualquer forma devias ler a informação que a Microsoft tem sobre este assunto.

http://msdn.microsoft.com/en-us/library/aa288459%28v=VS.71%29.aspx

Link to comment
Share on other sites

Ola hipeironsix, antes demais obrigado pela resposta!

Tentei com base na tua solução isto:

Coloquei uma pequna função no meu formulario que adiciona texto ao meu TextBox:

        public void SetText(string msg)
        {
            MessageBox.Show("Cheguei dentro do form");
            tb_exemplo.AppendText(msg + "\n");
        }

Depois na classe que vai mandar escrever fiz:

        private delegate void NovoDelegate(string msg);
        Principal frm;

        public void Recebe(string txt)
        {
            MessageBox.Show("Cheguei ao cliente!");

            NovoDelegate nd = new NovoDelegate(frm.SetText);
            nd(txt);
        }

Nenhum erro aconteceu, mas o text também não chegou ao Form

Nota: A minha aplicação é WPF

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.