Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Kotisivun tallennus

Sivun loppuun

ZuBer [09.09.2010 20:28:02]

#

Niin, olen aloittelija ja älkää haukkuko minua heti. Eli olen tekemässä nettiselainta. (Visual Basic) Olen omalla tyylilläni tehnyt kotisivu-asetuksen, eli pystyy asettamaan nettisivun. Olen tyytyväinen itseeni, että näin pitkälle pääsin, mutta ongelmaksi tuli, että kun "selain" suljetaan, kotisivuasetus katoaa. Kun painan nettiselaimessa "aseta kotisivu"-näppäintä, aukeaa uusi lomake jossa on textbox johon kotisivun osoite syötetään ja nappi, mistä asetus tehdään.

Asetuksen muuttonappula:

Public Class Form2

    Shared Property kotisivu As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        kotisivu = TextBox1.Text
        Me.Close()
    End Sub

End Class

Ja kotisivulle siirtymisnäppäin:

Private Sub KotisivuToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KotisivuToolStripMenuItem.Click
    WebBrowser1.Navigate(Form2.kotisivu)
End Sub

Apua kaivataan. Ja tuo selain on vain harjoittelua, en uutta Mozilla FireFoxia tai Internet Exploreria aio tehdä.

-Zuber

Ps. Tämä viesti on kirjoitettu sillä.

sqwiik [09.09.2010 20:42:00]

#

Tutustu tiedon tallentamiseen tiedostojen avulla.

miiro [09.09.2010 20:50:02]

#

Luultavasti tarkoituksenmukaisinta olisi tallentaa kotisivu My.Settingsiin

ZuBer [10.09.2010 17:03:19]

#

Voisiko joku kertoa lisää? En paljoa tästä My Settingistä tiedä...
EDIT: Koodia, minkälaista.?. Mitä pitää kirjoittaa, että tämän MySettingsin saa käyttöön?

RQ [10.09.2010 18:17:38]

#

Siinähän miiro pisti sulle linkin. Eiku vaan lukemaan.

ZuBer [10.09.2010 18:43:44]

#

Joo, kiitos linkistä ja löysin toisenkin ohjeen, ja sen avulla sain sitten tehtyä! Vaikka olikin englantia...
//Miten saan WebBrowserin sijainnin näkymään osoitekentässä? Eli mikä sen nimi on? (jos tajuutte, WebBrowser.? tai WebBrowser?)

ZuBer [10.09.2010 20:07:03]

#

Tuohonkin löytyi jo vastaus, sen keksin itse, ja taas uutta kysymystä pukkaa:

Yritän laittaa edelleen sen nettisivun osoitteen näkyviin osoitekenttään ja toteutan sitä My.Settingsillä (hehheh, ei varmaan paras tyyli mutta ihan sama). Minulla on asetus nimeltänsä Nykyinensivu. Osoitekenttään pitäisi automaattisesti päivittyä tämän arvo, mutta siihen ei kelpaa muodoksi string. Mikä siihen käy? Eli:

WebBrowser1_Url = My.Settings.Nykyinensivu

(ei ole kopioitu siitä koodista suoraan, saattaa olla väärin koska tällä koneella ei ole visualbasicia)
Tuohon My.Settings.Nykyinensivu:un pitäisi määrittää, mikä se on, onko se string vai mikä...

En osaa kyllä yhtään selittää... Koettakaa ymmärtää...

neau33 [11.09.2010 09:51:39]

#

Moi ZuBar!

Määritä My.Settings.Nykyinensivu merkkijonoksi (String) ja...

WebBrowser1.Url = New Uri(My.Settings.Nykyinensivu)

ZuBer [11.09.2010 11:19:29]

#

Kiitos neuvosta! Pitää kokeilla.

Ps. Olen muuten ZuBer... :D

ZuBer [11.09.2010 16:12:00]

#

Heittää tällaista: Invalid URI: The format of the URI could not be determined.
Eli ei lataa sivua ollenkaan... Pitäisikö tuo tehdä muuttujilla?

ZuBer [13.09.2010 20:25:58]

#

Onko muuttujia mahdollista tallentaa niin, että niiden arvot ovat tallella ohjelman seuraavilla käyttökerroilla? Muuttujia tulisi paljon...

neau33 [14.09.2010 06:12:30]

#

Moi taas ZuBer!

lisää projektiisi app.config filu ja...

app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <appSettings>
      <add key="Nykyinensivu" value="" />
    </appSettings>
</configuration>

MainForm:

Imports System.Configuration

Public Partial Class MainForm

   Dim config As Configuration = _
   ConfigurationManager.OpenExeConfiguration( _
   ConfigurationUserLevel.None)
   Dim strUri As String

   Public Sub New()

      Me.InitializeComponent()

   End Sub

   Sub MainFormLoad(sender As Object, e As EventArgs)

      If config.AppSettings.Settings.Item( _
      "Nykyinensivu").Value = "" Then
         config.AppSettings.Settings.Item( _
         "Nykyinensivu").Value = "https://www.ohjelmointiputka.net" 'esim.
         config.Save(ConfigurationSaveMode.Modified)
      End If

      WebBrowser1.Url = New Uri( _
      config.AppSettings.Settings.Item("Nykyinensivu").Value)

   End Sub

   Sub WebBrowser1DocumentCompleted(sender As Object, _
   e As WebBrowserDocumentCompletedEventArgs)
      config.AppSettings.Settings.Item( _
      "Nykyinensivu").Value = WebBrowser1.Url.ToString
      config.Save(ConfigurationSaveMode.Modified)
   End Sub

End Class

ZuBer [14.09.2010 07:20:47]

#

Seuraava kysymys: Miten luon käyttäjätunnusjärjestelmän Visual Basicilla? Se ei tulisi nettiin.
Pitäisi saada monta tunnusta tehtyä, ja niin, että ne tallentuvat seuraavillekin kerroille avattaviksi. Tunnuksille pitäisi saada yksilöllisiä asetuksia esim. kun tunnuksen 3 textboxiin1 kirjoitetaan auto, niin myös ensi kerralla kun tunnus 3 menee sisälle, se näkyy.
Yritin käyttää muuttujia, mutta jokainen tunnus olisi pitänyt luoda jo koodeissa, eikä nimeä tai salasanaa olisi pystynyt muuttamaan. Siitä tulisi muutenkin liian monimutkainen.

Kiitos jo etukäteen ja kiitos Nealle jo kahdesta vastauksesta.

Metabolix [14.09.2010 11:48:20]

#

Aluksi voit soveltaa noita samoja asioita kuin kotisivunkin tallennukseen.

ZuBer [14.09.2010 17:57:26]

#

En saa tuota toimimaan, Nea. Heittää sinistä viivaa noiden ConfigurationSaveMode, Configuration ym. alle.

neau33 [14.09.2010 23:24:40]

#

Moi taas ZuBer!

viimeisimpään: lisää myös Projektiisi referenssi: System.Configuration

ja edelliseen kysymykseesi: elikä jos SQL Server EXPRESS on asennettu niin..
tässä hieman asiaa käyttäjätunnusten/salasanojen/asetusten tiimoilta

'SqlServer testitietokata & taulun rakenne

DataBase
Name: LoginBase

Table
Name: LoginData

Columns:

Name: num (PrimaryKey)
Data Type: int
Identity Specification: Yes
(Is Identity): Yes
Identity Increment: 1
Identity Seed: 1
Allow Nulls: False

Name: username
Data Type: varchar(25)
Allow Nulls: False

Name: password
Data Type: varchar(16)
Allow Nulls: False
Name: setting
Data Type: varchar(200)
Allow Nulls: True
Imports System.Data
Imports System.Data.SqlClient

Public Partial Class MainForm

   Private conn As New SqlConnection()
   Private  IsChanged As Boolean = False

   Public Sub New()

      Me.InitializeComponent()

   End Sub

   Sub MainForm_Load(sender As Object, e As EventArgs)

      For i = 1 To 2
         Dim ctl As TextBox = _
         CType(Me.Controls("textBox" & CStr(i)),TextBox)
         ctl.MaxLength = 16
         ctl.PasswordChar = CType("*", Char)
         ctl.Visible = False
      Next

      button1.Text = "Muuta"
      button2.Text = "Testi"

      Dim frmLogin As New LoginForm
      Me.Hide
      frmLogin.ShowDialog
      Me.Show

      conn.ConnectionString = _
      "Data Source=.\SQLEXPRESS;" + _
      "Initial Catalog=LoginBase;Trusted_Connection=Yes"

   End Sub

   Sub Button1_Click(sender As Object, e As EventArgs)

      Dim ctl As TextBox = Nothing

      If button1.Text  = "Muuta" Then

         For i As Integer = 2 To 1 Step -1
            ctl = CType(Me.Controls("textBox" & CStr(i)), TextBox)
            ctl.Visible = True
         Next

         button1.Text = "OK": ctl.Focus
         ctl = Nothing: Exit Sub

      ElseIf button1.Text = "OK" Then

         Dim tagStr As String = String.Empty

         For i As Integer = 1 To 2

            ctl =  CType(Me.Controls("textBox" & CStr(i)), TextBox)
            If ctl.Text = String.Empty
               ctl.Focus: ctl = Nothing: Exit Sub
            End If

            If tagStr <> String.Empty And ctl.Text <> tagStr Then

               MsgBox("Salasana ja salasanan varmistus eivät täsmää!")
               For j As Integer = 2 To 1 Step -1
                  ctl =  CType(Me.Controls("textBox" & CStr(j)), TextBox)
                  ctl.Clear
               Next j

               ctl.Focus: ctl = Nothing: Exit Sub

            End If

            tagStr = ctl.Text

         Next i

         conn.Open

         Dim query As String = _
         "SELECT * FROM [LoginData] where username='" _
         + LoginData(0) + "' And password='" + LoginData(1) + "'"
         Dim da As SqlDataAdapter = New SqlDataAdapter(query , conn)
         Dim ds As New DataSet: da.Fill(ds, "LoginData")
         Dim cb As SqlCommandBuilder = New SqlCommandBuilder(da)
         ds.Tables("LoginData").Rows(0)(2) = textBox1.Text
         da.Fill(ds, "LoginData"): da.Update(ds, "LoginData")
         LoginData = New String(){ _
         CType(ds.Tables("LoginData").Rows(0)(1), String) , _
         CType(ds.Tables("LoginData").Rows(0)(2), String)}

         ds = Nothing: da = Nothing: cb = Nothing

         conn.Close

         For i As Integer = 1 To 2
            ctl.Clear
            ctl = CType(Me.Controls("textBox" & CStr(i)), TextBox)
            ctl.Visible = False
         Next

         ctl = Nothing: button1.Text = "Muuta"

      End If

   End Sub

   Sub Button2_Click(sender As Object, e As EventArgs)

      Dim msg As Integer = _
      MsgBox("Muutetaanko asetusta", _
      vbYesNo, "Nykyinen asetus on: " + MyAppSetting)

      If msg = 6 Then
         MyAppSetting = InputBox("Uusi arvo: ", "Asetukset")
         IsChanged = True
      End If

   End Sub

   Private m_Logindata() As String
   Public Property LoginData As String()

      Get
         LoginData = m_Logindata
      End Get

      Set(value As String())
         m_Logindata = value
      End Set

   End Property

   Private m_MyAppSettingData As String
   Public Property MyAppSetting As String

      Get
          MyAppSetting = m_MyAppSettingData
      End Get

      Set(value As String)
         m_MyAppSettingData = value
      End Set

   End Property

   Sub MainForm_FormClosing(sender As Object, e As FormClosingEventArgs)

      If IsChanged Then

         conn.Open

         Dim query As String = _
         "SELECT * FROM [LoginData] where username='" _
         + LoginData(0) + "' And password='" + LoginData(1) + "'"
         Dim da As SqlDataAdapter = New SqlDataAdapter(query , conn)
         Dim ds As New DataSet: da.Fill(ds, "LoginData")
         Dim cb As SqlCommandBuilder = New SqlCommandBuilder(da)
         ds.Tables("LoginData").Rows(0)(3) = MyAppSetting
         da.Fill(ds, "LoginData"): da.Update(ds, "LoginData")
         ds = Nothing: da = Nothing: cb = Nothing

         conn.Close

      End If

      conn = Nothing

   End Sub

End Class
Imports System.Data
Imports System.Data.SqlClient

Public Partial Class LoginForm

   Private conn As New SqlConnection()
   Private Logged As Boolean = False

   Public Sub New()

      Me.InitializeComponent()

   End Sub

   Sub LoginForm_Load(sender As Object, e As EventArgs)

      textBox1.MaxLength = 25
      textBox2.MaxLength = 16
      textBox2.PasswordChar = CType("*", Char)
      button1.Text = "OK"

      conn.ConnectionString = _
      "Data Source=.\SQLEXPRESS;" + _
      "Initial Catalog=LoginBase;" + _
      "Trusted_Connection=Yes"

      conn.Open

   End Sub

   Sub Button1_Click(sender As Object, e As EventArgs)

      If textBox1.Text = String.Empty Then
         textBox1.Focus: Exit Sub
      ElseIf textBox2.Text = String.Empty
         textBox2.Focus: Exit Sub
      End If

      Static cnt As Integer
      cnt += 1

      Dim query As String = _
      "SELECT username, password,  FROM [LoginData] where username='" _
      + textBox1.Text + "' And password='" + textBox2.Text + "'"
      Dim da As SqlDataAdapter = New SqlDataAdapter(query , conn)
      Dim ds As New DataSet: da.Fill(ds, "LoginData")

      If ds.Tables("LoginData").Rows.Count = 1 Then

         MainForm.LoginData = New String(){ _
         CType(ds.Tables("LoginData").Rows(0)(0), String) , _
         CType(ds.Tables("LoginData").Rows(0)(1), String)}
         MainForm.MyAppSetting = _
         CType(ds.Tables("LoginData").Rows(0)(2), String)
         Logged = True

      End If

      ds = Nothing: da = Nothing

      If Not Logged And cnt < 3 Then
         textBox1.Clear: textBox2.Clear
         MsgBox("käyttäjätunnus/salasana on väärä!")
         textBox1.Focus: Exit Sub
      ElseIf Not Logged And cnt = 3 Then
         textBox1.Clear: textBox2.Clear
         MsgBox("käyttäjätunnus/salasana on annettu kolmasti väärin" + _
               " - Ohjelma suljetaan...")
      End If

      Me.Close

   End Sub

   Sub LoginForm_FormClosin(sender As Object, e As FormClosingEventArgs)

      conn.Close
      If Not Logged Then End

   End Sub

End Class

ZuBer [16.09.2010 16:34:34]

#

Moro!
Miten voisin tallentaa TextBox1.Text:in olemassa olevaan tiedostoon jonka polku määritellään valmiiksi koodissa. Eli kun käyttäjä painaa nappia esim. Lisää, TextBoxin texti esim. "Moi. Tämä on esimerkki. Ja sen sellaista." liittyy .txt-tiedoston C:\Random.txt tekstiin. Mieluiten edellisen tekstin yläpuolelle. Esim. Random.txt:n alkuperäinen teksti olisi ollut "Ja sillä tavalla...päläpälä...Loppu" ja tämän Lisää-nappulan painamisen jälkeen Random.txt on tämän näköinen: "Moi. Tämä on esimerkki. Ja sen sellaista. Ja sillä tavalla...päläpälä...Loppu" Tekstiä saattaisi olla alkuperäisesti tiedostossa että kirjoitetussa TextBox1.textissä monta riviä.
Jotain olen kokeillut mutta en ole saanut toimimaan. Kiitos myös edellisestä vastauksesta Nealle.

Metabolix [16.09.2010 17:06:53]

#

Sinun pitää ensin lukea tiedoston koko sisältö ja sitten tallentaa tiedostoon uudestaan ensin uusi tieto ja sen perään vanha tieto. Tässä ei pitäisi olla mitään ihmeellistä, jos olet tutustunut alussa mainittuihin tiedostoasioihin.

ZuBer [16.09.2010 18:18:19]

#

Miten saan avattua tekstiä tiedostosta TextBoxiin?

ZuBer [16.09.2010 19:48:32]

#

Enää en tarvitse tuossa apua.


Sivun alkuun

Vastaus

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

Tietoa sivustosta