Ir para conteúdo
Kr3w^

[Resolvido] Sistema de Orçamento em c#

Recommended Posts

Com espaço manual:

 

txtBoxImprimir.Text = txtBoxImprimir.Text + "              ";

 

Aconselho você a criar uma função com espaços definidos para ele poder adicionar sempre a mesma quantidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou com uma duvida no for

 

estou criando um for certo??

 

            for (int col = 0; col < ClassArrayProdutos.vetorprodutos.Length; col++)
           {
               for (int lin = 0; lin < 4; lin++)
               {
                   txtBoxImprimir.Text = txtBoxImprimir.Text + ClassArrayProdutos.vetorprodutos[0, 0];
                   EspacoProdutos();
                   txtBoxImprimir.Text = txtBoxImprimir.Text + ClassArrayProdutos.vetorprodutos[0, 1];
                   EspacoProdutos();
                   txtBoxImprimir.Text = txtBoxImprimir.Text + ClassArrayProdutos.vetorprodutos[0, 2];
                   EspacoProdutos();
                   txtBoxImprimir.Text = txtBoxImprimir.Text + ClassArrayProdutos.vetorprodutos[0, 3];
                   EspacoProdutos();
                   txtBoxImprimir.Text = txtBoxImprimir.Text + ClassArrayProdutos.vetorprodutos[0, 4];
               }
           }

 

no caso eu to jogando os valores da digitação da frmProdutos, em um txtBox com ReadOnly e multiline...

 

esta certo meu for? porque ele trava quando vou Visualizar o orçamento

Editado por Kr3w^

Compartilhar este post


Link para o post
Compartilhar em outros sites

esqueci de colocar la:

 ClassArrayProdutos.vetorprodutos[col, lin]; 

 

mesmo assim quando vou abrir a frm orçamento não abre, fica travado... porque?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque o for não está certo, deveria ser lin, col e não col, lin:

 

 

           for (int lin = 0; lin < ClassArrayProdutos.vetorprodutos.Length; lin++)
           {
               for (int col = 0; col < 4; col++)
               {
                   txtBoxImprimir.Text = txtBoxImprimir.Text + ClassArrayProdutos.vetorprodutos[lin, col];
                   EspacoProdutos();
               }
           }

 

 

Fiz a seguintes alterações:

 

  • Além de alterar o lin para col eu também ajustei algumas partes dentro dos colchetes
  • Talvez não funcionasse, porque o for para colunas é MENOR que 4 e não MENOR E IGUAL, ou seja, ele só pode ir até 3, e você tinha colocado um a mais.
  • Só é necessário uma linha dentro do segundo for, porque ele vai passar pelos 3 números da coluna antes de mudar de linha de novo, repetindo a mesma rotina 3 vezes com números diferentes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então cara, eu tentei essa sintaxe também e não tinha funcionado, eu tenho certeza que o error é simples mais eu não estou enchergando... revisei e não consegui...

 

vou mostrar como está a codificação

 

-ClassArrayProdutos.cs

    public class ClassArrayProdutos
   {
       public static String[,] vetorprodutos = new string[500, 5];

       public static int i = 0;
   }

 

-frmProdutos ( que irá preencher os campos )

 

        private void btnAdicionar_Click(object sender, EventArgs e)
       {
           ClassArrayProdutos.vetorprodutos[ClassArrayProdutos.i, 0] = textBoxCodigo.Text;  
           ClassArrayProdutos.vetorprodutos[ClassArrayProdutos.i, 1] = textBoxProduto.Text;
           ClassArrayProdutos.vetorprodutos[ClassArrayProdutos.i, 2] = textBoxMarca.Text;
           ClassArrayProdutos.vetorprodutos[ClassArrayProdutos.i, 3] = textBoxValor.Text;
           ClassArrayProdutos.vetorprodutos[ClassArrayProdutos.i, 4] = textBoxQuantidade.Text;
           ClassArrayProdutos.i++;
       }

 

 

-frmOrcamento ( que irá receber os dados digitados na form Anterior. )

 

        private void frmOrcamento_Load(object sender, EventArgs e)
       {
           Cabecalho();
           for (int lin = 0; lin < ClassArrayProdutos.vetorprodutos.Length; lin++)
           {
               for (int col = 0; col < 5; col++)
               {
                   txtBoxImprimir.Text = txtBoxImprimir.Text + ClassArrayProdutos.vetorprodutos[lin, col];
                   EspacoProdutos();
               }
           }
       }

 

 

 

-Error Imagem

 

QQAAAL6N_EG4TSviVRH2jlCw82uG59jOCEE3naP4_dbJ3XyRTDkKNNKAOEKrju4bs4lAbPE9Yw-4ajUXK6Rgf1SjFMUiwqFA13NXYsrLvFfyNIgNAJtU9VBxmvmeOOTpfJNRcRNjqatrfj3vcg.jpg

 

eu sei que estou errando na matriz, mais não consigo enchergar...

 

obg até mais

Compartilhar este post


Link para o post
Compartilhar em outros sites

A coluna não pode ser maior que 4 cara, o que está acontecendo é o seguinte, você tem um numero de colunas muito grande, ou seja, a quantidade de colunas não bate com o numero que você tem, se ele começa do 0 e você tem 3 colunas então ele tem que ser < 3 se fossem 4 colunas < 4, porque ai ele seria o equivalente a "<= Array.Length -1".

 

O erro é simples, você só tem que testar o numero de colunas de 5, para 4 e depois para 3 para ver se funciona, veja a quantidade de colunas que você tem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sinceramente, isso que disse com uma outra explicação que eu vi confundiu minha cabeça...

 

eu adicionei uma coluna a mais, ou seja, tenho 5 colunas, ( 0, 1, 2, 3, 4)

 

ou seja não seria < 4 que eu usaria??

 

me explica o que quis dizer com:

 

você só tem que testar o numero de colunas de 5, para 4 e depois para 3 para ver se funciona, veja a quantidade de colunas que você tem.

 

porque confundi com essa explicação, ai acho que conseguiria seguir a diante.

 

obg até mais!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você tem 5 colunas então a quantidade que você em que por no for é 6, porque ele nunca vai chegar no 6 se estiver definido como < 6, vai chegar apenas no 5.

Editado por KhaosDoctor

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu ja tinha tentando isso, e tentei novamente e continua o error, diz que o Indice não contem na matriz ou esta fora algo assim...

 

        private void frmOrcamento_Load(object sender, EventArgs e)
       {
           for (int lin = 0; lin < ClassArrayProdutos.vetorprodutos.Length; lin++)
           {
               for (int col = 0; col < 6; col++)
               {
                   txtBoxImprimir.Text = txtBoxImprimir.Text + ClassArrayProdutos.vetorprodutos[lin, col];
                   EspacoProdutos();
               }
           }
       }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos ter que descobrir o tamanho máximo então.

 

Quando você executar o programa, coloque um breakpoint sobre o "for" das colunas, preste atenção na janela que se abre abaixo na hora do debug, ela mostra o valor de todas as variáveis sendo usadas no momento, passe todos os numeros do for até chegar no momento que ele dê um erro, anote este número e o numero abaixo é a ultima posição do vetor, ou seja, a que queremos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu coloquei o breakpoint no for das linhas, porque o problema é ali, se eu colocar no for das colunas ele nem chega la...

 

vou te mostrar a print

 

-cursor parado em cima do : vetorprodutos ( no caso eu adicionei 2 produtos para o teste )

QQAAAL6N_EG4TSviVRH2jlCw82s6SnTRmtB9qGa1hqNs8bn7ws2YUrjdiBIOjoNqw7BwynjS6wAhjloa5DOvtVf-oV-vvlA7H--DdCxfAmsDM8oLAJtU9VALvRVK9mfQKd6dzPJUGKj2jOD4Bg.jpg

 

 

 

-cursor parado em cima do Length ( repare aquele 2500, ele ele fez 500 Produtos x 5 colunas ? )

QQAAAL6N_EG4TSviVRH2jlCw82sGuFlQFz29SCwltNONHi_MpEbaUVHIee2PWAFcBWm0ihL_ek-gz--Rkx_cTlR6hj1dFayRqmzBt7EiEOJad5KsAJtU9VBRXkZUJZfzzSjAa3aGa7WI_HlZeg.jpg

 

e então o que sera que esta errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que sei qual é o problema, nós definimos um tamanho para ele, ou seja, ele vai percorrer tudo mesmo que esteja em branco, portanto temos que fazer uma verificação no final de cada for de linhas para ver se a próxima linha está em branco ou não, adicione isto no final do primeiro for, embaixo do segundo for:

 

 

if (ClassArrayProdutos.vetorprodutos[lin+1, 0].ToString() == "" || ClassArrayProdutos.vetorprodutos[lin+1,0].ToString().Equals(null))
               {
                   break;
               }

 

 

Vai ficar assim:

 

 

private void frmOrcamento_Load(object sender, EventArgs e)
       {



           for (int lin = 0; lin < ClassArrayProdutos.vetorprodutos.Length; lin++)
           {

               for (int col = 0; col < 6; col++)
               {
                   txtBoxImprimir.Text = txtBoxImprimir.Text + ClassArrayProdutos.vetorprodutos[lin, col];
                   EspacoProdutos();
               }

               if (ClassArrayProdutos.vetorprodutos[lin+1, 0].ToString() == "" || ClassArrayProdutos.vetorprodutos[lin+1,0].ToString().Equals(null))
               {
                   break;
               }

           }



       }

 

 

Você pode substituir o "0" de ClassArrayProdutos.vetorprodutos[lin+1, 0] por alguma coluna que não possa ficar em branco, por exemplo, o ID.

Editado por KhaosDoctor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continua um error, agora de instancia... dizendo que o objetivo não esta instanciado...

será que seria possível criar uma variável global para fazer essa verificação de quais linhas foram preenchidas

e quais linhas estão null?

mais também qual seria a melhor forma de fazer essa verificação, se for dessa maneira usando if continuarei usando...

 

QQAAAL6N_EG4TSviVRH2jlCw82tpozE4rCWlxj7g_1KCww25hD5qNzrwMtDOl7jVg1uoQw6OjwVrzLzc65BcASjh356zI9Gh9845DhpwsFULwQvvAJtU9VAuK0nZqMbgTuv2e6ecSnkrfnCzxg.jpg

 

será possível usar esse método mesmo??

Editado por Kr3w^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Instancia a classe.

 

ClassArrayProdutos <nome> = new ClassArrayProdutos();

 

Ai você substitui o nome nesse if. Mas instancie fora do For.

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi, no caso eu substituo o nome do Array dentro do if para a instancia que eu criei né?

 

ClassArrayProdutos ClassArray = new ClassArrayProdutos();

 

eu vou precisar de alguma função especifica para passar essa instancia para dentro do if??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não cara, por exemplo:

 

ClassArrayProdutos classe = new ClassArrayProdutos();

 

Aí em todo lugar que aparecer "ClassArrayProdutos" você substitui por "classe".

 

 

if (classe.vetorprodutos[lin+1, 0].ToString() == "" || classe.vetorprodutos[lin+1,0].ToString().Equals(null))
               {
                   break;
               }

 

 

Um outro possível erro pode ser o fato do "lin+1", se isto de cima não funcionar, crie uma variável para "lin+1" por exemplo:

 

 


for (int lin = 0; lin < ClassArrayProdutos.vetorprodutos.Length; lin++)
           {

               for (int col = 0; col < 6; col++)
               {
                   txtBoxImprimir.Text = txtBoxImprimir.Text + ClassArrayProdutos.vetorprodutos[lin, col];
                   EspacoProdutos();
               }


	Int lin2 = lin+1;

               if (ClassArrayProdutos.vetorprodutos[lin2, 0].ToString() == "" || ClassArrayProdutos.vetorprodutos[lin2,0].ToString().Equals(null))
               {
                   break;
               }

           }

Compartilhar este post


Link para o post
Compartilhar em outros sites

então cara, meu professor fez isso e deu certo, repare no que ele fez

 

na Class ele declarou essa variavel

 

-ClassFormularios.cs

        public static int numRegProd = 0;

 

na form onde eu digito os produtos, ele acrescentou isso

 

-frmProdutos

 

                ClassArrayProdutos.vetorprodutos[ClassArrayProdutos.i, 0] = textBoxCodigo.Text;
               ClassArrayProdutos.vetorprodutos[ClassArrayProdutos.i, 1] = textBoxProduto.Text;
               ClassArrayProdutos.vetorprodutos[ClassArrayProdutos.i, 2] = textBoxMarca.Text;
               ClassArrayProdutos.vetorprodutos[ClassArrayProdutos.i, 3] = textBoxValor.Text;
               ClassArrayProdutos.vetorprodutos[ClassArrayProdutos.i, 4] = textBoxQuantidade.Text;
               ClassArrayProdutos.i++;
               ClassArrayProdutos.numRegProd = ClassArrayProdutos.i;

 

Linha acrescentada:

ClassArrayProdutos.numRegProd = ClassArrayProdutos.i;

 

 

 

ai na form do orçamento, ficou assim

 

-frmOrcamento

 

            for (int lin = 0; lin < ClassArrayProdutos.numRegProd; lin++)
               {
               for (int col = 0; col < 5; col++)
               {
                   txtBoxImprimir.Text = txtBoxImprimir.Text + ClassArrayProdutos.vetorprodutos[lin, col];
                   EspacoProdutos();
               }
           }

 

e agora funcionou certinho...

 

o simples detalhe agora é o seguinte

eu preciso fazer com que depois que eu preencha as 5 colunas, ele

vai para outra linha, mais se eu coloca a função:

 

                    txtBoxImprimir.Text = txtBoxImprimir.Text + ClassArrayProdutos.vetorprodutos[lin, col];
                   EspacoProdutos();
                 NovaLinha();

 

NovaLinha(); que é a função que eu uso pra pular a linha, ele pula a linha de cada coluna e fica tipo

 

Codigo Produto Marca Preco Quantidade

 

 

 

01

ProdutoEXEMPLO

MarcaEXEMPLO

180,00

4

 

tem como eu arrumar isso?

 

 

a função EspacoProdutos(); é uma função pra dar o espaço entre cada coluna, então ignore-a!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie outra função que faça o que você precisa ser feito, crie a função Espaço() ou algo do tipo para que ela de apenas espaço onde você quiser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim mais tipo no caso, a função NovaLinha(); faz com que depois que eu adicionei 1 produto que tenha as 5 colunas,

ele de uma nova linha para adicionar mais um produto.

 

mais no caso ai a função NovaLinha();

não ta pulando a linha depois das 5 colunas e sim pula tipo

 

Codigo; 01

ai ele pula uma linha

Produto: tal tal

ai ele pula linha ... etc etc..

 

eu queria que só pula-se a linha depois que as 5 colunas de produtos forem adicionados, exemplo

 

Codigo Produto Marca Quantidade preço

01 ExemploPrpduto, Exemplomarca, 4 Quant, 170 reais!

 

+ / - assim

Compartilhar este post


Link para o post
Compartilhar em outros sites

Insira um IF

 

 

private void frmOrcamento_Load(object sender, EventArgs e)
       {

int 5prod = 0;

           for (int lin = 0; lin < ClassArrayProdutos.vetorprodutos.Length; lin++)
           {

               for (int col = 0; col < 6; col++)
               {
                   txtBoxImprimir.Text = txtBoxImprimir.Text + ClassArrayProdutos.vetorprodutos[lin, col];
                   EspacoProdutos();
               }

               if (ClassArrayProdutos.vetorprodutos[lin+1, 0].ToString() == "" || ClassArrayProdutos.vetorprodutos[lin+1,0].ToString().Equals(null))
               {
                   break;
               }

	if(5prod == 5) {

		5prod = 0;
		NovaLinha()
	}

	Else { 5prod++; }

           }



       }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.