PARAMETROS

CAUEBIAZIN 12/04/2007 10:25:26
#211461
Bom dia pessoal, estou com a seguinte dúvida:

tenho vários formulários que possuem os mesmos botões, sendo que nos mesmos tem uma função habilita_botões, visto que essa função é igual em todos os formulários, estava tentando coloc=a-lka em um módulo, mas quano chamo a função, não consigo fazer referencia ao botão do formulário em questão. Tentei passar o formulário(Me) como parâmetro, mas sem sucesso. Se alguem souber alguma forma de como isso funcione e puder me ajudar...

Obrigado a todos
USUARIO.EXCLUIDOS 12/04/2007 11:52:22
#211494
Para solucionar este problema, crie uma classe herdando o objeto button.
Crie uma proriedade identificando que tipo de botão é (Incluir, Alterar..). Se for sempre o mesmo tipo, não precisa. SObrescreva o evento CLICK utilizando sua função.

Este seria um caminho.

Fish

"Viva OOP !!!".
CAUEBIAZIN 12/04/2007 14:37:24
#211539
Obrigado pela força... mas não consegui compreender direto...
quando vc diz:
"Crie uma proriedade identificando que tipo de botão é (Incluir, Alterar..). Se for sempre o mesmo tipo, não precisa. SObrescreva o evento CLICK utilizando sua função."

Como crio uma propriedade?
desculpa mas é que so bem iniciante nessa área

ate +
USUARIO.EXCLUIDOS 12/04/2007 15:00:52
#211543
Bom, eu não imaginava que você era iniciante. Se você vem do VB6, vai perceber que muita coisa mudou na plataforma .NET. O mais importante é que agora temo uma liguagem OOP. Utilizamos classes e não mais os velhos módulos. Não adiantaria eu postar todo código aqui, pois necessitária de um conhecimento prévio. Para que você possa explorar os diversos recursos da plataforma .NET, terá que estudar OOP, classes, sobrecarga, herança etc. Em .NET você pode criar novas propriedades e eventos para os controles já existentes dando mais funcionalidade. Quando você cria uma classe e herda o objeto button, você pode fazer com que todos os botões do sistema, repondam nesta classe. Desta forma resolveria seu problema. A princìpio não vejo outra solução, a não ser que coloque a sua função como pública em um módulo, e a chame no botão de cada form.

Fish
CAUEBIAZIN 12/04/2007 15:09:25
#211546
Ah ta...
axo q agora entendi...
veja se é mais ou menos isso:
vo criar uma classe que herda da classe Button, por exemplo class1...
essa class1, virá com todos os métodos que já exitiam na classe Button, aí basta eu acrescentar mais algum método que eu desejar.
Se eu reescrever o método com mesmo nome, por exemplo Click, eu posso colocá-lo para receber parâmetro?

muito obrigado pela força!

USUARIO.EXCLUIDOS 12/04/2007 15:12:30
#211547
Pra quem esta começando, você esta indo muito bem. Mas tome cuidado, pois nos forms que você escrever o código, se não me engano, mesmo assim ele executará o evento da sua classe. Se for o caso, na sua classe, crie uma nova propriedade para o botão tipos liga/desliga, evitando assim que o código do click por exemplo seja executado duas vezes.

Fish
CAUEBIAZIN 12/04/2007 15:20:01
#211548
valeu mesmo ai cara...
quando chegar em casa vou testar sobrescrever o método ou criar um outro.

Muito Obrigado novamente!
USUARIO.EXCLUIDOS 12/04/2007 15:22:15
#211550
Sem problemas. Precisando, estamos aí.

Fish
MORDOR 12/04/2007 16:33:05
#211567
Você pode criar um Extender Provider como o componente Tooltip para habilitar e desabilitar os botões de maneira mais simples. Fiz um exemplo em C#, se gostar da solução posso converter para VB.NET. No projeto em anexo existe uma classe chamada ButtonExtender, é só adicionar o componente no Form pela ToolBox, ele adicionará uma nova propriedade (ControlState) em cada Button do Form, é só olhar na janela de propriedades lá no final da lista, se você deixar como True o extender atuará sobre ele, daí para habilitar e desabilitar os botões basta configurar a propriedade Enabled do Extender como True ou False como se estivesse fazendo para o Button.

using System;
using System.ComponentModel;
using System.Collections;
using System.Windows.Forms;

[ProvideProperty("ControlState", typeof(Button))]
public class ButtonExtender : Component, IExtenderProvider
{
private Hashtable m_Buttons = new Hashtable();

#region IExtenderProvider Members

public bool CanExtend(object extendee)
{
return (extendee is Button);
}

#endregion

[DefaultValue(false)]
public bool GetControlState(Button control)
{
return m_Buttons.ContainsKey(control.GetHashCode().ToString());
}

public void SetControlState(Button control, bool value)
{
if (value)
{
if (m_Buttons.ContainsKey(control.GetHashCode().ToString()) == false)
m_Buttons.Add(control.GetHashCode().ToString(), control);
}
else
{
if (m_Buttons.ContainsKey(control.GetHashCode().ToString()))
m_Buttons.Remove(control.GetHashCode().ToString());
}
}

private bool m_Enabled = true;

[DefaultValue(true)]
public bool Enabled
{
get { return m_Enabled; }
set
{
m_Enabled = value;

foreach (Button button in m_Buttons.Values)
button.Enabled = value;
}
}
}


No Form para habilitar todos os botões com ControlState = True:

this.buttonExtender1.Enabled = True
CAUEBIAZIN 12/04/2007 17:09:25
#211578
Obrigado novamente... se tiver um em vb.net e puder me mandar...
eu entendi o que vc quis dizer, mas não consegui compreender como irei utilizar no meu código. Axo que não expressei minha dúvida da melhor maneira, deixe-me tentar de novo.
Eu tenho varias telas de cadastro, com botoes(na Tooltip) Novo, salvar, cancelar, etc. e precisoq ue quando eu clique em Cancelar, por exemplo, o botão cancelar e salvar fique enable=false e o novo fique enable=true, por exemplo. Eu estava criando um prcedimento em cada classe, mas percebi que estava repetindo mtas vezes o mesmo código e resolvi tentar reutilizá-lo. Me desculpem se não consegui ser claro na 1º explicação.

Um abraço a todos
MORDOR 12/04/2007 17:20:42
#211581
Eu entendi, o exemplo que fiz serve para isso. Você define pelo Extender quais botões estão sendo controlados e ao invés de ficar alterando a propriedade Enabled de cada botão você só precisa alterar no Extender. Olhe no novo exemplo em anexo com um Form cheio de botões. Só vou converter para VB.NET se você for usar.
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas