IF em uma TabPage relação a outra TabPage

.NET

12/09/2014

Em um windowsform com um tabcontrol que tem quatro tabpages, preciso ao abrir o form(que abre sempre na tabpage1), determinar o botão excluir Como enabled=true(O BtnExcluir fica no tabpage1.), se o textboxcapa do tabpage4 estiver vazio, se não false, é possível ?

No Load do form alguma coisa parecido com isto :

if (Tabcontrol.tabpage4.capaTextBox.Text == "")
            {
                 BtnExcluir.Enabled = true;
            }
            else
            {
                BtnExcluir.Enabled = false;
            }
        }

Jair Souza

Jair Souza

Curtidas 0

Respostas

Jair Souza

Jair Souza

12/09/2014

E aí pessoal, alguma idéia ?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

12/09/2014

O TextBox não pertence apenas ao TabPage, então você não precisa referenciá-lo como sendo filho da página. Basta acessar o TextBox pelo seu nome diretamente:
if (capaTextBox.Text == "")
{
    BtnExcluir.Enabled = true;
}
else
{
    BtnExcluir.Enabled = false;
}
        }
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

Era o que eu entendia, mas não funcionou assim, então vim buscar reforço no fórum...
Não funciona no Load do form e não funciona em botões do tabpage1...
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

Coloquei este código no load do form, mas não adiantou nada...quando inicia o form o bendito BtnExcluir está enabled = true, então clico no tabpage4 onde está o capatextbox e depois volto ao tabpage1 onde fica o BtnExcluir, aí sim o BtnExcluir passa a obedecer o código...não entendi porque...
if (capaTextBox.Text != "")
            {
                BtnExcluir.Enabled = false;
            }
            else
            {
                BtnExcluir.Enabled = true;
            }

Coloquei um break point neste if e depurei, verifiquei que o texto do capatextbox estava “ ”(Vazio)...não entendo, pois quando abre e vou até o tabpage4, o capatextbox está preenchido...e no tabcontrol_selectedindexchange não tem nada no código que mande carregar o form...
Coloquei um messagebox para capturar o valor do capatextbox quando o form inicia, e mostra vazio...
Movi o capatextbox para o tabpage1, daí funciona..., isto foi somente para teste, pois o capatextbox tem que ficar no tabpage4.

Não sei mais o que tentar, preciso de ajuda.
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

Bom dia,
Criei um novo projeto com novo form, e mesmo assim não funciona, tens ideia do que acontece ?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

12/09/2014

Em que evento você inseriu esse código para habilitar/desabilitar o botão de acordo com o TextEdit?
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

No Load do form.
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

Depurei com um breakpoint no if e descobri que se o capatextbox está no tabpage 4, ao abrir o form ele está vazio, não sei porque???, mas se trago o capatextbox para o tabpage 1, ao abrir o form ele está preenchido com os dados do banco.
Conclusão o problema não está no if, mas sim neste detalhe... Parece não fazer muito sentido...criei um projeto totalmente novo somente um form e o bd e não programei nada mais, fui direto neste ponto, e acontece a mesma coisa...
Sabes porque acontece isto e como resolver ?

Capatextbox está no tabpage 4 :

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140930-075344.png[/img]


Capatextbox está no tabpage 1 :

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140930-075355.png[/img]

O form é carregado com este método :

this.livroTableAdapter.Fill(this.bDBibliotecaDataSet.Livro);
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

12/09/2014

O TextBox está ligado ao DataSet pela propriedade Text?
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

Sim, tanto que indo ao tabpage 4, ele está preenchido com o valor do banco.
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

Confirmando :

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140930-185410.png[/img]
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

E aí pessoal...nenhuma idéia ?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

12/09/2014

Amigo, por favor disponibilize o código completo do seu form aqui utilizando o PasteBin. Talvez olhando todos os eventos que estão sendo tratados possamos identificar o erro.
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

Aqui está :

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20141002-093357.png[/img]
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

12/09/2014

Amigo, isso aí que você postou é só uma imagem, eu preciso é do link da colagem do seu código.
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

Desculpa, entendi que com o nome "Código Livro" que está na imagem, poderia acessar no pastebin...aqui consegui.

PasteBin
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

12/09/2014

Qual é o objetivo de desabilitar o botão com base no texto do TextBox? A ideia é saber se o Fill retornou algum registro?
Se for, você pode fazer assim, que é até mais correto:
if (this.bDBibliotecaDataSet.Livro.Rows.Count > 0)
{
   BtnExcluir.Enabled = true.
}


Ou seja, se tem um registro aberto, você poderá excluir.
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

É um cadastro de livro, no tabpage1 tem todos os dados do livro, no tabpage4 tem um picturebox com a imagem da capa deste livro e no mesmo tabpage4 tem o capatextbox mostrando o local onde a imagem está salva...a idéia é que não possa excluir o registro sem antes excluir a imagem da capa.
Por isto esta parte do código no load do form :
if (capaTextBox.Text != "")
{
    BtnExcluir.Enabled =false;
}
else
{
    BtnExcluir.Enabled = true;
}
        }
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

12/09/2014

Ao invés de verificar o texto do TextBox, tente verificar o valor contido na coluna equivalente a esse campo diretamente na tabela. Por exemplo:
this.bDBibliotecaDataSet.Livro.Rows[0]["Capa"].ToString() != ""
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

No load, funcionou,
mas quando passo para o segundo registro, mesmo tendo capa ele hablita o BtnExcluir...a questão é,
porque está identificando o capatextbox como vazio enquanto não se vai até o tabpage4 ??

Depois que se vai até o tabpage4, tudo funciona certo....
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

12/09/2014

Você usou a mesma verificação no evento CurrentChanged do DataSource?
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

Sim, mas infelizmente não funcionou.
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

Assim está funcionando perfeitamente, mas gostaria muito de deixar correto e lógico, até para meu aprendizado...mas até agora não sei como...por tudo que verifiquei até agora, ao que parece, o motivo é o tabpage4 não carrega os dados do banco no Load do form, carrega somente quando se acessa o próprio tabpage4...que coisa maluca...

private void FrmLivro_Load(object sender, EventArgs e)
        {
            tabControl1.SelectedTab = tabPage4;
            tabControl1.SelectedTab = tabPage1;

            if (capaTextBox.Text != "")
            {
                BtnExcluir.Enabled = false;
            }
            else
            {
                BtnExcluir.Enabled = true;
            }
	  }
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

12/09/2014

Tem algum código no evento SelectedPageChanged?
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

Somente No Selected Index Change, mas nada que justificasse o que está acontecendo... :

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
            if ((livmc == false) && (tabControl1.SelectedTab == tabPage1))
            {
	            BtnCadastrar.Visible = true;
            }
            else
            {
	            BtnCadastrar.Visible = false;
            }
                lblNomeLivro.Text = tituloTextBox.Text;
                lblNomeLivro.Font = new Font("Microsoft Sans Serif", 9.5F, FontStyle.Underline);
                lblNomeLivro.BorderStyle = System.Windows.Forms.BorderStyle.None;

            if (capaTextBox.Text != "")
            {
                pictureBox2.ImageLocation = capaTextBox.Text;
                BtnAdCapa.Enabled=false;
                BtnExCapa.Enabled = true;
            }
            else
            {
                pictureBox2.ImageLocation = Application.StartupPath.ToString() + "\\CapasLivros\\" + "SemCapa.png";
                BtnAdCapa.Enabled = true;
                BtnExCapa.Enabled = false;
            }
        }
GOSTEI 0
Jair Souza

Jair Souza

12/09/2014

Nenhuma nova idéia ?
GOSTEI 0
POSTAR