Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse

static void Main()
{
Form disp = new Form()
{
	Text = "Hello World!",
	Size = new System.Drawing.Size(178, 100),
	FormBorderStyle = FormBorderStyle.FixedDialog,
	MaximizeBox = false
};
TextBox box1 = new TextBox()
{
	Bounds = new System.Drawing.Rectangle(8, 8, 150, 0)
}, box2 = new TextBox()
{
	Bounds = new System.Drawing.Rectangle(8, 30, 150, 0)
};
var submit = new Button()
{
	Text = "Submit!",
	Bounds = new System.Drawing.Rectangle(8, 50, 150, 20)
};
submit.Click += (sender, e) => Perform(box1.Text, box2.Text);
disp.Controls.AddRange(new Control[] { box1, box2, submit });
disp.ShowDialog();
}

static void Perform(string val1, string val2)
{
}

 

Hvis du bruker GUI designeren er det litt enklere dog. Bare sett ut kontrollene slik du vil ha dem, kall dem det du vil, og dobbeltklikk på Submit knappen. Da får du opp kode-editoren for Click eventet til knappen.

Endret av GeirGrusom
Lenke til kommentar

static void Main()
{
Form disp = new Form()
{
	Text = "Hello World!",
	Size = new System.Drawing.Size(178, 100),
	FormBorderStyle = FormBorderStyle.FixedDialog,
	MaximizeBox = false
};
TextBox box1 = new TextBox()
{
	Bounds = new System.Drawing.Rectangle(8, 8, 150, 0)
}, box2 = new TextBox()
{
	Bounds = new System.Drawing.Rectangle(8, 30, 150, 0)
};
var submit = new Button()
{
	Text = "Submit!",
	Bounds = new System.Drawing.Rectangle(8, 50, 150, 20)
};
submit.Click += (sender, e) => Perform(box1.Text, box2.Text);
disp.Controls.AddRange(new Control[] { box1, box2, submit });
disp.ShowDialog();
}

static void Perform(string val1, string val2)
{
}

 

Hvis du bruker GUI designeren er det litt enklere dog. Bare sett ut kontrollene slik du vil ha dem, kall dem det du vil, og dobbeltklikk på Submit knappen. Da får du opp kode-editoren for Click eventet til knappen.

WOW! du ække snau :-D

Du kliner til med program teknisk vindus design og lambda expressions. hehe....

 

@Trådstarter: Hva kan du fra før av programmering? Har du tidligere erfaring? Har du masse erfaring, men ikke kjenner C# så er eksemplet til GG veldig bra. Faktisk så bra at jeg nesten må applaudere ;-) Men er du helt ukjennt med alt dette så er den raske veien slik som GG også påpeker. Tegn vinduet i designeren, dobbeltklikk på knapppen og legg inn koden:

 

MinString1 = txtTextBox1.Text;

MinString2 = txtTextBox2.Text;

 

Legg merke til at txtTextBox1 og txtTextBox2 er tekst kontrollene du har laget i vinduet og at Text er selve propertien som holder på det brukeren haar tastet.

 

edit: Uhm, glemte jo å si at du må definere disse to strengene også da, men du visste kansje det allerede....

Endret av HDSoftware
Lenke til kommentar

Nei, faktisk har jeg ikke erfaring. Jeg kan bare matte :D

 

Det jeg kan er å lage en Windows Form Application i Visual C#, og deretter dobbelklikke submit-knappen for å få inn koden til denne inn til programmet. Alt jeg trenger er koden for at når button1_click eller hva det nå er blir fullført, så sender den inn det som står i textbox1 og 2 til Main(), og lagre det som stringer.

 

Jeg har ingen erfaring med form applications fra før.

 

----------

 

Og ett til spørsmål. Hvordan kan jeg bruke .WriteLine til å skrive tekst inni en form application?

 

----------

 

Takk for svar.

Lenke til kommentar

Vent...

 

  1. Jeg åpner Visual C# Express 2010.
  2. Jeg drar to teksbokser og en knapp inn i formen
  3. Jeg har denne koden:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }
     
    private void button1_Click(object sender, EventArgs e)
    {
     
    }
    }
    }
     
     

 

Kan du vise meg akkuratt hvordan den koden skal være for å få valuene i 'textbox1' og 'textbox2' til 'Form1()' ved trykk på 'button1'?

Lenke til kommentar

File->New Project->Console Application

Høyreklikk på References i Project Explorer->Add Reference

Legg til System.Windows.Forms

 

Høyreklikk på prosjektet->Add New Item->Form

 

Sett opp formen som du vil (legg til Console.WriteLine koden din i button1_Click)

private sub button1_Click(object sender, EventArgs e)
{
 Console.WriteLine(textbox1.Text);
}

 

Åpne Program.cs

 

Legg til

System.Windows.Forms.Application.Run(new Form1());

slik at det står innenfor Main()

 

static void Main()
{
 System.Windows.Forms.Application.Run(new Form1());
}

Lenke til kommentar

Tusen takk! Det hjalp veldig!

 

Har et lite problem da. Har kommet til dette:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PrimeEye
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }

       private void button1_Click(object sender, EventArgs e)
       {
           string[] returner = new string[2];
           returner[0] = textBox1.Text;
           returner[1] = textBox2.Text;
       }
   }
}

 

Hvordan får jeg til å sende 'returner' til Main?

Lenke til kommentar

Du kan ikke returnere som sådan, siden du ikke får Application.Run til å returnere noe. Den bare starter GUI loopen på gjeldende tråd og viser formen som sendes inn.

 

Den vanlige måten å sende noe oppover i dependency-grafen i winforms er i form av events.

 

public partial class Form1 : Form
{
   // Event som kjører når vi er klar til å avlevere noe
   // Tilordne en tom delegate i bunn gjør at vi slipper å sjekke mot null, og slipper å gjøre dum thread-safety boilerplate rundt hvert eneste kall til den.
   public event Action<string[]> ItemReady = (x) => { };

   public Form1()
   {
       InitializeComponent();
   }

   private void button1_Click(object sender, EventArgs e)
   {
       string[] returner = new string[2];
       returner[0] = textBox1.Text;
       returner[1] = textBox2.Text;

       ItemReady(returner);
   }
}

 

Klassen med main-metoden ser da noe f.eks sånt ut om den skal ta noe tilbake:

static class Program
{
   static void Main()
   {
       var mainForm = new Form1();

       // Når mainform er klar til å avlevere noe skal vi kjøre ItemReturned
       // Kan ta hvilke som helst delegate/metode som er parametrisk lik Action<string>
mainForm.ItemReady += ItemReturned ; 

Application.Run(mainForm);
   }

   static void ItemReturned(string[] values)
   {
       Console.WriteLine("Returnert...");
   }
}

Endret av MailMan13
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å
×
×
  • Opprett ny...