Jump to content
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.

Share this post


Link to post
Share on other 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

Edited by Kr3w^

Share this post


Link to post
Share on other sites

esqueci de colocar la:

 ClassArrayProdutos.vetorprodutos[col, lin]; 

 

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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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.

Edited by KhaosDoctor

Share this post


Link to post
Share on other 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();
               }
           }
       }

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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.

Edited by KhaosDoctor

Share this post


Link to post
Share on other 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??

Edited by Kr3w^

Share this post


Link to post
Share on other 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??

Share this post


Link to post
Share on other 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;
               }

           }

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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++; }

           }



       }

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.