Heippa taas.
Ohjelma mikä olisi tarkoitus tehdä tässä kunhan ensin opin ohjelmoimaan, olisi eräänlainen laskenta ohjelma millä lasketaan tiettyihin työtehtäviin kuluva aika (en viitsi sitä nyt enempää selventää).
Ohjelmalle annetaan ensin pari tietoa; millä tehdään ja mistä tehdään. Nämä molemmat antavat ojelmalle laskennassa käytettävät arvot.
Sen jälkeen valitaan työtehtävään tarvittavia tapahtumia joihin kuluvan ajan ohjelma laskee 'millä' ja 'mistä' arvojen perusteella.
Tuloksena pitäisi olla tämän kaltainen tulostettava lista: (höh.. en nyt millään saanut tuota oikeanlaiseksi, mutta toivottavasti ymmärrätte. Pystyviivojen pitäisi olla samalla kohtaa)
Työtehtävä:XXXXX millä:YYYY mistä:ZZZZ
___________________________________________
Tapahtuma | arvot | aika
__________|_________________________|______
QQQ |A5.5 B44 C600 D1 E4 | 2
__________|_________________________|______
WWW |A4 B0.1 C890 D66 | 6
__________|_________________________|______
EEE |X0 Y40 |
|X20 Y1.4 |
|X22 Y-6 |
|X0.9 Y-90 C0.4 E99 | 12
__________|_________________________|______
RRR | C8 D12 | 0.7
__________|_________________________|______
TTT |C120 T1 |
|C2 T0 | 7
__________|_________________________|______
Yhteensä: 27.7Huomaa: tapatumat EEE ja TTT vaativat useamman rivin.
Listassa olevia tapahtumia pitäisi päästä klikkaamalla muokkaamaan.
Miten tällainen kannataisi toteuttaa? Ajattelin ensin listboxia mutta kun siihen ei saa osiota kuin yhdelle riville... vai saako? Joka tapauksessa tapahtuman sisältävän osion pitäisi sisältää useamman rivin.
Mod. lisäsi kooditagit
Hmmm.. Taisin keksiä ratkaisun ihan itse. Pitää kokeilla.
Kerro toki meillekkin.
Heippa taas novice!
voisitko valaista hieman lisää, eli siis...
tapahtuma-solun arvon ollessa QQQ ja millä-arvon ollessa YYYY ja mistä-arvon ollessa ZZZZ arvot-solun arvo on A5.5 B44 C600 D1 E4, josta laskien saadaan aika-solun arvoksi 2 (copy/pasteta ihmeessä kaava tänne)? Mitä muuten pitäisi tapahtua arvot-solun sisällölle jos vaihdetaan mistä-arvoksi vaikkapa sahajauho, tapahtuman ollessa edelleen QQQ - vaihtuuko arvot-solun sisältö...jolloin luonnollisesti aika-solun arvon pitäisi myös muuttuman? Tai jos jätetään mistä-arvo ennalleen ja vaihdetaan tapahtuma-arvoksi RRR QQQ:n tilalle, pitäisikö arvot-solun arvoksi tällöin tulla C8 D12 ja aika-solun arvoksi0.7?
Jos taas ajatellaan että taphtuman ollessa QQQ on millä-arvo automaattisesti YYYY ja mistä-arvo automaattisesti ZZZZ ja arvot-solun arvo automaattisesti A5.5 B44 C600 D1 E4 ja aika-solun arvo automaattisesti 2 niin tietolähteeksi riittää yksi yksinkertainen tietokantataulu:
Tapahtuma TEXT |millä TEXT|mistä TEXT|arvot MEMO |aika DOUBLE| QQQ |YYYY |ZZZZ |A5.5 B44 C600 D1 E4| 2| '... '... EEE |kirveellä|puusta|X0 Y40;X20 Y1.4;X22 Y-6;X0.9 Y-90 C0.4 E99| 12| ' jne...
HUOMAA EEE-tapahtumassa puolipisteellä erotetut arvot (helpompi splitata)...ja laskukaavaksi muodostuu vain aika-solujen arvojen ynnääminen yhteen(sä)...
YKSINKERTAISTETTU MALLI (väännetty SharpDevelop 3.0:lla)
imppaa mallitietokanta täältä ja pura C:\aseman juureen...
Imports System
Imports System.Data
Imports System.Data.OleDb
Imports Microsoft.VisualBasic
Public Partial Class MainForm: Inherits Form
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'* *
'* Formille: *
'* *
'* 3 ComboBox'ia - (cboEvents [DropDownStyle=DropDownList], *
'* cboEquipment [DropDownStyle=Simple], *
'* cboMaterial [DropDownStyle=Simple]) *
'* *
'* 1 ListBox - (lstShow [Font=Courier New, Normal , 9]) *
'* *
'* 2 Nappia - (btnOK [Text="Compute" Visible/Enabled=False] *
'* btnCancel [Text="Cancel" Visible/Enabled=False]) *
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Dim rdelim As String = ""
Dim colH1 As String = " Tapahtuma"
Dim colH2 As String = " arvot "
Dim colH3 As String = " aika"
Public Shared WithEvents _
dsValues As DataSet = New DataSet
Public Sub New()
Me.InitializeComponent()
End Sub
Sub MainFormLoad(sender As Object, e As EventArgs)
Dim constr As String = _
"Provider=Microsoft.Jet.OLEDB.4.0; " + _
"Data Source=C:\Tietokanta.mdb"
Dim con As OleDbConnection = _
New OleDb.OleDbConnection(constr)
constr = Nothing
Try
con.Open
Catch ex As Exception
End Try
If connectionstate.Open Then
Dim query As String = _
"Select * From [Taulu1]"
Dim ds As DataSet = New DataSet
Dim da As New OleDbDataAdapter(query, con)
da.Fill(ds, "Taulu1")
cboEvents.DataSource = ds.Tables("Taulu1")
cboEvents.DisplayMember = "Tapahtuma"
cboEvents.SelectedIndex = 0
cboEquipment.DataSource = ds.Tables("Taulu1")
cboEquipment.DisplayMember = "millä"
cboEquipment.SelectedIndex = 0
cboMaterial.DataSource = ds.Tables("Taulu1")
cboMaterial.DisplayMember = "mistä"
da.TableMappings.Clear
query = "Select arvot, aika From [Taulu1]"
da = New OleDbDataAdapter(query, con)
da.Fill(dsValues, "Taulu1")
da = Nothing: query = Nothing
con.Close
End If
End Sub
Sub CboEventsSelectedIndexChanged( _
sender As Object, e As EventArgs)
If cboEvents.SelectedIndex = 0 Then
Exit Sub
End If
If lstShow.Items.Count = 0 Then
lstShowAddHeaders
End If
For i As Integer = 1 To lstShow.Items.Count - 1
If lstShow.Items(i).indexOf(cboEvents.Text.Trim) > - 1 Then
Exit Sub
End If
Next
Try
Dim hlpStr() As String = _
dsValues.Tables("Taulu1").Rows( _
cboEvents.SelectedIndex)("arvot").Split(";")
If Not hlpStr Is Nothing Then
For i As Integer = 0 To _
hlpStr.GetUpperBound(0)
Select Case i
Case 0
If hlpStr.GetUpperBound(0) > 0 Then
lstShow.Items.Add( _
" " + cboEvents.Text + _
Space(12 - cboEvents.Text.Length) + _
"|" + hlpStr(i) + _
Space(25 - hlpStr(i).Length) + "|")
Else
lstShow.Items.Add( _
" " + cboEvents.Text + _
Space(12 - cboEvents.Text.Length) + _
"|" + hlpStr(i) + _
Space(25 - hlpStr(i).Length) + "|" + _
Space(12 - Format(dsValues.Tables("Taulu1").Rows( _
cboEvents.SelectedIndex)("aika"),"0.00").Length) + _
Format(dsValues.Tables("Taulu1").Rows( _
cboEvents.SelectedIndex)("aika"),"0.00"))
lstShow.Items.Add(rdelim)
End If
Case 1 To hlpStr.GetUpperBound(0) -1
lstShow.Items.Add( _
" " + _
Space(12) + _
"|" + hlpStr(i) + _
Space(25 - hlpStr(i).Length) + "|")
Case hlpStr.GetUpperBound(0)
lstShow.Items.Add( _
" " + Space(12) + _
"|" + hlpStr(i) + _
Space(25 - hlpStr(i).Length) + "|" + _
Space(12 - Format(dsValues.Tables("Taulu1").Rows( _
cboEvents.SelectedIndex)("aika"),"0.00").Length) + _
Format(dsValues.Tables("Taulu1").Rows( _
cboEvents.SelectedIndex)("aika"),"0.00"))
lstShow.Items.Add(rdelim)
End Select
Next
EnableButtons
End If
Catch ex As Exception
End Try
End Sub
Sub BtnOKClick(sender As Object, e As EventArgs)
Select Case BtnOK.Text
Case "Compute"
Dim drow As DataRow
Dim tValue As Double
Dim j As Integer = 0
For Each drow In _
dsValues.Tables("Taulu1").Rows
For i As Integer = 0 To _
lstShow.Items.Count -1
Dim hlpStr() As String = _
dsValues.Tables("Taulu1").Rows(j)(0).Split(";")
For k As Integer = hlpStr.GetUpperBound(0) To _
hlpStr.GetUpperBound(0)
If lstShow.Items(i).IndexOf(hlpStr(k)) > -1 Then
tValue += drow.Item(1): Exit For
End If
Next k: hlpStr = Nothing
Next i
j += 1
Next: drow = Nothing
lstShow.Items.Add(" Yhteensä:" + _
Space(42 - Format(tValue,"0.00").Length) + _
Format(tValue,"#0.00"))
BtnOK.Text = "Print": Exit Sub
Case "Print"
printStr = String.Empty
For i As Integer = 0 To lstShow.Items.Count -1
printStr += lstShow.Items(i) _
+ Environment.NewLine
Next
Dim fPrintForm As Form = New PrintForm
fPrintForm.ShowDialog
fPrintForm = Nothing
cboEvents.SelectedIndex = 0
lstShow.Items.Clear
DisableButtons
End Select
End Sub
Sub lstShowAddHeaders()
lstShow.Items .Add( _
colH1 + Space(10) + colH2 + Space(10) + colH3)
rdelim += _
" ------------|" & _
"-------------------------|" & _
"------------"
lstShow.Items .Add(rdelim)
End Sub
Sub btnCancelClick(sender As Object, e As EventArgs)
cboEvents.SelectedIndex = 0
lstShow.Items.Clear
DisableButtons
End Sub
Sub EnableButtons()
btnOK.Visible = True
btnOK.Enabled = True
btnOK.Text = "Compute"
btnCancel.Visible = True
btnCancel.Enabled = True
End Sub
Sub DisableButtons()
btnOK.Visible = False
btnOK.Enabled = False
btnOK.Text = "Compute"
btnCancel.Visible = False
btnCancel.Enabled = False
End Sub
Sub lstShowClearAllSelections()
If lstShow.SelectedItems.Count > 0 Then
For i As Integer = 0 To lstShow.Items.Count -1
lstShow.SetSelected(i,False)
Next
End If
End Sub
Sub LstShowSelectedIndexChanged( _
sender As Object, e As EventArgs)
If lstShow.SelectedItems.Count > 0 Then
If lstShow.SelectedItem.indexOf("---") > -1 Or _
lstShow.SelectedItem.indexOf("Tapahtuma") > -1 Or _
lstShow.SelectedItem.indexOf("Yhteensä") > -1 Then
lstShowClearAllSelections
End If
End If
End Sub
End ClassImports System
Imports System.Drawing
Imports Microsoft.VisualBasic.PowerPacks
' Jos GAC:sta ei löydy assembly'a Microsoft.VisualBasic.PowerPacks
' niin imppaa [linkki "http://www.microsoft.com/downloads/details.aspx?familyid=92faa81e-e9c1-432c-8c29-813493a04ecd&displaylang=en"]täältä[/linkki] ja asentele...
Public Partial Class PrintForm
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'* Formi (Text ei mtään - BackColor=Black FormBorderStyle=None - *
'* Size=425; 438 - fontti Courier New,Normal, 9 *
'* *
'* Formille: *
'* 1 TextBox (PrintBox - fontti Courier New,Normal, 9 *
'* BorderStyle=None - BackColor White *
'* Location 1;1 - Size 423; 436 *
'* *
'* 1 Timer-ohjausobjekti *
'* 1 printForm-ohjausobjekti (jos ei löydy Tools/Windows Forms- *
'* laatikosta niin klikkaa laatikossa hiiren oikealla, valitse *
'* Configure SideBar (tai vastaavaa), klikkaa vasemmassa laati- *
'* kossa tekstiä: Windows Forms, klikkaa Add Components nappia *
'* valitse GAC-välilehti, etsi listalta Microsoft.VisualBasic. *
'* PowerPacks tuplaklikkaa nimeä ja klikkaile OK:ta *
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Public Sub New()
Me.InitializeComponent()
End Sub
Sub PrintFormLoad(sender As Object, e As EventArgs)
Me.PrintBox.Tag = printStr
printStr = String.Empty
End Sub
Sub PrintFormShown(sender As Object, e As EventArgs)
Timer1.Interval = 500
Timer1.Enabled = True
Timer1.Start
End Sub
Sub PrintBoxEnter(sender As Object, e As EventArgs)
focusbox.Focus
End Sub
Sub Timer1Tick(sender As Object, e As EventArgs)
If Me.PrintBox.Text = _
Me.PrintBox.Tag Then
Try
PrintForm1.Print()
Catch ex As Exception
End Try
Me.Close
End If
Me.PrintBox.Text = Me.PrintBox.Tag
End Sub
End ClassSensijaan jos arvot-solun sisältö koostuukin muuttujista, joiden arvot muuttuvat prosessin aikana, alkaa koodaamisessa olla haastetta...
Hmmm... En jaksanut paneutua vastaukseesi, sillä kuten jo sanoin; keksin ratkaisun itse.
Homma menee kuitenkin kutakuinkin siten kuin ensimmäisessä kappaleessa kysyit.
Alkuperäinen ogelma oli saada listboxin tyypinen luettelo tapahtumista. Listbox ei kuitenkaan siihen soveltunut koska siihen saa vain yhden rivin/klikattava 'osio'.
Tein (siis kokeilin, että homma toimii) oman listboxin joka koostuu textboxeista.
Eli kun uusi tapahtuma aloitetaan, ohjelma luo uuden textboxin(readonly) edellisen alle johon kyseisen tapahtuman arvot tulostetaan. Textboxia klikkaamalla avautuu kyseisen tapahtuman 'asetuslomake' josta arvoja pääsee tarvittaessa muokkaamaan.
'Tapahtumaboxeja' voi olla alekkain jopa 40-50 ja niitä pääsee selaamaan scrollbarilla (tällähetkellä harjoittelussa).
Kunnes kaikki tapahtumat on laskettu, ohjelma kopioi ne alekkain yhdelle textboxille josta ne voi sitten tulostaa (tätä en ole vielä edes kokeillut / opetellut, mutta uskon sen onnistuvan kivuttomasti).
Esimerkissähän kaikki arvot on vedetty hatusta, toivottavasti et ole kovin kauaa aikaasi tuhlannut olemattoman kaavan selvittämiseen ;)
Tässä vaiheessa en ole saanut vielä riviäkään varsinaista koodia aikaiseksi. Olen vain harjoitellut, kokeillut ja tutkinut mikä kaikki on mahdollista ja miten asiat kannatta lopulliseen ohjelmaan tehdä. Ohjelman layout(formit, buttonit boxit yms.) alkaa kuitenkin pikkuhiljaa olemaan valmis.
Kiitos kuitenkin vastauksesta, tutkin sen takuulla jossain vaiheessa.
Hei
Enpä onnistunutkaan tekemään haluamaani listboxia ;( Ongelmaksi muodostui luodun textboxin valinta.
Eli miten saan tietoon aktiivisen textboxin nimen? Ja miten saan textboxin taustavärin vaihtumaan sitä klikatessa. Textboxejahan ei ole koodaus vaiheessa vaan ne luodaan vasta itse ohjelmassa.
Moikka taas novice
kerroit tuossa aikaisemmin hieman satuja kirjoittamalla, että ListBox-ohjausobjektiin "saa vain yhden rivin/klikattava 'osio'"...
'testaa tällä...
Imports System
Imports System.Drawing
Imports Microsoft.VisualBasic
Imports System.Windows.Forms
Public Partial Class MainForm: Inherits Form
Dim cols As String = _
"Tapahtuma | arvot | aika "
Dim rdelim As String = _
"----------|-------------------------|------"
Dim checking As Boolean = False
Dim findex As Integer = -1
Dim sindex As Integer = -1
Dim eindex As Integer = -1
Dim dblclk As Boolean = False
Public Sub New()
Me.InitializeComponent()
End Sub
Sub MainFormLoad(sender As Object, e As EventArgs)
'esimerkkidata --------
ListBox1.Items.Add(cols)
ListBox1.Items.Add(rdelim)
ListBox1.Items.Add( _
"QQQ |A5.5 B44 C600 D1 E4 | 2 ")
ListBox1.Items.Add(rdelim)
ListBox1.Items.Add( _
"EEE |X0 Y40 | ")
ListBox1.Items.Add( _
" |X20 Y1.4 | ")
ListBox1.Items.Add( _
" |X22 Y-6 | ")
ListBox1.Items.Add( _
" |X0.9 Y-90 C0.4 E99 | 12 ")
ListBox1.Items.Add(rdelim)
'------------------------
TextBox1.TextAlign = 0
TextBox1.ReadOnly = True
TextBox2.TextAlign = 0
TextBox3.TextAlign = 2
TextBox3.ReadOnly = True
ListBox1.SelectionMode = 2
ListBox1.Font = New Font( _
"Courier New", 9, FontStyle.Regular)
EditControlsHide
End Sub
Sub ListBox1DoubleClick(sender As Object, e As EventArgs)
dblclk = True
End Sub
Sub ListBox1SelectedIndexChanged( _
sender As Object, e As EventArgs)
If ListBox1.SelectedItems.Count > 0 Then
If Not checking Then
CheckSelectedItems(sender)
End If
End If
End Sub
Sub Button1Click(sender As Object, e As EventArgs)
Dim ctl As Control, i As Integer = 0
Dim hlpStr( _
ListBox1.SelectedItems.Count - 1) As String
Dim item As Object
Dim itemArray(0) As String
Dim cnt As Integer = 0
For Each item In ListBox1.SelectedIndices
ReDim Preserve itemArray(cnt)
itemArray(cnt) = ListBox1.Items(item)
cnt += 1
Next
cnt -= cnt
For Each ctl In Me.Controls
If ctl.Name = "textBox" + CStr(i + 1) Then
If ctl.Text <> ctl.Tag Then
Dim tagArray() As String
Dim txtArray() As String
Dim tagStr As String = ctl.Tag.Replace( _
Environment.NewLine, ";")
Dim txtStr As String = ctl.Text.Replace( _
Environment.NewLine, ";")
tagArray = tagStr.Split(";")
tagStr = Nothing
txtArray = txtStr.Split(";")
txtStr = Nothing
For j As Integer = 0 To _
tagArray.GetUpperBound(0)
itemArray(j) = itemArray(j). _
Replace(tagArray(j), txtArray(j))
ctl.Text = String.Empty
ctl.Tag = String.Empty
Next
tagArray = Nothing: txtArray = Nothing
End If
ctl.Visible = False: ctl.Enabled = False
i += 1
Elseif ctl.Name = "button1" Then
ctl.Visible = False: ctl.Enabled = False
End If
Next
For Each item In ListBox1.SelectedIndices
If ListBox1.Items(item) <> itemArray(cnt) Then
Dim colArray() As String = _
itemArray(cnt).Split("|")
For i = 0 To colArray.GetUpperBound(0)
Select Case i
Case 0
colArray(i) = colArray(i) + _
Space(10 - colArray(i).Length) + "|"
Case 1
colArray(i) = colArray(i) + _
Space(25 - colArray(i).Length) + "|"
Case 2
colArray(i) = Space(10 - _
colArray(i).Length) + colArray(i)
End Select
Next
itemArray(cnt) = String.Empty
For i = 0 To colArray.GetUpperBound(0)
itemArray(cnt) += colArray(i)
Next: colArray = Nothing
checking = True
ListBox1.Items(item) = itemArray(cnt)
checking = False
End If
cnt += 1
Next: i = Nothing
itemArray = Nothing: item = Nothing
cnt = Nothing: dblclk = False
ClearSelections(ListBox1)
End Sub
Sub CheckSelectedItems(lstBox As ListBox)
For i As Integer = 0 To lstBox.Items.Count - 1
If lstBox.Items(i).IndexOf("---") > -1 _
Or lstBox.Items(i).IndexOf("Tapahtuma") > -1 _
Or lstBox.Items(i).IndexOf("Yhteensä") > -1 Then
checking = True
lstBox.SetSelected(i, False)
checking = False
End If
Next
If findex <> sindex And eindex > sindex Then
Dim done As Boolean = False
For i As Integer = sindex To eindex
If lstBox.Items(i).IndexOf("---") < 0 _
And lstBox.Items(i).IndexOf("Tapahtuma") < 0 _
And lstBox.Items(i).IndexOf("Yhteensä") < 0 Then
checking = True
lstBox.SetSelected(i,True)
If findex <> i And done = False Then
findex = i: done = True
End If
checking = False
End If
Next
End If
sindex = -1: eindex = -1
End Sub
Sub EditControlsHide
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.Name.IndexOf("textBox") > -1 Then
ctl.Text = String.Empty
ctl.Tag = String.Empty
ctl.Visible = False
ctl.Enabled = False
ctl.Height = 20
ElseIf ctl.Name.IndexOf("button1") > -1 Then
ctl.Tag = String.Empty
ctl.Visible = False
ctl.Enabled = False
End If
Next
End Sub
Sub ListBox1Click(sender As Object, e As EventArgs)
If Not dblclk Or dblclk And _
ListBox1.SelectedItems.Count > 1 Then
ClearSelections(sender)
dblclk = False
Else
SetSelections(sender)
dblclk = False
End If
End Sub
Sub SetSelections(lstBox As ListBox)
If lstBox.SelectedItems.Count > 0 Then
If lstBox.Items( _
lstBox.SelectedIndex).indexOf("---") > -1 Or _
lstBox.Items( _
lstBox.SelectedIndex).indexOf("Tapahtuma") > -1 Or _
lstBox.Items( _
lstBox.SelectedIndex).indexOf("Yhteensä") > -1 Then
dblclk = False: Exit Sub
End If
Dim srow As Integer = 0
Dim erow As Integer = 0
If lstBox.SelectedIndex > 2 Then
For i As Integer = _
lstBox.SelectedIndex To 2 Step - 1
If lstBox.Items(i).indexOf("---") = -1 Then
srow = i
Else: Exit For
End If
Next
End If
If srow > 0 Then
For i As Integer = _
srow To lstBox.Items.Count - 2
If lstBox.Items(i).indexOf("---") = -1 Then
erow = i
checking = True
lstBox.SetSelected(i, True)
checking = False
Else
Exit For
End If
Next
End If
If lstBox.SelectedItems.Count > 0 Then
Dim ctl As Control, j As Integer = 0
back:
For Each ctl In Me.Controls
If ctl.Name = "textBox" + CStr(j + 1) Then
Dim txtBox As TextBox = ctl
ctl.Visible = True: ctl.Enabled = True
Dim item As Object
If lstBox.SelectedItems.Count > 1 Then
txtBox.Multiline = True
If lstBox.SelectedIndices.Count < 5 Then
txtBox.Height += _
((txtBox.Font.Size + 5) *(lstBox.SelectedIndices.Count -1))
txtBox.ScrollBars = 0
ElseIf lstBox.SelectedIndices.Count > 4 Then
txtBox.Height += (txtBox.Font.Size + 5) * 4
txtBox.ScrollBars = 2
End If
Else
txtBox.Multiline = False
txtBox.Height = 20
End If
Dim cnt As Integer = 0
For Each item In lstBox.SelectedIndices
Dim strArray() As String = _
lstBox.Items(item).Split("|")
If cnt < lstBox.SelectedIndices.Count - 1 Then
txtBox.Text += strArray(j).Trim + Environment.NewLine
txtBox.Tag += strArray(j).Trim + Environment.NewLine
Else
txtBox.Text += strArray(j).Trim
txtBox.Tag += strArray(j).Trim
End If
strArray = Nothing
cnt += 1
Next
cnt = Nothing
j += 1
txtBox = Nothing
If j < 3 Then
Goto back
End If
Elseif ctl.Name = "button1" Then
ctl.Visible = True: ctl.Enabled = True
End If
Next: j = Nothing
End If
End If
End Sub
Sub ClearSelections(lstBox As ListBox)
If lstBox.Items.Count > 0 Then
For i As Integer = 0 To _
lstBox.Items.Count - 1
checking = True
lstBox.SetSelected(i, False)
checking = False
Next i
EditControlsHide
End If
End Sub
End ClassNo siltäpä näyttää...
Okei.. Aktiivisen kontrollin nimen hakeminen onnistui esim. näin:
Private Sub TextBox0_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox0.Click
Dim active As String = Me.ActiveControl.Name
textbox1.Text = active
End SubMutta tämä kertoo vain textbox0:n nimen ja jos laitan tämän koodin buttonille, niin textbox1:een tulostuu buttonin nimi.
Miten saan tulostettua textbox1:een minkä tahansa klikatun textboxin nimen?
Edelleenkin textboxit luodaan vasta itse ohjelmassa.
EDIT:
Noniin... löysin ohjeet:
'FORMILLE 3 TEXTBOXIA JA BUTTON
Public Class Form1
Private PreviousControl As Control
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
doSet(Me)
End Sub
Private Sub doSet(ByVal parentCtr As Control)
Dim ctr As Control
For Each ctr In parentCtr.Controls
AddHandler ctr.Leave, AddressOf meLeave
doSet(ctr)
Next
End Sub
Private Sub meLeave(ByVal sender As Object, _
ByVal e As System.EventArgs)
PreviousControl = DirectCast(sender, Control)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
TextBox3.Text = PreviousControl.Name
End Sub
End ClassMoikka taas novice!
Tämä nyt alkaa mennä vähän sivuun ListBox-kontrollista, mutta...
Jos formille pitää luoda lennossa ennalta tuntematon määrä ohjausobjekteja eikä käytetä mitään ulkoista Script-kontrollia, niin tapahtumien tunnistaminen voi käydä hankalaksi, tässä kuitenkin eräs ratkaisu...
(väännety SharpDevelop 3.0:lla)
Imports System
Imports System.Drawing
Imports System.Threading
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
Public Partial Class MainForm: Inherits Form
' alustetaan boolean-muuttuja (koko formin käyttöön)
' ja annetaan lähtöarvoksi EPÄTOSI
Dim EndProg As Boolean = False
Public Sub New()
Me.InitializeComponent()
End Sub
Sub MainFormShown(sender As Object, e As EventArgs)
'asetetaan staattinen Boolean-muuttuja (säilyttää arvon)
Static fshown As Boolean
' jos muuttujan arvo on EPÄTOSI...
If Not fshown Then
' ...asetetaan Boolean-muuttujan arvoksi TOSI
' (ei ehkä niinkään tarpeelinen tässä,
' mutta jos pääformi esim. piilotettaisiin...)
fshown = True
' ja siirrytään aliohjelmaan...
ProgramMainLoop
End If
End Sub
Sub ProgramMainLoop()
' Siirretään fokus textBox1:lle
' ennen luuppiin siirtymistä...
textBox1.Focus
' ja lähdetään pyörimään kieppiä ympäri
' niin kauan, kunnes toisin määrätään...
Do While Not EndProg: Application.DoEvents
' asetetaan pieni viive, jottei syötäisi
' aivan mahdottomasti resursseja...
Thread.Sleep(200)
' Jos formin aktiivisen ohjausobjektin nimi
' ei ole 'textBox1', mutta aktiivisen ohjausobjektin
' tyyppi on 'System.Windows.Forms.TextBox' niin...
If Me.ActiveControl.Name <> "textBox1" _
And Me.ActiveControl.GetType. _
ToString.IndexOf("xtB") > -1 Then
' kopioidaan aktiivisen ohjausobjektin tekstiarvo
' texBox1-tekstiarvoksi ja...
textBox1.Text = Me.ActiveControl.Text
' asetetan texBox1 aktiiviseksi ohjausobjektiksi
' siirtämällä sille fokus...
textBox1.Focus
End If
Loop
End Sub
Sub MainFormFormClosing( _
sender As Object, e As FormClosingEventArgs)
'Suljettaessa ohjelmaa päästään tällä asetuksella
'ulos aliohjelman 'ProgramMainLoop' luupista
EndProg = True
Me.Dispose
End Sub
Sub MainFormFormClosed( _
sender As Object, e As FormClosedEventArgs)
End
End Sub
End ClassAihe on jo aika vanha, joten et voi enää vastata siihen.