Usuário com melhor resposta
Corrigir erro no evento do Pressionar as teclas PageUp e PageDown

Pergunta
-
Galera estou tendo um problema ao avançar e retroceder registros no meu windows form. Por exemplo: Quando eu estou no ultimo registro 26 e pressiono pageUp em vez de ele retroceder para o registro 25, ele retrocede para o registro 01, depois pressiono pageup mais uma vez e ele retrocede para o 25 e depois ele vai retrocedendo corretamente (corrigir isso). Quando ele chega no registro 01 ele não para. Simplesmente ele volta novamente para 26 e vai retrocedendo(corrigir).
Como corrigir isso? Alguém poderia sugerir uma melhoria nos meus códigos ou uma nova opção?
Obrigado :)
///////////////////////////////// eventos /////////////////////////////////////////////////////////////
private void Form_Questoes_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
this.SelectNextControl(this.ActiveControl, !e.Shift, true, true, true);
}
if (e.KeyCode == Keys.PageUp)
{
if (indice == 0)
{
ObterQuestaoPorIndice(indice);
indice = QuestoesCRUD.ListarTodosRegistros().Count - 1;
}
else
{
ObterQuestaoPorIndice(indice);
indice = indice - 1;
}
}
if (e.KeyCode == Keys.PageDown)
{
if (indice == QuestoesCRUD.ListarTodosRegistros().Count() - 1)
{
ObterQuestaoPorIndice(indice);
indice = 0;
}
else
{
ObterQuestaoPorIndice(indice);
indice = indice + 1;
}
}
}//////////////////////////////////////// Método que preenche os textbox com dados do banco//////////////////////////////
public void ObterQuestaoPorIndice(int codigo)
{
try
{
var questoesList = QuestoesCRUD.ListarTodosRegistros()[indice]; //se der problema, lembrar de usar FirstOrDefault()
if (questoesList != null)
{
txbCodigoQuestao.Text = questoesList.CodigoQuestao.ToString();
txbNomeCompleto.Text = questoesList.NomeCompleto;
txbCodigoProfessor.Text = questoesList.CodigoProfessor.ToString();
mtbDataCadastro.Text = questoesList.DataCadastro.ToString();
txbNomeArea.Text = questoesList.NomeArea;
txbCodigoArea.Text = questoesList.CodigoArea.ToString();
txbNomeCurso.Text = questoesList.NomeCurso;
txbCodigoCurso.Text = questoesList.CodigoCurso.ToString();
txbNomeDisciplina.Text = questoesList.NomeDisciplina;
txbCodigoDisciplina.Text = questoesList.CodigoDisciplina.ToString();
txbTipoQuestao.Text = questoesList.TipoQuestao;
txbCodigoTipoQuestao.Text = questoesList.CodigoTipoQuestao.ToString();
txbTipoNivelDificuldade.Text = questoesList.TipoNivelDificuldade;
txbCodigoNivelDificuldade.Text = questoesList.CodigoNivelDificuldade.ToString();
txbTipoAssunto.Text = questoesList.TipoAssunto;
txbCodigoAssunto.Text = questoesList.CodigoAssunto.ToString();
txbTextoQuestao.Text = questoesList.TextoQuestao;//////////////////////////////metodo que busca todos os registros do banco //////////////////////////////////////////////////////
public override List<Modelagem.Questoes> ListarTodosRegistros()
{
SqlConnection conn = new SqlConnection(conexao.StringConexao);
var ListarTodasQuestoes = new List<Modelagem.Questoes>();
var ComandoSql = "SELECT cod_questao, nome_completo, cod_professor, data_cadastro, nome_area, cod_area, nome_curso, cod_curso, nome_disciplina, cod_disciplina, tipo_questao, cod_tipo_questao, tipo_nivel_dificuldade, cod_nivel_dificuldade, tipo_assunto, cod_assunto, texto_questao, imagem_questao FROM Questoes";
SqlCommand Comando = new SqlCommand(ComandoSql, conn);
conn.Open();
//Comando.Parameters.AddWithValue("@cod_questao", Codigo);
SqlDataReader leitor = Comando.ExecuteReader();
while (leitor.Read())
{
var questoes = new Modelagem.Questoes();
questoes.CodigoQuestao = Convert.ToInt16(leitor["cod_questao"]);
questoes.NomeCompleto = leitor["nome_completo"].ToString();
questoes.CodigoProfessor = Convert.ToInt16(leitor["cod_professor"]);
questoes.DataCadastro = Convert.ToDateTime(leitor["data_cadastro"]);
questoes.NomeArea = leitor["nome_area"].ToString();
questoes.CodigoArea = Convert.ToInt16(leitor["cod_area"]);
questoes.NomeCurso = leitor["nome_curso"].ToString();
questoes.CodigoCurso = Convert.ToInt16(leitor["cod_curso"]);
questoes.NomeDisciplina = leitor["nome_disciplina"].ToString();
questoes.CodigoDisciplina = Convert.ToInt16(leitor["cod_disciplina"]);
questoes.TipoQuestao = leitor["tipo_questao"].ToString();
questoes.CodigoTipoQuestao = Convert.ToInt16(leitor["cod_tipo_questao"]);
questoes.TipoNivelDificuldade = leitor["tipo_nivel_dificuldade"].ToString();
questoes.CodigoNivelDificuldade = Convert.ToInt16(leitor["cod_nivel_dificuldade"]);
questoes.TipoAssunto = leitor["tipo_assunto"].ToString();
questoes.CodigoAssunto = Convert.ToInt16(leitor["cod_assunto"]);
questoes.TextoQuestao = leitor["texto_questao"].ToString();
//questoes.ImagemQuestao = (Byte[])(leitor["imagem_questao"]);
ListarTodasQuestoes.Add(questoes);
}
conn.Close();
return ListarTodasQuestoes.ToList();
}
Respostas
-
Exemplo:
public class Pessoa { public int Id { get; set; } public string Nome { get; set; } }
Codificação no Form
public partial class Form1 : Form { private readonly IList<Pessoa> Pessoas = new List<Pessoa>(); private int index = 0; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Pessoas.Add(new Pessoa() { Id = 1, Nome = "Geraldo" }); Pessoas.Add(new Pessoa() { Id = 2, Nome = "Rosana" }); Pessoas.Add(new Pessoa() { Id = 3, Nome = "Paulo" }); if (Pessoas.Count > 0) { TxtId.Text = Pessoas[index].Id.ToString(); TxtNome.Text = Pessoas[index].Nome; } } private void Form1_KeyDown(object sender, KeyEventArgs e) { if (Pessoas.Count > 0) { if (e.KeyCode == Keys.PageUp) { index--; } else if (e.KeyCode == Keys.PageDown) { index++; } if (index < 0) { index = 0; } else if (index == Pessoas.Count) { index--; } TxtId.Text = Pessoas[index].Id.ToString(); TxtNome.Text = Pessoas[index].Nome; } } }
Explicação para controlar crie um variável "index" do tipo inteiro e por ela as contas no Key_Down já está feita no exemplo! só faltava isso para você
Fúlvio Cezar Canducci Dias- Marcado como Resposta JR-Master quarta-feira, 9 de outubro de 2013 12:19