Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] 'textBox1' does not exist in the current context

Pagina: 1
Acties:

  • dhs
  • Registratie: Januari 2010
  • Laatst online: 22-10-2024
Ik ben bezig met een simpele applicatie maar blijf problemen hebben met het gebruiken van Form controls. Als ik de gemaakte textBox1 op mijn form wil aanroepen vanuit Program.cs (static void main) krijg ik de volgende foutmelding:

The name 'textBox1' does not exist in the current context

Dit moet toch gewoon mogelijk zijn, wat doe ik fout?

  • Afvalzak
  • Registratie: Oktober 2008
  • Laatst online: 31-08 12:02

Afvalzak

Zet jij mij even buiten?

Last.fm | Code Talks


  • dhs
  • Registratie: Januari 2010
  • Laatst online: 22-10-2024
Ja al gegoogled maar de link die jij post gaat om een aspx project. Die (mogelijke) oplossing die daar wordt geboden is dus niet op mijn project van toepassing.

  • Cor453
  • Registratie: Mei 2011
  • Laatst online: 30-10 14:42
Logisch dat dit niet kan. In de static void main is dit allemaal nog niet bekend bij de runtime. Pas na de call op InitializeComponent in je Form1.cs (wat standaard is als je in Visual Studio werkt) kun je je form items aanroepen zoals jij wilt.

  • dhs
  • Registratie: Januari 2010
  • Laatst online: 22-10-2024
Dan zou het in de static void main toch na Application.Run(new Form1()); (wat vs er standaard neer zet) mogelijk moeten zijn?

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:13
Je geeft weining informatie dus ik doe een aanname: waarschijnlijk is textBox1 private in Form1.cs en daardoor niet bereikbaar vanuit je static void main.
Maar als dit al fout gaat zou ik je aanraden om even een basiscursusje te doen

[ Voor 23% gewijzigd door sig69 op 13-05-2013 22:52 ]

Roomba E5 te koop


  • dhs
  • Registratie: Januari 2010
  • Laatst online: 22-10-2024
sig69 schreef op maandag 13 mei 2013 @ 22:50:
Je geeft weining informatie dus ik doe een aanname: waarschijnlijk is textBox1 private in Form1.cs en daardoor niet bereikbaar vanuit je static void main
Hij is standaard inderdaad private, maar het public maken helpt niet.

  • dhs
  • Registratie: Januari 2010
  • Laatst online: 22-10-2024
sig69 schreef op maandag 13 mei 2013 @ 22:50:
Je geeft weining informatie dus ik doe een aanname: waarschijnlijk is textBox1 private in Form1.cs en daardoor niet bereikbaar vanuit je static void main.
Maar als dit al fout gaat zou ik je aanraden om even een basiscursusje te doen
Als we zo gaan beginnen raad ik jou ook aan meteen die cursus te doen want je weet kennelijk ook niet wat het probleem is.

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:13
Niet zo he! Je plaatst 0 code dus voor ons is het gissen wat je aan het doen bent...

Roomba E5 te koop


  • Cor453
  • Registratie: Mei 2011
  • Laatst online: 30-10 14:42
Zorg nu eerst eens dat het klopt wat je wilt doen. Dus code bedoeld voor die textbox gewoon in je form zetten. En nee, na application.run werkt dat zeker niet zomaar: je error zegt het al. Je referentie bestaat niet in de huidige context. Jij zit in static void main niet op het level van je textbox.

Ik zou trouwens niet al te boos doen tegen mensen die je gewoon willen helpen.

Edit:

Maar omdat je zo aandringt heb ik VS2012 even aangeslingerd om wat dingen voor je op te zoeken. Dit heb ik gedaan:
- VS2012 starten
- Nieuw project maken, wel Windows Forms. Framework versie zoek je zelf maar uit.
- Er worden dan een aantal dingen gedaan, je krijgt namelijk direct een form te zien. Als je daar een textBox op zet, kun je in principe (ja, het kan anders) ALLEEN in de class Form1 (die zich in Form1.cs bevindt) aanroepen.
Als je naar de code van je form wilt doe je gewoon rechtsklik op het form, en dan View Code.

Daar staat dan iets als dit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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();
        }
    }
}


Als ik iets wil doen met die textbox, dan moet ik sowieso VOORBIJ de InitializeComponent call zijn, whatever classes ik daarvoor nog call. Form calls moeten NA InitializeComponent();

In principe kan ik daarna gewoon alles doen wat ik wil, ook icm bijvoorbeeld events (zie http://bit.ly/17mFJdg voor meer info)

Voor wat extra info: Expand Form1 eens en open Form1.Designer.cs dan, en doe 's een Ctrl+F'je op InitializeComponent... daar staat een functie die aan de hand van code gewoon jouw form opbouwt.

Dus eerst Init, daarna aanroepen. Anders krijg je inderdaad een error.

[ Voor 68% gewijzigd door Cor453 op 13-05-2013 23:03 ]


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Bij mij werkt public maken van die textbox in Form1.Designer.cs en dan deze code in main:
C#:
1
2
3
Form1 form = new Form1();
form.textBox1.Text = "Hello World";
Application.Run(form);

  • Cor453
  • Registratie: Mei 2011
  • Laatst online: 30-10 14:42
Daos schreef op maandag 13 mei 2013 @ 23:04:
Bij mij werkt public maken van die textbox in Form1.Designer.cs en dan deze code in main:
C#:
1
2
3
Form1 form = new Form1();
form.textBox1.Text = "Hello World";
Application.Run(form);
Dat kan natuurlijk ook, maar ik deed de recht-door-zee manier vanwege het (nog steeds niet helemaal duidelijke) niveau van de vraag.

Wat jij trouwens doet in je code is form attributes en members aanpassen nog voordat je de runtime de kans geeft een schone, net geinstantieerde versie in te laden. Ik heb namelijk een iets andere code staan:

code:
1
2
3
4
5
6
static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }


More or less the same, alleen jij gaat al dingen op je form aanpassen voordat je de applicatie 'm laat traversen. Ik doe het (meestal) erna in bijv. Form1.cs, meestal omdat VS dat aan mij geeft.

[ Voor 41% gewijzigd door Cor453 op 13-05-2013 23:09 ]


  • dhs
  • Registratie: Januari 2010
  • Laatst online: 22-10-2024
Ik snap dat je pas na de initializecomponent iets met de textbox kan doen. Maar ik wil iets met de textbox doen vanuit program.cs en niet form.cs, daar gaat het fout. De manier van Daos lijkt te werken maar ik vraag me af wat nou precies de "juiste" manier is.

  • Cor453
  • Registratie: Mei 2011
  • Laatst online: 30-10 14:42
Ja oke, maar hoezo wil je dat? Wat is je doel, en waarom moet het op Program.cs en niet in Form.cs?

  • dhs
  • Registratie: Januari 2010
  • Laatst online: 22-10-2024
In de program.cs zit momenteel de logica die een async tcp server start. Het doel is om de statusupdates naar de textbox de schrijven. Bouw ik dan een functie in form1 daarvoor en roep ik die aan vanuit program.cs?

  • Cor453
  • Registratie: Mei 2011
  • Laatst online: 30-10 14:42
Dat kan, je kunt ook zeggen wat Daos doet: Ik heb een simpel form en ik change mijn textBox waarde elke keer bij een event, bijv. als je nieuwe data available hebt op je TCP kanaal.

Ik weet alleen niet of dat kan. Ik weet nl. niet of de runtime de Program.cs verlaat op het moment dat je Application.Run doet. Misschien weet iemand dat, ik nu even niet en ook niet echt de tijd voor het op te zoeken.

De manier van Daos is denk ik the best way to go. Is wel veel vogelen alles bij elkaar op deze manier denk ik. Maar als je erop staat...

Edit: toch maar even getest, en je zou nog code uit kunnen voeren NA Application.Run.

[ Voor 7% gewijzigd door Cor453 op 13-05-2013 23:15 ]


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:13
Ik zou op een of andere manier zorgen dat je de referentie naar de tcp server in je form krijgt (via de constructor, of een property setter, of wat dan ook), daar een eventhandler aan je tcp server hangen en in de event handler de textbox tekst zetten. Kijk dan meteen even naar MSDN: How to: Make Thread-Safe Calls to Windows Forms Controls (weet niet zeker of het nodig is, hangt er vanaf hoe je tcp server in elkaar steekd)

[ Voor 9% gewijzigd door sig69 op 13-05-2013 23:23 ]

Roomba E5 te koop


  • Cor453
  • Registratie: Mei 2011
  • Laatst online: 30-10 14:42
sig69 schreef op maandag 13 mei 2013 @ 23:22:
Ik zou op een of andere manier zorgen dat je de referentie naar de tcp server in je form krijgt (via de constructor, of een property setter, of wat dan ook), daar een eventhandler aan je tcp server hangen en in de event handler de textbox tekst zetten. Kijk dan meteen even naar MSDN: How to: Make Thread-Safe Calls to Windows Forms Controls (weet niet zeker of het nodig is, hangt er vanaf hoe je tcp server in elkaar steekd)
_/-\o_ Ik had het niet beter kunnen zeggen. Soms zijn er van die programmeerdingen die je dan wel weet, maar net niet kan uitleggen of er een linkje bij vinden... :+
Pagina: 1