none
Aceito uma sugestão RRS feed

  • Discussão Geral

  • Olá amigos do fórum, preciso que alguém me dê uma sugestão de como montar um aplicativo, tem que ser em VB e usar o Forms. 

    A ideia e a seguinte. Participo de um clube frequentado por cidadãos e cidadãs de classe média e talvez muitos de classe C ou D.

    Este clube tem 9 quadras de tênis e hoje somos em uns 120 praticantes deste maravilhoso esporte. O tênis já foi um esporte das classes altas mas hoje ele se popularizou muito, temos várias praças públicas com quadras de cimento aqui em minha cidade.

    Vamos ao que interessa:

    Quero uma sugestão (ideias) de montar um aplicativo que administre o uso de uma pirâmide para a prática do tênis.

    Teria que ser mais ou menos isso:(a usuária desse aplicativo seria uma moça que trabalha no setor administrativo do clube)

    01) - Ela abriria o APP e receberia a seguinte pergunta: Quantos participarão da pirâmide neste mês?

    Digamos que ela insira o número 76 por exemplo. Então o aplicativo cria uma pirâmide feita com TextBox, sendo o primeiro no topo da pirâmide, abaixo deste, viriam 2 TextBox, abaixo dos 2 viriam 3 TextBox e assim sucessivamente formando a imagem de uma pirâmide, (um triângulo que no caso e chamado de pirâmide) até que chegue no total de 76, mas gostaria que os TextBox que ficarem na base da pirâmide completem a linha da base com TextBox, então o APP tem que criar mais que 76 TextBox sendo que alguns do final da linha ficarão em branco. Isso seria só por uma questão de estética para que a pirâmide fique desenhada de forma completa e não truncada.

    02) - Cada TextBox tem que ter um número sequencial, logicamente começando pelo número 001 até o último da base da pirâmide que no caso de 76 participantes este número deve ir até mais que 80 (chutando).

    03) - Este APP deve ter um arquivo vinculado a ele onde constem os nomes dos tenistas, então a usuária clicaria num ícone de abertura de arquivo, este ícone baixaria uma coluna de nomes de arquivos, por exemplo: pirâmide fevereiro_2019, pirâmide marco_2019, a usuária clicaria num destes e os TextBox ficariam preenchidos com os nomes dos tenistas que constam naquele arquivo e posteriormente a usuária editaria para acertar aqueles 76 que se inscreveram no mês corrente.

    04) - A pirâmide serve para administrar os desafios do mês, a regra é a seguinte: Aqueles tenistas que estão digamos na sexta linha da pirâmide, só podem desafiar os tenistas que estão a sua esquerda e aqueles que estão na quinta linha. A numeração dos tenistas da sexta linha, da esquerda para a direita vai do número 16 ao 21 e os que estão na quinta linha vai do 10 ao 15, então se o tenista número 20 desafiar o tenista número 12 e ganhar, o tenista número 20 passa a ocupar o lugar do tenista número 12 e aquele que era o 12 vira no 13. Se desafiou e perdeu, fica tudo como estava.

    sexta-feira, 26 de abril de 2019 01:29

Todas as Respostas

  • Durval Teixeira,

       Você pode criar "TextBox" dinamicamente, isso quer dizer que você coloca na sua form quantos "TextBox" quantos precisar. Eu tenho um exemplo disso, mas infelizmente está em VB6 (o fato de ser para ComboBox é o de menos):

    ===============================
    CRIAR COMBOS DINAMICAMENTE

    Cria combos virtuais a partir de uma combo real que pode ficar 'visible = false'. se você tem uma necessidade de criar um número indeterminado de combos para uma determinada opção escolhida pelo usuário, segue a dica.

    http://www.vbmania.com.br/index.php?modulo=detalhe&id=9110
    ===============================

       Agora o grande problema é se ficar MUITA GENTE na última linha... será que caberá na tela?!? Talvez você posso resolver isso colocando um único botão para cada conjunto de "TextBox" que precisará abrir. Ao clicar o botão aparecerá outra form para o preenchimento dos campos TextBox.

       Você também pode definir um número de colunas máximas para cada linha da árvore, exemplo: Se exceder 5 tenistas na linha, muda de linha, mas permanece na mesma linha de ranking...

      Os Números sequencias da "TextBox" pode ser guardados na propriedade "TAG" de cada "TextBox" e será definido na hora que for criado.

    ===============================
    Control.Tag Property

    Armazena informações extras sobre um formulário, relatório, seção ou controle necessitados por um aplicativo do Microsoft Access. Cadeia de caracteres de leitura/gravação.

    https://docs.microsoft.com/pt-br/dotnet/api/system.windows.forms.control.tag?view=netframework-4.8
    ===============================

      Esse arquivo vinculado pode ser um Banco de Dados, pode ser um arquivo JSON, um XML, um TXT... Se você quiser deixar mais "fácil" para a operadora, porém mais difícil de programar, pode criar um Banco de Dados que além de ter o nome do Tenista, terá seu "Ranking" e assim, fazendo a programação necessária, a árvore de tenistas já sairá mais ou menos pronta.

     Espero que ajude.

    []'s,
    Fabio I.
    • Editado Fabio I domingo, 28 de abril de 2019 18:11
    domingo, 28 de abril de 2019 18:10
  • Valeu Fabio, obrigado pelas boas dicas. Venho tentando montar este app em VB há mais de 2 meses. Primeiro montei um bem simples usando o VBA no excel, levei para usarem no clube e estão usando. Então resolvi tentar montar este em VB usando Form. Montei um com 121 TextBox pré definidos no Form, mas fica muito aquém de algo mais profissional. Ai resolvi tentar como você sugeriu, monta-lo com os TextBox sendo criados em tempo de execução, ficou legal mas ainda não aprendi como fazer para carregar o nome dos tenistas nos TextBox em tempo de execução. A rotina é esta abaixo. Depois fazendo isso veio a ideia de abrir o arquivo dessa forma que você esta me dando as dicas. Então na verdade preciso concluir algumas coisas:

    1 - Aprender a carregar (puxar os nomes dos tenistas de um arquivo txt para os TextBox criados em tempo de execução).

    2 - Salvar a pirâmide, ou seja, salvar o nome de todos que participaram num determinado mês. Como salvar usando os TextBox pré definidos, eu sei fazer, só ainda não aprendi usar o método de salvar os nomes nos TextBox criados em tempo de execução.

    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim xlabel, ylabel, xtxt, ytxt, left, top, largLabel, altLabel, largTxt, altTxt, qtde, linha, total As Integer
            top = 50
            left = 566
            largLabel = 65
            largTxt = 65
            altLabel = 15
            altTxt = 35
            total = TextBox1.Text
            For i = 1 To total
                linha += 1
                For j = 1 To linha
                    qtde += 1
                    Dim label As New Label
                    With label
                        label = New Label()
                        ylabel = top + (altLabel * linha)
                        xlabel = left - (largLabel * linha / 2) + (largLabel * j)
                        label.BorderStyle = BorderStyle.Fixed3D
                        label.Size = New System.Drawing.Size(largLabel, altLabel)
                        label.ForeColor = Color.Green
                        label.Location = New System.Drawing.Point(xlabel, ylabel)
                        If linha = 1 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 5))
                        If linha = 2 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 25))
                        If linha = 3 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 45))
                        If linha = 4 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 65))
                        If linha = 5 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 85))
                        If linha = 6 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 105))
                        If linha = 7 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 125))
                        If linha = 8 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 145))
                        If linha = 9 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 165))
                        If linha = 10 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 185))
                        If linha = 11 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 205))
                        If linha = 12 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 225))
                        If linha = 13 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 245))
                        If linha = 14 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 265))
                        If linha = 15 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 285))
                        If linha = 16 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 305))
                        If linha = 17 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 325))
                        If linha = 18 Then label.Location = New System.Drawing.Point(xlabel, (ylabel + 345))
                        label.TextAlign = HorizontalAlignment.Center
                        label.BackColor = Color.Yellow
                        label.Text = (qtde).ToString.PadLeft(3, "0"c)
                        Me.Controls.Add(label)
                    End With
                    
                    Dim txtBox As New TextBox
                    With txtBox
                        txtBox = New TextBox()
                        ytxt = top + (altTxt * linha)
                        xtxt = left - (largTxt * linha / 2) + (largTxt * j)
                        txtBox.Size = New System.Drawing.Size(largTxt, altTxt)
                        txtBox.Location = New System.Drawing.Point(xtxt, ytxt)
                        txtBox.BorderStyle = BorderStyle.Fixed3D
                        txtBox.Name = "Text" & qtde
                        txtBox.TextAlign = HorizontalAlignment.Center
                        txtBox.BackColor = Color.Silver
                        Me.Controls.Add(txtBox)
                    End With
                    If qtde >= total Then
                        Exit Sub
                    End If
                Next
            Next
        End Sub
    End Class

    segunda-feira, 29 de abril de 2019 03:23
  • Durval Teixeira,

       Eu acredito que se você ler alguns tutoriais (que disponibilizarei abaixo os links) vai conseguir fazer sua dúvida 1 e 2.

       Mas ao invés de salvar como ".TXT" puro (ou ".TXT" no formato CSV - Comma Separated Value) você já pensou em aprender algo mais organizado como "JSON" (mais moderno e já tem um componente pronto chamado Newtonsoft.Json) ou "XML"? Eu vou colocar links para você aprender a fazer tudo isso, mas você precisa aplicar as três regras que o Emmanuel disse ao Chico Xavier... se tiver dúvidas é só chamar.
     
    =============================================

    Lendo e escrevendo em arquivo Textos

    Neste artigo vou mostrar como ler e escrever em arquivos textos no VB.NET. Se você já fez isto no VB 6.0 e no VB 5.0 vai perceber que houve uma grande mudança , afinal , desde os tempos do Basic os comandos usados eram praticamente os mesmos.

    Private Sub btnLer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLer.Click
    Dim fluxoTexto As IO.StreamReader
    Dim linhaTexto As String
    If IO.File.Exists(txtarquivo.Text) Then
      fluxoTexto = New IO.StreamReader(txtarquivo.Text)
      linhaTexto = fluxoTexto.ReadLine
    
       While linhaTexto <> Nothing
         txtLinhas.Text &= linhaTexto & vbCrLf
         linhaTexto = fluxoTexto.ReadLine
       End While
      fluxoTexto.Close()
    Else
      MessageBox.Show("Arquivo não existe")
    End If
    End Sub
    http://www.macoratti.net/vbn_txt.htm

    =============================================
    VB.NET - Lendo arquivos Textos delimitados e preenchendo listas

    http://www.macoratti.net/vbn_atd1.htm
    =============================================
    VB.NET - Criar, Ler, Escrever, Copiar e Deletar arquivos Textos (revisitado)

    http://www.macoratti.net/15/06/vbn_atxt1.htm
    =============================================
    SAIDAS CSV, XML E XLSX

    http://www.vbmania.com.br/index.php?modulo=detalhe&id=9129
    =============================================
    Serializando e desserializando JSON com C# e VB.NET

    http://www.andrealveslima.com.br/blog/index.php/2016/12/14/serializando-e-desserializando-json-com-c-e-vb-net/
    =============================================
    C# - Lendo strings e arquivos no formato JSON

    Neste artigo eu vou apresentar os conceitos básicos sobre JSON e mostrar como ler strings e arquivos no formato JSON usando C#.

    * JSON é texto simples
    * JSON é "auto-descritivo" (legível)
    * JSON é hierárquico (valores dentro de valores)
    * JSON pode ser analisado pelo JavaScript
    * JSON os dados podem ser transportadas usando AJAX

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Web.Script.Serialization;
    
     static void LerArquivoJson(string arquivo)
     {
                JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
    
                using (StreamReader r = new StreamReader(arquivo))
                {
                    string json = r.ReadToEnd();
                    dynamic array = serializer.DeserializeObject(json);
                    Console.WriteLine("");
                    Console.WriteLine(serializer.Serialize(array));
                    Console.WriteLine("");
                    Console.ReadKey();
              }
      }

    http://www.macoratti.net/16/04/c_json2.htm
    =============================================
    vb.net json parse coding practice
    Coding Practice
    Publicado em 9 de out de 2016

    USA O Newtonsoft!

    https://youtu.be/L4vL3se4kf4
    =============================================

    []'s,
    Fabio I.
    • Editado Fabio I segunda-feira, 29 de abril de 2019 11:27
    segunda-feira, 29 de abril de 2019 11:23