KhaosDoctor 242 Denunciar post Postado Novembro 9, 2012 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
Kr3w^ 0 Denunciar post Postado Novembro 15, 2012 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 Compartilhar este post Link para o post Compartilhar em outros sites
Kr3w^ 0 Denunciar post Postado Novembro 15, 2012 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
KhaosDoctor 242 Denunciar post Postado Novembro 16, 2012 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
Kr3w^ 0 Denunciar post Postado Novembro 16, 2012 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 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
KhaosDoctor 242 Denunciar post Postado Novembro 16, 2012 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
Kr3w^ 0 Denunciar post Postado Novembro 17, 2012 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
KhaosDoctor 242 Denunciar post Postado Novembro 18, 2012 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. Compartilhar este post Link para o post Compartilhar em outros sites
Kr3w^ 0 Denunciar post Postado Novembro 19, 2012 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
KhaosDoctor 242 Denunciar post Postado Novembro 19, 2012 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
Kr3w^ 0 Denunciar post Postado Novembro 22, 2012 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 ) -cursor parado em cima do Length ( repare aquele 2500, ele ele fez 500 Produtos x 5 colunas ? ) e então o que sera que esta errado? Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Novembro 22, 2012 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. Compartilhar este post Link para o post Compartilhar em outros sites
Kr3w^ 0 Denunciar post Postado Novembro 22, 2012 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... será possível usar esse método mesmo?? Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Novembro 22, 2012 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
Kr3w^ 0 Denunciar post Postado Novembro 22, 2012 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
KhaosDoctor 242 Denunciar post Postado Novembro 22, 2012 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
Kr3w^ 0 Denunciar post Postado Novembro 22, 2012 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
KhaosDoctor 242 Denunciar post Postado Novembro 22, 2012 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
Kr3w^ 0 Denunciar post Postado Novembro 22, 2012 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
KhaosDoctor 242 Denunciar post Postado Novembro 22, 2012 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