Kr3w^ 0 Denunciar post Postado Outubro 27, 2012 Ola galera, estou aqui mais uma vez pedindo a ajuda de voces... simples primeiro explicarei o que contém no meu sistema... O sistema é um gerador de orçamento, onde no final do processo irá gerar um orçamento para imprimir para ser entregue ao cliente para assinar e confirmar a compra de um produto... é uma loja automobilística, ou seja relacionado com carros... então tenho que usar 2 itens para fazer esse sistema, que são: produtos ( Pneus, Escapamento, Peças, etc... ) e Serviços ( alinhamento, balanceamento, etc... ) explicando as forms -frmLogin -frmPrincipal ( nessa form tem um menu strip com 4 abas, 'principal', 'Gerar orçamento', 'Visualizar orçamento', 'Sair', ****Na aba 'Gerar orçamento' tem duas opções: Produtos e Serviços... onde quando eu clicar em uma das duas, abrira outra form propria, por exemplo: frmProdutos, e ela abrirá como : show.Dialog(); ai nessa frm irá ter 4 textBox e 3 buttons... //texbox's 1 textBox: Produto 2 textBox: Código do produto ( o usuário que irá digitar ) 3 textBox: Preço RS$ 4 textBox: Quantidade //Buttons 1 button: Adicionar ( no caso ele irá adicionar o produto em outra form, a cada vez que eu preencher e clicar no botão,e assim irá enviar os dados na form orcamento que sera a frmOrcamento ) 2 button: Limpar ( limpará os campos ) 3 button: Finalizar ( ele irá finalizar o Adicionamento dos produtos... e irá salvar na frmOrcamento os produtos adicionados... ) Bom pessoal é isso que o sistema irá fazer... eu to usando um metodo de Class, eu criei uma Class com 4 variaveis publicas, para usar na frmProduto, agora eu preciso saber como faço pra adicionar os produtos na outra form *frmOrcamento* , ( OBS: meu professor de c# deu a ideia de eu fazer uma frmOrcamento com um : richTextBox, com o conteúdo dos produtos adicionados la... mais quero saber como faço pra enviar esse produtos pra la após na frmProdutos, clicar em Adicionar... ) e por fim na frmPrincipal, tem um Menu Strip chamado: Visualizar orçamento, que quando eu clicar la eu vou ver todos os produtos & serviços que foram adicionados até o então, e se não tiver mais nada para ser adicionado eu irei Imprimir esse orçamento... para que o cliente possa assinar ) *ATENÇÃO: não estou usando banco de dados para salvar , não sera preciso.* vou deixar minha frmProduto e minha frmOrcamento e se alguem puder me indicar como farei para que os produtos da frmProduto seja adicionado na frmOrcamento... frmProdutos: public partial class frmProdutos : Form { private List<ClassProdutos> _produtos; public frmProdutos() { InitializeComponent(); //Inicializar a coleção dos produtos _produtos = new List<ClassProdutos>(); } private void btnAdicionar_Click(object sender, EventArgs e) { ClassProdutos produto = null; //Criar instância de produto produto = ComporInstanciaProduto(this.textBoxProduto.Text, this.textBoxCodigo.Text, this.textBoxValor.Text, this.textBoxQuantidade.Text); //Registrar produto na lista RegistrarProduto(produto); } //Função para registrar produto na lista private void RegistrarProduto(ClassProdutos produto) { this._produtos.Add(produto); } //Função para compor as instancias private ClassProdutos ComporInstanciaProduto(string nomeProduto, string CodigoProduto, string valorProduto, string quantidade) { ClassProdutos returnValue = new ClassProdutos(); returnValue.Produto = nomeProduto; returnValue.Codigo = CodigoProduto; returnValue.Valor = Convert.ToDecimal(valorProduto, CultureInfo.CurrentCulture); returnValue.Quantidade = Convert.ToDecimal(quantidade, CultureInfo.CurrentCulture); return returnValue; } private void btnFinalizar_Click(object sender, EventArgs e) { this.Close(); } private void btnLimpar_Click(object sender, EventArgs e) { textBoxProduto.Text = ""; textBoxCodigo.Text = ""; textBoxValor.Text = ""; textBoxQuantidade.Text = ""; textBoxProduto.Focus(); } } - frmOrcamento: public partial class frmOrcamento : Form { public frmOrcamento() { InitializeComponent(); } private void richTextBox1_TextChanged(object sender, EventArgs e) { } private void frmOrcamento_Load(object sender, EventArgs e) { } private void cancelarToolStripMenuItem_Click(object sender, EventArgs e) { this.Close(); } } - ClassFormularios.cs public class ClassProdutos { public string Produto { get; set; } public string Codigo { get; set; } public decimal Quantidade { get; set; } public decimal Valor { get; set; } public decimal Total { get { return this.Quantidade * this.Valor; } } } public class ClassServicos { public string Servico { get; set; } public decimal Valor { get; set; } } Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Outubro 27, 2012 Cara, duas coisas, poste uma foto dos itens que você explicou porque fica muito mais facil entender. Depois disso adicione bem claro sua duvida embaixo, seu post se confundiu com as explicações do projeto não da pra entender nada... Compartilhar este post Link para o post Compartilhar em outros sites
Kr3w^ 0 Denunciar post Postado Outubro 27, 2012 FrmPrincipal: Irei Clicar em Gerar Orçamento, Produtos- - FrmProdutos: Vou preencher os 4 campos, por exemplo: Produto: Pneu Pirelli Código: 00007 Preço Unit: 100,00 Quantidade: 4 e irei clicar em Adicionar, ai quando eu clicar em Adicionar, ele irá adicionar esse produto na frmOrçamento ai quando eu terminar de comprar os produtos, irei clicar em Finalizar para parar de adicionar... ai após isso eu volto pra frmPrincipal e clico em: quando eu clicar em Visualizar Orçamento, irá abrir essa form com os produtos que eu adicionei na frmProduto Como exemplo: essa frmOrcamento eu irei imprimir para ser entregue ao cliente como confirmação de compra... então galera preciso de ajuda na frmProduto, como irei fazer para quando clicar Adicionar o produto sera adicionado ai? ai dps que eu finalizar eu clica em visualizar Orçamento, o produto que eu adicionei esta-rá la? O codigo do programa ta acima, espero que alguem consiga me ajudar até mais e obrigado!!! Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Outubro 28, 2012 Então, quando você clicar em adicionar o produto você precisa de um banco de dados. Você disse que não seria necessário certo? Mas mesmo que você não quisesse, você precisaria de um lugar para guardar todas as informações, mesmo que elas sejam temporárias. Vou dar um exemplo falado: Quando você clicar para adicionar o produto, todos os campos serão convertidos em variáveis e adicionados à tabela de orçamento, SE o orçamento não precisar ser salvo, a única coisa que você precisa fazer é mandar o PrintDocument adicionar uma linha para cada produto na lista, assim como você fez acima, e depois adicionar a linha final. Mas cara, não há como fazer isso sem BD. Compartilhar este post Link para o post Compartilhar em outros sites
Kr3w^ 0 Denunciar post Postado Outubro 28, 2012 então, meu professor de c# me deu a ideia de fazer algo do tipo na frmOrcamento, criar um RichTextBox ou um textBox mesmo, jogando os valores la e ele comentou algo sobre uma class com variaveis para que esses dados que eu tivesse jogado la fossem salvos após eu Finalizar a adição de produtos, sera possivel? Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Outubro 28, 2012 Ah olha, tem uma possibilidade. Você cria uma classe, dentro dela você declara todas as variáveis globais, acho melhor declarar um Array de String. Quando você for jogar você pode puxar os valores do array e colocar la no PrintDocument. Sem BD :) Compartilhar este post Link para o post Compartilhar em outros sites
Kr3w^ 0 Denunciar post Postado Outubro 28, 2012 então, foi mais ou menos assim que o meu professor explicou só que a aula que tenho de c# é basico do basico, a gente aprende no maximo criar sistema de 4 notas de aluno e tal e mostrar o resultado, então ja da pra perceber que o grau de conhecimento é baixo demais... mais eu estou avançado e tentando caminhar sozinho, porque esse tipo de projeto não iremos aprender... então voce pode me explicar observando no meu projeto, as variaveis que criarei na Classe e também me explica como funciona o Array de string?? obg... Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Outubro 28, 2012 Ah sim, claro: Veja, para declararmos um array fora de uma classe faça o seguinte. Vá no Solution Explorer do Visual Studio (ou do C# express depende do que você está usando), clique com o direito sobre o primeiro item do projeto e depois selecione Add >> Class Nomeie a classe como bem quiser. Na classe você vai ver uma estrutura: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WindowsFormsApplication1 { class Class1 { } } Neste item você declara a(s) seguinte(s) variável(s): using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WindowsFormsApplication1 { class Class1 { public static String[] vetor = null; } } Você acabou de criar um Array de Strings de tamanho indefinido. Os arrays são como arquivos, então imagine uma grande tabela onde cada célula pode receber um valor de um tipo específico, neste caso, uma String. Você pode pegar cada valor específico através de um contador do tipo: for (int i = 0; i < Class1.vetor.Length; i++) { <variavel> = vetor[i]; } Ele armazena diversos valores em uma só variável, então, por exemplo, digamos que eu tenha um nome, uma data e uma idade armazenados nas posições 0, 1 e 2 do vetor (pois o vetor começa do 0) quando eu quiser falar para o programa deixar uma TextBox com o nome eu faço: Textbox.Text = Vetor[0]; Pois a posição 0 é o nome. Bom, sabendo isso agora você tem sua classe e seu Vetor (ou Array). Agora para adicionar os valores aqui basta você adicionar os valores do form de inserção de registros em determinadas posições do array: Vi que você tem um código um pouquinho complicado, sendo que você poderia obter o mesmo resultado com apenas umas 30 linhas de código, ou menos, e também vai ficar meio complicado na hora de programar. Eu preciso saber como você está lendo os dados para exibir no printDocument, para exibí-los no formulário de ver orçamento, me mande o código deste formulário. Compartilhar este post Link para o post Compartilhar em outros sites
Kr3w^ 0 Denunciar post Postado Outubro 29, 2012 então tipo... nesse exemplo de 'prints' que eu dei, eu estava usando outra estrura, tanto no frmProdutos, como no frmOrçamento pra receber os dados... no exemplo eu tava usando algo do tipo frmProdutos: public partial class frmProdutos : Form { public frmProdutos() { InitializeComponent(); } private void btnAdicionar_Click(object sender, EventArgs e) { frmOrcamento Produtos = new frmOrcamento(); Produtos.Owner = this; Produtos.ShowDialog(); } #region STRING PRODUTO public string TextoProduto() { return this.textBoxProduto.Text; } public string TextoCodigo() { return this.textBoxCodigo.Text; } public string TextoPreco() { return this.textBoxPreco.Text; } public string TextoQuantidade() { return this.textBoxQuantidade.Text; } #endregion private void btnCancelar_Click(object sender, EventArgs e) { this.Close(); } private void btnLimpar_Click(object sender, EventArgs e) { textBoxProduto.Text = ""; textBoxCodigo.Text = ""; textBoxPreco.Text = ""; textBoxQuantidade.Text = ""; textBoxProduto.Focus(); } } frmOrçamento public partial class frmOrcamento : Form { public frmOrcamento() { InitializeComponent(); } private void frmOrcamento_Load(object sender, EventArgs e) { if (this.Owner != null) { frmProdutos Produtos = (frmProdutos)this.Owner; this.lblProduto.Text = Produtos.TextoProduto(); this.lblCodigo.Text = Produtos.TextoCodigo(); this.lblPreco.Text = Produtos.TextoPreco(); this.lblQuantidade.Text = Produtos.TextoQuantidade(); decimal valor1 = Convert.ToDecimal(Produtos.TextoPreco()); decimal valor2 = Convert.ToDecimal(Produtos.TextoQuantidade()); decimal total = valor1 * valor2; lblResul.Text = total.ToString(); } } private void cancelarToolStripMenuItem_Click(object sender, EventArgs e) { this.Close(); } } só que com esse codigo eu não consigo fazer aquilo do botão adicionar, quando eu clico no botão adicionar com essa estrutura, ele ja abre o frmOrçamento com os dados que eu digitei, e só consigo fazer isso com 1 protudo.. ai eu mudei meu código para esse do exemplo, ai do topico, de registrar e tal voce citou que estou usando um codigo grande, e disse que teria um codigo mais facil pra isso pode me ajudar em dizer como seria?? até mais... obg! acho que fico meio dificil de entender o que eu disse... então só pra deixar mais claro, quando voce me pediu para postar uns prints, eu tenho esse sistema nesse codigo que eu postei acima ai eu usei esse sistema só pra deixar como exemplo como teria que ficar... agora eu estou tentando fazer isso no codigo de RegistrarProdutos, com a class e tudo mais... Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Outubro 29, 2012 Então cara, o problema é que você está usando métodos redundantes, por exemplo, este seu "Return this.<textbox>" não é necessário, porque você pode acessar as textboxes diretamente do outro formulário colocando a estrutura: <formulario>.<Textbox>.Text; Eles são componentes do tipo public, não é necessário fazer toda essa volta. Você criou propriedades e tudo mais, tudo isso é completamente desnecessário, a coisa que você precisa é adicionar isso tudo em um array. Por exemplo, quando você clicar em um produto você vai fazer o seguinte: *levando em consideração a classe do Array que eu postei* int i = Classe1.Vetor.Count +1; Classe1.Vetor[i] = TextboxNome.Text; i++; Classe1.Vetor[i] = TextboxData.Text; E assim por diante, entendeu o que eu fiz? Peguei a ultima posição do vetor e adicionei um, para que ela passasse ao próximo numero, porém se você quer trabalhar com mais de um produto de uma só vez, você vai precisar criar Arrays Multidimensionais, que contém mais de um lado. Isto é complexo pela confusão que ele faz na cabeça, mas eu vou passar alguns links que você pode se basear: http://msdn.microsoft.com/en-us/library/2yd9wwz4(v=vs.71).aspx http://msdn.microsoft.com/en-us/library/aa288453(v=vs.71).aspx Quanto ao print: http://www.macoratti.net/09/09/c_prn1.htm http://www.macoratti.net/12/05/c_prt1.htm Compartilhar este post Link para o post Compartilhar em outros sites
Kr3w^ 0 Denunciar post Postado Outubro 30, 2012 Olá amigo, então olha pelo o que eu vi eu entendi o que voce ta querendo que eu faça, mais eu me confundi... então veja se é isso mesmo que eu entendi olha... primeiro crio uma Class ( no meu caso ) crio essa variavel nele: -Class.cs ( exemplo ) class ClassArray { public static String[] vetor = null; } e ai pronto, criei a String Array como voce disse que irá ter um tamanho indefinido, no meu caso onde eu jogo isso e como eu jogo isso para o meu programa? eu preciso jogar isso na frmProdutos? e como devo jogar? vendo o meu sistema, como deveria ser jogado? não entendi essa parte eu clico duas vezes no botão adicionar da frmProduto, e depois dai como que eu faço essa parte? não entendi muito bem, teria como voce fazer essa parte aqui pra mim, visualizando meu sistema? os textBox da frmProdutos são: textBoxProduto textBoxCodigo textBoxValor textBoxQuantidade faz essa parte pra mim? pelo menos depois dai eu ja vou ter uma noção mais exata do que vou fazer e do que estou fazendo.. desculpe me pedir essa ajuda mais como ja disse o c# que aprendo é basico basico, mais como eu ja tinha uma vontade de fazer esses tipos de programas, quero aprofundar meus conhecimentos cada vez mais... obg por tudo :D Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Outubro 30, 2012 Então cara, o que você tem que pensar é o seguinte, você criou sua classe no c#, essa classe é pública, todo e qualquer tipo de formulário ou programa pode usar as variáveis que estão declaradas nela, porque você definiu o Vetor como "Public Static". A unica coisa que você tem que fazer quando clicar no botão adicionar é chamar a classe e a variável, adicionando no vetor, este exemplo abaixo é com um produto só: private void btnAdicionar_Click(object sender, EventArgs e) { ClassArray.vetor[0] = textBoxProduto.text; ClassArray.vetor[1] = textBoxCodigo.text; ClassArray.vetor[2] = textBoxValor.text; ClassArray.vetor[3] = textBoxQuantidade.text; frmOrcamento Produtos = new frmOrcamento(); Produtos.Owner = this; Produtos.ShowDialog(); } Se você quiser adicionar vários produtos no mesmo array você vai precisar de arrays multidimensionais, como eu mandei os links: class ClassArray { public static String[,] vetor = null; } Você tem um vetor multidimensional e queremos que esse array tenha 4 colunas, mais ou menos assim: Então o que temos que fazer é adicionar na formula: Array[x,y] para que o y valha até 4, lembrando que ele começa do 0. Então teremos: Array[0,0] Array[0,1] Array[0,2] Array[0,3] Agora o que você tem que fazer é jogar cada produto em uma das colunas da tabela, vamos organizar por Código, Produto, Quantidade e Valor, nesta ordem. Primeiro precisaremos declarar uma variável de contagem, que irá contar o indice do nosso vetor para podermos adicionar, na classe adicione: class ClassArray { public static string[,] vetor = null; public static int i = 0; } Depois no form o que você tem que fazer é buscar a posição do i e adicionar no vetor: private void btnAdicionar_Click(object sender, EventArgs e) { ClassArray.vetor[ClassArray.i, 0] = textCodigo.Text; ClassArray.vetor[ClassArray.i, 1] = textProduto.Text; ClassArray.vetor[ClassArray.i, 2] = textQuantidade.Text; ClassArray.vetor[ClassArray.i, 3] = textValor.Text; i++; } Na primeira posição, de começarmos o i com 0 teremos: ClassArray.vetor[0,0] = textCodigo.Text; ClassArray.vetor[0,1] = textProduto.Text; ClassArray.vetor[0,2]= textQuantidade.Text; ClassArray.vetor[0,3]= textValor.Text; Para puxar esses valores basta colocar o vetor e o numero da coluna, exemplo: O nosso vetor tem na primeira linha os números 0,1,2,3. Se eu chamar: MessageBox.Show(ClassArray.vetor[0,2]) O numero que me aparecerá será o 2: [0] [1] [2] [3] 0 1 2 3 E na hora de puxar tudo por programação para fazer uma lista você pode fazer um for encadeado: for (int i = 0; i < ClassArray.vetor.Length; i++) { for (int j = 0; j < 4; j++) { //exemplo Messagebox.Show(ClassArray.vetor[i,j]); } } Compartilhar este post Link para o post Compartilhar em outros sites
Kr3w^ 0 Denunciar post Postado Outubro 30, 2012 entendi o que fazer, veja se estou no passo certo... -Class.cs class ClassArray { public static string[,] vetor = null; public static int i = 0; } -frmProdutos private void btnAdicionar_Click(object sender, EventArgs e) { ClassArray.vetor[ClassArray.i, 0] = textBoxProduto.Text; ClassArray.vetor[ClassArray.i, 1] = textBoxCodigo.Text; ClassArray.vetor[ClassArray.i, 2] = textBoxValor.Text; ClassArray.vetor[ClassArray.i, 3] = textBoxQuantidade.Text; frmOrcamento Produtos = new frmOrcamento(); Produtos.Owner = this; Produtos.ShowDialog(); } -frmOrcamento: private void frmOrcamento_Load(object sender, EventArgs e) { for (int i = 0; i < ClassArray.vetor.Length; i++) { for (int j = 0; j < 4; j++) { //exemplo MessageBox.Show(ClassArray.vetor[i, j]); } } } // quando executo esse programa da um error no debbuging, estou errando a onde? obg e até mais.. Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Outubro 31, 2012 Não se esqueça de adicionar o "I++", e por favor cara, use o ao redor dos seus códigos porque é complicado de ler no copiar e cola. Faça assim no frmprodutos: [code] private void btnAdicionar_Click(object sender, EventArgs e) { ClassArray.vetor[ClassArray.i, 0] = textBoxProduto.Text; ClassArray.vetor[ClassArray.i, 1] = textBoxCodigo.Text; ClassArray.vetor[ClassArray.i, 2] = textBoxValor.Text; ClassArray.vetor[ClassArray.i, 3] = textBoxQuantidade.Text; i++; frmOrcamento Produtos = new frmOrcamento(); Produtos.ShowDialog(); } Qual é o erro do Debug? Compartilhar este post Link para o post Compartilhar em outros sites
Kr3w^ 0 Denunciar post Postado Outubro 31, 2012 então cara, se eu colocar esse i++ ele diz que o contexto nao existe, entao eu coloquei: ClassArray.i++ e ai deu, seria isso?? O erro que da no debbuging é que quando eu preencho a frmProdutos e clico em Adicionar, ele da error de debbuging na linha: ClassArray.vetor[ClassArray.i, 0] = textBoxProduto.Text; Error: NullEeferenceExpression was unhandeled Object reference not set to an instance of an object. o que seria??? Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Outubro 31, 2012 Sim, eu me esqueci de instanciar a classe quando chamei o i++. Com relação ao segundo erro, veja se o TXT não está em branco ou então se ele não está com nome diferente, ou não está em outro form. Compartilhar este post Link para o post Compartilhar em outros sites
Kr3w^ 0 Denunciar post Postado Outubro 31, 2012 não existe nenhuma textBox com o mesmo nome , e ela não estava em branco e o nome está correto... continua o error Print do error: Minha class: namespace Programa_de_teste { public class ClassArray { public static string[,] vetor = null; public static int i = 0; } } -frmProdutos private void btnAdicionar_Click(object sender, EventArgs e) { ClassArray.vetor[ClassArray.i, 0] = textBoxProduto.Text; ClassArray.vetor[ClassArray.i, 1] = textBoxCodigo.Text; ClassArray.vetor[ClassArray.i, 2] = textBoxValor.Text; ClassArray.vetor[ClassArray.i, 3] = textBoxQuantidade.Text; ClassArray.i++; } -frmOrcamento namespace Programa_de_teste { public partial class frmOrcamento : Form { public frmOrcamento() { InitializeComponent(); } } } Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Novembro 1, 2012 Não é problema de código, veja nos componentes se o nome está correto, se for o caso delete e crie uma nova, pois ele não está instanciando o objeto para poder usar. Compartilhar este post Link para o post Compartilhar em outros sites
Kr3w^ 0 Denunciar post Postado Novembro 1, 2012 estranho , esta tudo correto... meu professor de c# hoje, disse que procurou nos livros dele e também não entendeu essa formula de Array tente fazer ai para voce ver como esta dando esse error... obg e até mais! Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Novembro 2, 2012 Descobri o erro, ele se trata de uma instancia não definida do Array, então para consertar isso vamos definir Bounds para ele: Na classe basta trocar para: public static String[,] vetor = new string[900,4]; public static int i = 0; Ai você deve ter um meio de adicionar tudo em cada linha e coluna. Para verificar se está tudo bem, você pode adicionar um datagridview no form e fazer esta rotina: private void button1_Click(object sender, EventArgs e) { ClassArray.vetor[ClassArray.i, 0] = txtcod.Text; ClassArray.vetor[ClassArray.i, 1] = txtnome.Text; ClassArray.vetor[ClassArray.i, 2] = txtqtd.Text; ClassArray.vetor[ClassArray.i, 3] = txtvalor.Text; String[] valores = { ClassArray.vetor[ClassArray.i, 0], ClassArray.vetor[ClassArray.i, 1], ClassArray.vetor[ClassArray.i, 2], ClassArray.vetor[ClassArray.i, 3] }; dataGridView1.Rows.Add(valores); ClassArray.i++; } Compartilhar este post Link para o post Compartilhar em outros sites