Hei!
Minulla on seuraavanlainen ongelma: Ohjelmassa on useampi formi Form1, Form2, jne. Form2:ssa on haku kenttä(textbox) ja haku nappi. Kun tuota haku nappia painaa niin haun tulokset pitäisi saada Form1:ssä olevaan textboxiin. Mitenhän tämä onnistuu??
-Ozmosis-
Toisessa formissa olevaan kontrolliin viitatessa täytyy kirjoittaa ensin formin nimi:
Form1!Text1 = "Toimii!"
Samalla tavalla saat haun tulokset toiseen formiin.
Voit viitata Form2:lta Fotm1:n textboxiin kirjoittamalla:
Form1.Text1
Näköjään on nopeampiakin täällä
No tulihan ainakin molemmat tavat esille. Erotusmerkki voi siis olla yhtä hyvin huutomerkki kuin piste.
Jostain syystä en saa tätä toimimaan.
Kokeilin Form1.TextBox1.Text = "Toimii" ja Form1.TextBox1 = "Toimii", mutta ei kumpikaan toiminut..
Form1.TextBox1 = "Toimii" tulee virheilmoitus "Reference to a non-shared member requires an object reference."
Käytät ilmeisesti VB.NETiä?
Siinä tämä tehdään jotenkin monimutkaisemmin, minä en löytänyt ratkaisua varttitunnin yrittämisen jälkeen...
Joo, VB.NETiä käytän.
Ja sitten hieman toisenlainen ongelma:
Miten onnistuu saada tietokannan taulun useamman kentän sisältö yhteen textboxiin? Kun textboxin propertiesseista määrittelee ton DataBindingin text kohdan niin siihen ei voi valita kuin yhden kentän, ei esimerkiksi koko taulua. Onko siis mitenkään mahdollista saada kaikkien kenttien tietoja yhteen textboxiin??
VB.NETtiä tuntematta luulisin että lisäämällä kullekin kentälle oman (näkymättömän) textboxin ja kokoamalla näiden tekstit yhteen textboxiin.
Toinen tapa on tehdä tietokantaan valmis kysely, jossa halutut kentät halutuista tauluista kootaa suuremmiksi kokonaisuuksiksi ja tallentaa se kantaan. VB:ssä tietolähde laitetaan viittaamaan siihen tekemäämme kyselyyn taulun sijaan, jolloin voit normaalisti määrittää textboxiin halutun datan.
Toi tapa että tekee jokaiselle kentälle oman textboxin toimii hyvin niin kauan kun tekee niistä kentistä näkymättömiä, silloin kenttien sisältö ei enään kopioidu näkyvään textboxiin. Millähän tämän saisi korjattua??
-Ozmosis-
Koitappa sitten sijoittaa ne formin ulkopuolelle näkymättömiin mutta Visible = true.
Moi Ozmosis!
Siis yhteen TextBox'iin...Hmmm...Kokeiles soveltaa tota alla olevaa jutskaa...
Private Sub Form_Load() Adodc1.Recordset.MoveFirst Text1.Text = "" Do While Not Adodc1.Recordset.EOF cnt = cnt + 1 Select Case cnt Case 1: Text1.DataField = "Kenttä1" 'kentän nimi! Text1.Tag = Text1.Tag & Text1.Text & Space$(25 - Len(Text1.Text))'väh. kentän pituus Case 2: Text1.DataField = "Kenttä2" Text1.Tag = Text1.Tag & Text1.Text & Space$(25 - Len(Text1.Text)) Case 3: Text1.DataField = "Kenttä3" Text1.Tag = Text1.Tag & Text1.Text & Space$(25 - Len(Text1.Text)) Case 4: Text1.DataField = "Kenttä4" Text1.Tag = Text1.Tag & Text1.Text & vbCrLf cnt = 0: Adodc1.Recordset.MoveNext End Select Loop Text1.Text = Text1.Tag End Sub
PS. TextBox'in fontti vaikuttaa tekstin asettumiseen...kokeile
Alkuperäiseen kysymykseen vastaukseksi: Muuta käsin koodin puolelta kyseinen tekstilaatikko julkiseksi, jolloin nuo aiemmin neuvotut tavat toimivat. Oletuksena formilla olevat objektit ovat yksityisiä. Vertaa:
' Tätä voi muuttaa vain tässä formissa: Private OmaNappula As System.Windows.Forms.Button ' Tätä voi muuttaa muualtakin: Public YleinenNappula As System.Windows.Forms.Button
Näin se ainakin teoriassa toimii, eli se kääntyi ongelmitta. En vain näin parissa minuutissa keksinyt, miten saisin Form2:n näkyville ja pääsisin painamaan sitä kriittistä nappulaa, kun se on eri tiedostossa. Tuli vain valitusta, ettei tyyppiä Form2 ole määritelty...
Moi Ozmosis!
Täss olis sit toinen jutska sovellettavaks...
Private Sub Form_Load() Text1.Text = "" Text1.Tag = DataEnvironment1.rsCommand1.GetString For j% = 1 To Len(Text1.Tag) Select Case Mid$(Text1.Tag, j%, 1) Case Chr$(13) Text1.Text = Text1.Text + vbCrLf Case Else Text1.Text = Text1.Text + Mid$(Text1.Tag, j%, 1) End Select Next j% Text1.Tag = "" End Sub
PS. Fontiks voit asettaa mitä tykkäät...
Kiitoksia kaikille avusta!
Sain kaikkien kenttien tiedot yhteen textboxiin. Mutta yllätysyllätys jälleen ilmeni uus ongelma, kun suoritan tietokannasta haku niin SELECT lauseeseen pitäisi saada ehdoksi erään textboxin sisältö, mutta tämä ei onnistu vaikka siirrän textboxin sisällön muuttujaan. Ja jos muuttujan nimi on eri kuin where ehdon kentän nimi niin, vb nostattaa poikkeuksen.
Select
SELECT * FROM table WHERE (Nimi=Haku_nimi)
Koodi
Dim Haku_nimi As String Haku_nimi = HNimi.Text Try OleDbDataAdapter2.Fill(NimiHakuDataSet1) Catch ex As Exception MsgBox(ex.ToString) End Try TextBox1.Text = TextBox1.Text + TextBox2.Text & vbCrLf TextBox1.Text = TextBox1.Text + TextBox3.Text & vbCrLf .... End Sub
Eli miten saan ton muuttujan tohon select lauseeseen, koska nythän se vertaa vain Nimi kentän tekstiä Haku_nimi tekstiin, eikä muuttujan Haku_nimi arvoon.
Mikähän tähän avuksi?
Ps. Toivottavastai ei ollut liian epäselvästi selitetty...
-Ozmosis-
Moikka Ozmosis!
Kokeiles jotain ton alla olevan tapasta...
SELECT * FROM table WHERE (Nimi=?)
'... OleDbDataAdapter2.SelectCommand.Parameters("Nimi").Value = Haku_nimi DataSet21.Clear() OleDbDataAdapter2.Fill(DataSet21) '...
Aihe on jo aika vanha, joten et voi enää vastata siihen.