none
Corrigir erro no evento do Pressionar as teclas PageUp e PageDown RRS feed

  • 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();
            }


    sexta-feira, 27 de setembro de 2013 18:28

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 Jalber Romano quarta-feira, 9 de outubro de 2013 12:19
    domingo, 29 de setembro de 2013 14:28