Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] problema istruzione CType
Forum - C# / VB.NET - [VB.NET] problema istruzione CType

Avatar
Lafa_96 (Normal User)
Pro


Messaggi: 111
Iscritto: 09/03/2011

Segnala al moderatore
Postato alle 18:18
Lunedì, 28/03/2011
sto creando un programmino in vb che è quasi completamente creato con la programmazione ad oggetti.
in pratica è composto da un tab control nel quale, al load del form, si crea una pagina e nella pagina si creano un tot di controlli.
il mio problema è che io dovrei programmare un button che si riferisce a una textbox che è in una groupbox la quale è all'interno della tab page.
probabilmente mi sono spiegato malissimo, adesso vi posto il codice
Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1
  2.     Dim tab As Integer = 0
  3.     Dim i As Integer = 1
  4.     Dim titoloversione As New Label
  5.     Dim commento As New Label
  6.     Dim impostaval As New Label
  7.     Dim WithEvents titolotxt As New TextBox
  8.     Dim WithEvents correggi As New Button
  9.     Dim WithEvents versione As New RichTextBox
  10.     Dim WithEvents errori As New RichTextBox
  11.     Dim WithEvents gruppo As New GroupBox
  12.     Dim WithEvents pen1 As New RadioButton
  13.     Dim WithEvents pen2 As New RadioButton
  14.     Dim WithEvents pen3 As New RadioButton
  15.     Dim WithEvents valpen As New TextBox
  16.     Dim WithEvents correzione As New TextBox
  17.     Dim WithEvents convalida As New Button
  18.     Dim WithEvents termina As New Button
  19.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  20.         'proprietà oggetti'
  21.         versione.Width = 944
  22.         versione.Height = 233
  23.         versione.Left = 6
  24.         versione.Top = 49
  25.         versione.Font = New Font("micrsoft sans serif", 12)
  26.  
  27.  
  28.         errori.Width = 944
  29.         errori.Height = 118
  30.         errori.Left = 6
  31.         errori.Top = 415
  32.  
  33.         titoloversione.Text = "Titolo versione"
  34.         titoloversione.Width = 76
  35.         titoloversione.Height = 13
  36.         titoloversione.Left = 3
  37.         titoloversione.Top = 3
  38.  
  39.         commento.Text = "Cmmento/correzione"
  40.         commento.Width = 117
  41.         commento.Height = 13
  42.         commento.Left = 124
  43.         commento.Top = 307
  44.  
  45.         impostaval.Text = "Imposta" + " val."
  46.         impostaval.Width = 70
  47.         impostaval.Height = 13
  48.         impostaval.Left = 6
  49.         impostaval.Top = 85
  50.         pen1.Text = "-0.25"
  51.         pen1.Width = 49
  52.         pen1.Height = 17
  53.         pen1.Left = 6
  54.         pen1.Top = 17
  55.         pen2.Text = "-0.50"
  56.         pen2.Width = 49
  57.         pen2.Height = 17
  58.         pen2.Left = 6
  59.         pen2.Top = 40
  60.         pen3.Text = "-1"
  61.         pen3.Width = 34
  62.         pen3.Height = 17
  63.         pen3.Left = 6
  64.         pen3.Top = 63
  65.         valpen.Multiline = True
  66.         valpen.Width = 101
  67.         valpen.Height = 20
  68.         valpen.Left = 6
  69.         valpen.Top = 101
  70.         valpen.BorderStyle = BorderStyle.FixedSingle
  71.         valpen.Font = New Font("Microsoft Sans Serif", 12)
  72.         gruppo.Text = "Penalità"
  73.         gruppo.Width = 113
  74.         gruppo.Height = 127
  75.         gruppo.Left = 6
  76.         gruppo.Top = 285
  77.         gruppo.Controls.Add(impostaval)
  78.         gruppo.Controls.Add(pen1)
  79.         gruppo.Controls.Add(pen2)
  80.         gruppo.Controls.Add(pen3)
  81.         gruppo.Controls.Add(valpen)
  82.  
  83.         correggi.Left = 10
  84.         correggi.Top = 55
  85.  
  86.         titolotxt.Multiline = True
  87.         titolotxt.Width = 364
  88.         titolotxt.Height = 24
  89.         titolotxt.Left = 6
  90.         titolotxt.Top = 19
  91.         titolotxt.BorderStyle = BorderStyle.FixedSingle
  92.         titolotxt.Font = New Font("Microsoft Sans Serif", 12)
  93.  
  94.         correzione.Multiline = True
  95.         correzione.BorderStyle = BorderStyle.FixedSingle
  96.         correzione.Width = 734
  97.         correzione.Height = 24
  98.         correzione.Left = 127
  99.         correzione.Top = 324
  100.         correzione.Font = New Font("Microsoft Sans Serif", 12)
  101.  
  102.         convalida.Text = "Convalida"
  103.         convalida.Width = 72
  104.         convalida.Height = 24
  105.         convalida.Left = 878
  106.         convalida.Top = 324
  107.         convalida.FlatStyle = FlatStyle.Flat
  108.         convalida.FlatAppearance.BorderColor = Color.Black
  109.         convalida.FlatAppearance.MouseOverBackColor = Color.SteelBlue
  110.         convalida.Cursor = Cursors.Hand
  111.  
  112.         termina.Text = "Termina"
  113.         termina.Width = 75
  114.         termina.Height = 23
  115.         termina.Left = 6
  116.         termina.Top = 545
  117.         termina.FlatStyle = FlatStyle.Flat
  118.         termina.FlatAppearance.BorderColor = Color.Black
  119.         termina.FlatAppearance.MouseOverBackColor = Color.SteelBlue
  120.         termina.Cursor = Cursors.Hand
  121.  
  122.  
  123.  
  124.         TabControl1.TabPages.Add(tab, "Nuova versione")
  125.         TabControl1.SelectTab(tab)
  126.         TabControl1.SelectedTab.BackColor = Color.LightSteelBlue
  127.         TabControl1.SelectedTab.Controls.Add(versione) '0'
  128.         TabControl1.SelectedTab.Controls.Add(correggi) '1'
  129.         TabControl1.SelectedTab.Controls.Add(errori) '2'
  130.         TabControl1.SelectedTab.Controls.Add(titoloversione) '3'
  131.         TabControl1.SelectedTab.Controls.Add(commento) '4'
  132.         TabControl1.SelectedTab.Controls.Add(gruppo) '5'
  133.         TabControl1.SelectedTab.Controls.Add(titolotxt) '6'
  134.         TabControl1.SelectedTab.Controls.Add(correzione) '7'
  135.         TabControl1.SelectedTab.Controls.Add(convalida) '8'
  136.         TabControl1.SelectedTab.Controls.Add(termina) '9'
  137.     End Sub
  138.  
  139.     Private Sub convalida_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles convalida.Click
  140.         Dim penalità As String
  141.         If   Then
  142.             Me.Text = "ciao"
  143.         End If
  144.     End Sub
  145.  
  146.     Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click
  147.         If CType(TabControl1.SelectedTab.Controls.Item(0), RichTextBox).SelectedText = "" Then
  148.             MsgBox("Non hai selezioneto alcun errore da correggere!", MsgBoxStyle.Exclamation, "ATTENZIONE!") : Exit Sub
  149.         End If
  150.         CType(TabControl1.SelectedTab.Controls.Item(0), RichTextBox).SelectionFont = New Font("Microsoft Sans Serif", ToolStripComboBox1.Text)
  151.         CType(TabControl1.SelectedTab.Controls.Item(0), RichTextBox).SelectionFont = New Font(CType(TabControl1.SelectedTab.Controls.Item(0), RichTextBox).SelectionFont, FontStyle.Underline)
  152.         CType(TabControl1.SelectedTab.Controls.Item(0), RichTextBox).SelectionColor = Color.Red
  153.         CType(TabControl1.SelectedTab.Controls.Item(0), RichTextBox).SelectedText = "(" & i.ToString & ")" & CType(TabControl1.SelectedTab.Controls.Item(0), RichTextBox).SelectedText
  154.         i = i + 1
  155.         CType(TabControl1.SelectedTab.Controls.Item(0), RichTextBox).SelectionFont = New Font(CType(TabControl1.SelectedTab.Controls.Item(0), RichTextBox).SelectionFont, FontStyle.Regular)
  156.         CType(TabControl1.SelectedTab.Controls.Item(0), RichTextBox).SelectionColor = Color.Black
  157.     End Sub
  158.  
  159.     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  160.         CType(TabControl1.SelectedTab.Controls.Item(0), RichTextBox).SelectionFont = New Font("Microsoft Sans Serif", ToolStripComboBox1.Text)
  161.     End Sub
  162.  
  163.     Private Sub titolotxt_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles titolotxt.TextChanged
  164.         If CType(TabControl1.SelectedTab.Controls.Item(6), TextBox).Text <> "" Then
  165.             TabControl1.SelectedTab.Text = CType(TabControl1.SelectedTab.Controls.Item(6), TextBox).Text
  166.             Me.Text = "Latin 2.0 Ultimate - " & CType(TabControl1.SelectedTab.Controls.Item(6), TextBox).Text
  167.         ElseIf CType(TabControl1.SelectedTab.Controls.Item(6), TextBox).Text = "" Then
  168.             TabControl1.SelectedTab.Text = "Nuova versione"
  169.             Me.Text = "Latin 2.0 Ultimate"
  170.         End If
  171.     End Sub
  172. End Class



dove c'è l'implicazione "errata" quella senza nulla tra if e then, lì vorrei che al click di quel button succedesse che se la textbox(in questo caso si chiama "penval") è diversa da "" allora succeda qualcosa, il problema è individuare il controllo (metto l'istruzione CType perchè creerò un button per creare un altra pagina con gli stessi controlli)

scusate se il titolo è molto vago ma non sapevo come sintetizzarlo e scusate se mi sono spiegato malissimo ma spero capiate!


Non hai bisogno di vedere l’intera scalinata. Inizia semplicemente a salire il primo gradino. (Martin Luther King)
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
4
Down
V
Segnala al moderatore
Postato alle 19:24
Lunedì, 28/03/2011
Che senso ha aggiungere tutti i controlli al form_load se tutte le informazioni sono statiche? Non ci guadagni assolutamente. Anzi, ci perdi due volte. Prima perdi leggibilità a causa di tutti quei cast e quegli indici dal significato misterioso. Poi perdi performance per la miriade di cast che devi effettuare anche solo per riferirti a un controllo.
Se è questo che intendi per programmazione ad oggetti, hai sbagliato direzione.

P.S.: una textbox è sempre diversa da "", in quanto la prima è un oggetto TextBox e la seconda un oggetto String. Essendo di due tipi diversi, non possono puntare a oggetti uguali, né identici.

P.P.S.: la risposta alla tua domanda dovrebbe essere evidente dato l'uso che hai fatto della proprietà controls.
Codice sorgente - presumibilmente C# / VB.NET

  1. If CType(CType(TabControl1.SelectedTab.Controls(5), GroupBox).Controls(x)).Text <> "" Then


si lo so perfettamente che è un casino fatto in questo modo ma purtroppo non in che modo farlo se non in questo!! ps se hai qualche suggerimento per evitare tutte queste righe sono disponibilissimo ad ascoltarlo! - Lafa_96 - 28/03/11 19:51
lo so che scritto così è un casino ma non so in che altro modo scriverlo! se hai dei consigli dimmi pure! comunque non funziona! mi sa che è meglio che tolgo il groupbox - Lafa_96 - 28/03/11 20:17
Dico solo un piccolo consiglio marginale di poca importanza: Per migliorare la lettura del codice, nel caso decidessi di tenerlo cosi, Utilizza dei blocchi "With" e "End With" per evitare di ripetere lo stesso controllo o la stessa proprietà. - walker93 - 29/03/11 00:26


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM