Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Formien objekteista

Sivun loppuun

Ozmosis [05.04.2006 20:59:31]

#

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-

Antti Laaksonen [05.04.2006 21:09:48]

#

Toisessa formissa olevaan kontrolliin viitatessa täytyy kirjoittaa ensin formin nimi:

Form1!Text1 = "Toimii!"

Samalla tavalla saat haun tulokset toiseen formiin.

setä [05.04.2006 21:10:58]

#

Voit viitata Form2:lta Fotm1:n textboxiin kirjoittamalla:
Form1.Text1
Näköjään on nopeampiakin täällä

Antti Laaksonen [05.04.2006 21:13:52]

#

No tulihan ainakin molemmat tavat esille. Erotusmerkki voi siis olla yhtä hyvin huutomerkki kuin piste.

Ozmosis [05.04.2006 21:20:41]

#

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."

Antti Laaksonen [05.04.2006 21:45:34]

#

Käytät ilmeisesti VB.NETiä?

Siinä tämä tehdään jotenkin monimutkaisemmin, minä en löytänyt ratkaisua varttitunnin yrittämisen jälkeen...

Ozmosis [05.04.2006 21:48:15]

#

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??

setä [06.04.2006 00:14:58]

#

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.

BadSource [06.04.2006 06:50:47]

#

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.

Ozmosis [07.04.2006 19:29:14]

#

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-

setä [07.04.2006 20:02:13]

#

Koitappa sitten sijoittaa ne formin ulkopuolelle näkymättömiin mutta Visible = true.

neau33 [08.04.2006 11:57:23]

#

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

Metabolix [08.04.2006 13:10:47]

#

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...

neau33 [08.04.2006 18:01:59]

#

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...

Ozmosis [09.04.2006 18:38:49]

#

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-

neau33 [09.04.2006 19:56:41]

#

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)
'...

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta