Eli olen tehnyt lomakkeen jossa on yrityksen tiedot tekstikenttinä. Tein samalle lomakkeelle haku kentät jossa textboxiin syötetään kohdenumero tai yrityksen nimi. Tämän jälkeen valitaan comboboxista että kummalla haetaan eli kohdenumerolla vai yrityksen nimellä. Haku toimii todella hienosti tällä lomakkeella mutta tarkoitus olisi että ku painan päävalikosta hae niin avautuu "haku" ikkuna jossa on tuo textbox, combobox ja painike joka suoritta hakemisen. Tässä vaiheessa tullee se minun ongelma. Eli en saa hakemiani tuloksia näkymään tuolla lomakkeella, jossa on yrityksen tiedot. Voisiko joku antaa apuja minulle tähän?
Tässä vähän koodia jota olen tehnyt, tämä koodi toimii täydellisesti siinä lomakkeella missä on nuo yrityksen tiedoille varatut textboxit.
Dim kohdenro As Integer Dim hakuYritys As String If ComboBox1.Text = "" Then MsgBox("Valise kriteeri jolla haet", MsgBoxStyle.OkOnly, "Virhe") ElseIf ComboBox1.SelectedItem = "Kohdenumero" Then kohdenro = TextBox1.Text Me.YritysTableAdapter.FillByKohdenumero(Me.KantaDataSet.Yritys, kohdenro) If BindingNavigatorPositionItem.Text = "0" Then MsgBox("Kohdenumerolla ei löytynyt tuloksia", MsgBoxStyle.OkOnly, "Ei löytynyt") Me.YritysTableAdapter.FillByKohdenumero(Me.KantaDataSet.Yritys, kohdenro) End If Else hakuYritys = ComboBox1.SelectedItem = "Yritys" hakuYritys = TextBox1.Text Me.YritysTableAdapter.FillByYritys(Me.KantaDataSet.Yritys, hakuYritys) If BindingNavigatorPositionItem.Text = "0" Then MsgBox("Yrityksen nimellä ei löytynyt tuloksia", MsgBoxStyle.OkOnly, "Ei löytynyt") Me.YritysTableAdapter.FillByYritys(Me.KantaDataSet.Yritys, hakuYritys) End If End If End Sub
haku ikkunasa siis siinä missä on pelkästään textbox, combobox ja painike ja painikkeen takana tuo yllä oleva koodi niin olen yrittänyt muutella koodia mutta tuloksetta. Olen yrittänyt viitata myös yritys lomakkeen YritysTableAdabtereihin ja datasetteihin tästäkään huolimatta en saa toimimaan.
Olikohan tää nyt varmasti liian vaikeesti selitetty?
Kiitos!
t: mmikko
Jos oikein ymmärsin, niin tuo postaamasi koodi toimi paikassa X, eli siinä itsessään ei ole vikaa.
Lähtisin tutkimaan mitä eroa on ympäristössä, jossa se ei toimi. Saitko jonkin virheilmoituksen, vai mitä ylipäätään tapahtuu kun yrität ajaa koodia?
Pystytkö heittämään koko projektin jonnekin, josta sen voisi ladata tutkittavaksi?
Ainakin kohta, jossa on
hakuYritys = ComboBox1.SelectedItem = "Yritys" hakuYritys = TextBox1.Text
pisti silmään =)
ja saa käyttää niitä tageja alkuun koodivb hakasulkujen sisään ja loppu /koodivb
oli vaikeaa katsoa noita if endif-rakenteita
Moikka mmikko!
tämä on yksi mahdollinen tapa...tai sitten kapseloit luokkaan ja käytät elegantteja Get & Set property hienouksia...
'Module1.vb Public Module Module1 Public txtctl As TextBox, cboctl As ComboBox Public Sub ShowMsg( _ ByVal msg As String, ByVal dlg As String) MsgBox(msg, MsgBoxStyle.OkOnly, dlg) End Sub End Module
'Form1.vb Private Sub HaeToolStripMenuItem_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles HaeToolStripMenuItem.Click dim fForm2 As New Form2 fForm2.ShowDialog fForm2 = Nothing If txtctl.Text = String.Empty Then Exit Sub End If Dim msg As String = String.Empty If cboctl.SelectedItem = "Numerolla" Then Me.YritysTableAdapter.FillByKohdenumero( _ Me.KantaDataSet.Yritys, CType(txtctl.Text,Integer)) If BindingNavigatorPositionItem.Text = "0" Then msg = "Kohdenumerolla ei löytynyt tuloksia" End If ElseIf cboctl.SelectedItem = "Nimellä" Then Me.YritysTableAdapter.FillByYritys( _ Me.KantaDataSet.Yritys, txtctl.Text) If BindingNavigatorPositionItem.Text = "0" Then msg = "Yrityksen nimellä ei löytynyt tuloksia" End If End If txtctl = Nothing: cboctl = Nothing If msg <> String.Empty Then ShowMsg(msg, "Ei löytynyt") End If End Sub
'Form2.vb Dim haku As Boolean = False '... Sub Form2_Load(sender As System.Object, _ e As System.EventArgs) Handles Form2.Load ComboBox1.Items.Clear ComboBox1.Items.Add("Nimellä") ComboBox1.Items.Add("Numerolla") ComboBox1.SelectedIndex = 0 txtctl = TextBox1: cboctl = ComboBox1 End Sub Sub Form2Form_Closing(sender As SystemObject, _ e As System.FormClosingEventArgs) Handles Form2.Closing If Not haku Then txtctl.Text = String.Empty End If End Sub Private Sub Button1_Click(sender As Object, _ e As System.EventArgs) Handles Button1.Click If ComboBox1.Text = String.Empty Then ShowMsg("Valise hakukriteeri", "Virhe") ComboBox1.Focus: Exit Sub ElseIf TextBox1.Text = String.Empty Then ShowMsg("Aseta hakuarvo", "Virhe") TextBox1.Focus: Exit Sub End If haku = True: Me.Close End Sub Sub TextBox_1KeyUp(sender As System.Object, _ e As System.KeyEventArgs) Handles TextBox1.KeyUp CheckString End Sub Sub ComboBox1_SelectedIndexChanged( _ sender As System.Object, e As System.EventArgs) _ Handles ComboBox1.SelectedIndexChanged CheckString End Sub Sub CheckString() If ComboBox1.SelectedItem.ToString = _ "Numerolla" And TextBox1.Text.Length > 0 Then For i As Integer = 0 To TextBox1.Text.Length -1 Select Case Asc(TextBox1.Text.Substring(i, 1)) Case 48 To 57 Case Else TextBox1.Text = _ TextBox1.Text.Replace( _ TextBox1.Text.Substring(i, 1), "") Exit Sub End Select Next i End If End Sub
Kiitos nea! en vain oikein saa kiinni tuosta koodista, mitä tapahtuu missäkin :/
Moikka taas mmikko!
' Moduuli (Module1) ' pääpointti on, että kun alustetaan moduulissa ' pari julkista objektimuuttujaa ja määritellän esim. ' TextBox- ja ComboBox-kontrolleiksi niin näihin ' muuttujiin voidaan viitata esim. projektin ' miltä tahansa lomakkeelta... Public txtctl As TextBox, cboctl As ComboBox ' tai esim. Public DataSetti As System.Data.DataSet
' Lomake2 (Form2) '...jolloin esim. sen lomakkeen lataamisen yhteydessä, jolla ' määritellään hakuehdot, voidaan esim. julkinen objektimuuttuja ' [l]txtctl[/l] asettaa lomakkeella olevaksi [l]TextBox1[/l]-kontrolliksi ' jne... txtctl = TextBox1: cboctl = ComboBox1
'Päälomake (Form1) ' kun lomakkeella Form2 oli asetettu julkiset objektimuuttujat, ' saadan esim. Form2.TextBox1.Text-arvo haettua muuttujasta ' tekemällä viittaus tyyliin: Dim Teksti As String = txtctl.Text ' Syy miksi viittaus ei onnistu suoraan tyyliin: Dim Teksti As String = Form2.TextBox1.Text '...on siinä, että ' Designer määrittää kaikkien lomakkeiden kontrollit oletusarvoisesti ' privaateiksi, jolloin niihin voidaan viitata suoraan vain siltä ' lomakkeelta, jolla ne sijaitsevat... '(esim. Private Me.TextBox1 As New System.Windows.Forms.TextBox) jne... ' jos esim Form2 Designer määrittelyssä alustus tehtäisiin tyyliin: ' Public Shared Me.TextBox1 As New System.Windows.Forms.TextBox ' niin viittaaminen onnistuisi toiselta lomakkeelta suoraan tyyliin: MsgBox(Form2.TextBox1.Text) '...tämä ei ole kuitenkaan järkevää muissa, kuin erityistapauksissa...
Ihan vaan tiedoksi että alkuperäinen kysyjä kertoi sähköpostilla että ongelma ratkesi. (Vikana oli että ohjelma ei tuonnut tulosformia näkyville)
Kiitos grezille ja nealle avuista.. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.