Gå til innhold

Anbefalte innlegg

Skrevet

Er det noen som kan hjelpe meg med koden til dette?

 

Skal ha to tekstbokser og en submit-knapp. Én string skrives inn i hver tekstboks, og sendes inn til programmet når du trykker på submit-knappen, og lagres som to stringer der.

 

Virker enkelt, men jeg har ikke erfaring.

 

På forhånd takk,

DarkLightA

Videoannonse
Annonse
Skrevet (endret)

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
Skrevet (endret)

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
Skrevet

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.

Skrevet

Hva tenker du på? Vil du at et program du starter igjennom System.Diagnostics.Process skal skrive ut til en tekstboks? Eller vil du at når du kaller WriteLine i ditt program, så skal resultatet dukke opp i en tekstboks?

Skrevet

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

Skrevet

Og så må du ha et sted å skrive koden ut.

Enten må du skrive kode for å skrive rett på formen eller legge inn kontroller slik at du får gjort det.

Eventuelt kan du lage en Console applikasjon, og legge til en Form der, og så skrive til consolen.

Skrevet

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());
}

Skrevet

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?

Skrevet (endret)

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

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