Vinnaren i pepparkakshustävlingen!
2017-08-06, 10:45
  #1
Medlem
MataRengis avatar
Jag använder WinForms i C# under VisualStudio 2017 och har fått ett problem som jag inte kan komma vidare. Jag vill komma åt en textbox-innehåll i en metod men kompilatorn klagar och jag vet inte hur den vill ha det för att fungera.

Här är ett program som demonstrerar mitt problem.
Det finns en knapp som jag kallat buttonTest.
Det finns en textbox som jag kallat textBoxTest.
Jag har plockat bort allt övrigt som inte har med problemet att göra men så att felet uppenbarar sej:

Kod:
using System;
using System.Windows.Forms;

namespace TestApp
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }

        private void buttonTest_Click(object sender, EventArgs e)
        {
            TextToUpper();

            textBoxTest.Text.ToUpper(); // This works nicely
        }

        private static string TextToUpper()
        {
            return textBoxTest.Text.ToUpper(); // Gives compilation error CS0120
        }
    }
}
Nåt verkar fattas.

Error CS0120 betyder: "An object reference is required for the non-static field, method, or property 'FormMain.textBoxTest'". Men vad är det för object reference han vill ha?

Jag har försökt med
TestApp.textBoxTest.Text.ToUpper(); Fungerar inte.
FormMain.textBoxTest.Text.ToUpper(); Fungerar inte.
Form.textBoxTest.Text.ToUpper(); Fungerar inte.

Vad ser ni som inte jag ser? Vad kan jag göra som jag ännu inte fattat?
Citera
2017-08-06, 11:24
  #2
Medlem
Ta bort static från TextToUpper, då textBoxTest kräver en instans av FormMain.
Static variabler och metoder är definerade på klass nivå delas över alla instanser av en klass, och i detta läge så känner metoden inte till din variabel textBoxTest då den är definierad för en instans av klassen FormMain

TextToUpper bör se ut på följande sätt:

Kod:
private string TextToUpper()
{
       return 
textBoxTest.Text.ToUpper(); // Gives compilation error CS0120

Citera
2017-08-06, 11:46
  #3
Medlem
MataRengis avatar
Citat:
Ursprungligen postat av Froddan
Ta bort static från TextToUpper, då textBoxTest kräver en instans av FormMain.
Static variabler och metoder är definerade på klass nivå delas över alla instanser av en klass, och i detta läge så känner metoden inte till din variabel textBoxTest då den är definierad för en instans av klassen FormMain

TextToUpper bör se ut på följande sätt:

Kod:
private string TextToUpper()
{
       return 
textBoxTest.Text.ToUpper(); // Gives compilation error CS0120


Snyggt! Visst, så ska det vara!
Och jag minns att jag haft liknande problem tidigare som jag bara gett upp på. Och detta var alltså lösningen. Tack!

Inga kompileringsfel längre, och inget runtimefel.
Men det hände inte det jag trodde skulle hända.
Jag trodde att dom bokstäverna jag lagt in i textBoxText skulle bli stora bokstäver. Men så blev det inte. Varken om jag hade det i metoden eller om jag hade det som innan.

Måste jag också göra en update eller refresh eller nåt?
Citera
2017-08-06, 11:58
  #4
Medlem
Citat:
Ursprungligen postat av MataRengi
Snyggt! Visst, så ska det vara!
Och jag minns att jag haft liknande problem tidigare som jag bara gett upp på. Och detta var alltså lösningen. Tack!

Inga kompileringsfel längre, och inget runtimefel.
Men det hände inte det jag trodde skulle hända.
Jag trodde att dom bokstäverna jag lagt in i textBoxText skulle bli stora bokstäver. Men så blev det inte. Varken om jag hade det i metoden eller om jag hade det som innan.

Måste jag också göra en update eller refresh eller nåt?


Det du gör där är att plocka ut texten som finns i rutan och gör det till stora bokstäver. Om du vill att innehållet i textrutan ska bli stora bokstäver får du sedan säga att innehållet i textrutan ska bli det nya värdet.

textBoxTest.Text = textBoxTest.Text.ToUpper();
Citera
2017-08-21, 10:44
  #5
Medlem
MataRengis avatar
Tack, Froddan, nu fungerar mitt program som en smäck!
Tack även Gottisborgen för korrektion av mitt feltänk, uppskattat!
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback