Gå til innhold

Anbefalte innlegg

Jeg lager et lite program for å teste en del funksjoner, der jeg har to forms. Den ene er en form der du skriver inn HTML-kode, den andre er en form som bare inneholder en webbrowser og en oppdateringsknapp. Programmet mitt lagrer en HTML-fil, som webbrowseren skal laste. Dette fungerte fint når jeg hadde bare en form, men nå, når jeg har 2, oppstår det et problem.

 

Jeg har en

public string navigate;

Gjennom en del koder blir skal navigate bli satt til locationen på fila:

OFD.Filter = "HTML File|*.HTML";
			if (SFD.ShowDialog() == DialogResult.OK)
			{
				String lagre;
				lagre = SFD.FileName;
				FileStream Save = new FileStream(lagre, FileMode.Create, FileAccess.Write);
				StreamWriter skriv = new StreamWriter(Save);
				skriv.Write(txtHTML.Text);
				navigate = SFD.FileName;
				skriv.Close();
				Save.Close();
			}

Jeg har også prøvd å bruke

navigate = lagre;

Men dette fungerer heller ikke. Har sett med en tekstboks om det skjer noe med stringen, og det gjør det ikke, den er tom, selvom den burde ha skiftet til filnavnet på HTML-fila.

Noen som vet hvorfor?

 

 

Et annet lite problem jeg har, er hvordan man kan bruke gåsetegn ("") inni en string.

Lenke til kommentar
Videoannonse
Annonse
Jeg lager et lite program for å teste en del funksjoner, der jeg har to forms. Den ene er en form der du skriver inn HTML-kode, den andre er en form som bare inneholder en webbrowser og en oppdateringsknapp. Programmet mitt lagrer en HTML-fil, som webbrowseren skal laste. Dette fungerte fint når jeg hadde bare en form, men nå, når jeg har 2, oppstår det et problem.

 

Jeg har en

public string navigate;

Gjennom en del koder blir skal navigate bli satt til locationen på fila:

OFD.Filter = "HTML File|*.HTML";
			if (SFD.ShowDialog() == DialogResult.OK)
			{
				String lagre;
				lagre = SFD.FileName;
				FileStream Save = new FileStream(lagre, FileMode.Create, FileAccess.Write);
				StreamWriter skriv = new StreamWriter(Save);
				skriv.Write(txtHTML.Text);
				navigate = SFD.FileName;
				skriv.Close();
				Save.Close();
			}

Jeg har også prøvd å bruke

navigate = lagre;

Men dette fungerer heller ikke. Har sett med en tekstboks om det skjer noe med stringen, og det gjør det ikke, den er tom, selvom den burde ha skiftet til filnavnet på HTML-fila.

Noen som vet hvorfor?

 

 

Et annet lite problem jeg har, er hvordan man kan bruke gåsetegn ("") inni en string.

Hvorfor åpner du en filestream?

StreamWriter sw = new StreamWriter(string path);

Du trenger ikke å ha en stream der.

 

Men tilbake til "navigate". Er denne definer i samme form som denne koden?

Endret av Manfred
Lenke til kommentar

i VB må man vel skrive """ og ikke "\""?

 

Har du prøvd å debugge programmet?

Å sette ut kontroller og slikt for å sjekke innholdet er håpløst.

Velg linjen der det står "navigate = SDF.Filename" og trykk F9

Start programmet, og når Visual Studio da bremser på den linje, trykker du F10 én gang.

Da vil du set at den har endret verdien i variabler.

Da blir jobben din å finne ut når verdien blir resatt ved å trykke F10 (step over) og F11(step into) gjennom koden til du ser at verdien i den blir endret.

Eventuelt kan du sette en watcher på variablen, men jeg tror det er bedre å ta én ting av gangen.

Lenke til kommentar

Feilen var når variablen skulle gå fra form1 til form2.

Den blir da til Null. Vet ikke hvordan jeg skal laste variablen på riktig måte, nå er det sånn:

		private void button1_Click(object sender, EventArgs e)
	{
		Form1 form1 = new Form1();
		wb.Navigate(form1.navigate);
	}

 

Prøvde å lage en ny instance av Form1 i global-variabel-seksjonen, men da fikk jeg et error.

Lenke til kommentar

Husk at public variabler ikke følger med fra en instans til en annen.

 

Istedet for public variabler, bruker man properties. Dette fordi at programmet skal kontrollere innholdet, og ikke bare brukeren /andre programmerere. Det er rett og slett god programmeringsskikk.

 

en property ser slik ut:

public [data typen til propertien] [navn]
{
 get
 {
  // Dette er en funksjon som skal returnere en verdi
  // f.eks.
  return navigate
 }
 set
 {
// Denne funksjonen setter verdien
// den nye verdien ligger i nøkkelordet value
// f.eks.
navigate = value;
 }
}

Det er ikke nødvendig med både get og set, hvis du vil ha en read only variabel, skriver du ingen set funksjon, write only, ingen get etc.

Lenke til kommentar

Vel, Form1 og Form2 er kun datatyper.

Disse datatypene kan ha felt, egenskaper eller funksjoner.

 

Når du instansierer et objekt av typen 'Form1' så vil ikke den automatisk dele alle feltene sine med alle andre 'Form1' instanser (med mindre feltene eller funksjonene er definert static)

 

Man definerer ofte felt som private, protectede eller internal for at f.eks. for at en instans av Form2 ikke skal gå direkte inn og endre verdien i en instans av Form1. Da bruker man properties for at Form1 instansen skal ha kontroll på verdien i feltet.

 

eksempel:

 

public static class Program
{
 // deklarer statiske variabler
 protected static Form1 m_form1;
 protected static Form2 m_form2;
 public static Form1 Form1 { get { return m_form1; } }
 public static Form2 Form2 { get { return m_form2; } }

 public static int Main()
 {
m_form1 = new Form1();
m_form2 = new Form2();
Application.Run(m_form1);
 }
}

public class Form1 : System.Windows.Forms.Form
{
 // Deklarer feltet m_navigate og propertien til dette feltet under
 protected string m_navigate;
 public string Navigate { get { return m_navigate; } set { m_navigate = value; } }
}

public class Form2 : System.Windows.Forms.Form
{
 private System.Windows.Forms.WebBrowser m_browser;
 public Form2()
 {
m_browser = new System.Windows.Forms.WebBrowser();
Controls.Add(m_browser);
 }
 public OnPerformNavigate()
 {
m_browser.Navigate(Program.Form1.Navigate);
 }
}

 

edit: Legger til at jeg ikke synes så mye om statiske variabler heller, men syntes det var den enkleste måten å forklare dette på

Endret av GeirGrusom
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...