For this case, where you want to get a Control of a Form and are receiving this error, then I have a little bypass for you.
Go to your Program.cs and change
Application.Run(new Form1());
to
public static Form1 form1 = new Form1(); // Place this var out of the constructor
Application.Run(form1);
Now you can access a control with
Program.form1.<Your control>
Also: Don’t forget to set your Control-Access-Level to Public.
And yes I know, this answer does not fit to the question caller, but it fits to googlers who have this specific issue with controls.
Хочу создать статическую переменную ,которая возвращает количество строк в таблице.
Ошибка: CS0120 Для нестатического поля, метода или свойства "Person.dataGridView1" требуется ссылка на объект.
Как исправить ошибку?
public static int person_count
{
get =>dataGridView1.RowCount;
set
{
}
}
aepot♦
45.4k5 золотых знаков22 серебряных знака51 бронзовый знак
задан 21 мая 2021 в 11:51
3
Это происходит из-за того, что переменная person_count
статическая, а dataGridView1
не статический, одним из возможных способов решения является — сделать переменную не статической, то есть
было:public static int person_count
.
стало:public int person_count
.
Либо же делать dataGridView1
статическим, если переменная необходима статической.
ответ дан 21 мая 2021 в 12:30
xantinxantin
19511 бронзовых знаков
class Form1 : Form //основная форма
{
//dataGridView1 в дизайнере
button_click_createform(sender, arg)
{
Form2 f2 = new Form2(dataGridView1);
}
}
class Form2 : Form //второстепенная форма
{
DataGridView ref_dataGridView;
int person_count => ref_dataGridView.RowCount; //вот тут нужные вам данные
public Form2(DataGridView dataGridView)
{
ref_dataGridView = dataGridView;
}
}
ответ дан 22 мая 2021 в 18:04
BlackmeserBlackmeser
2,0331 золотой знак9 серебряных знаков12 бронзовых знаков
person_count
сделайте не статическим:
public int person_count
{
get =>dataGridView1.RowCount;
set
{
}
}
0xdb
51.5k195 золотых знаков56 серебряных знаков233 бронзовых знака
ответ дан 28 июн 2021 в 13:12
description | title | ms.date | f1_keywords | helpviewer_keywords | ms.assetid |
---|---|---|---|---|---|
Compiler Error CS0120 |
Compiler Error CS0120 |
07/20/2015 |
CS0120 |
CS0120 |
3ff67f11-bdf9-436b-bc0c-4fa3cd1925a6 |
Compiler Error CS0120
An object reference is required for the nonstatic field, method, or property ‘member’
In order to use a non-static field, method, or property, you must first create an object instance. For more information about static methods, see Static Classes and Static Class Members. For more information about creating instances of classes, see Instance Constructors.
Example 1
The following sample generates CS0120:
// CS0120_1.cs public class MyClass { // Non-static field. public int i; // Non-static method. public void f() {} // Non-static property. int Prop { get { return 1; } } public static void Main() { i = 10; // CS0120 f(); // CS0120 int p = Prop; // CS0120 } }
To correct this error, first create an instance of the class:
// CS0120_1.cs public class MyClass { // Non-static field. public int i; // Non-static method. public void f() { } // Non-static property. int Prop { get { return 1; } } public static void Main() { var mc = new MyClass(); mc.i = 10; mc.f(); int p = mc.Prop; } }
Example 2
CS0120 will also be generated if there is a call to a non-static method from a static method, as follows:
// CS0120_2.cs // CS0120 expected using System; public class MyClass { public static void Main() { TestCall(); // CS0120 } public void TestCall() { } }
To correct this error, first create an instance of the class:
// CS0120_2.cs using System; public class MyClass { public static void Main() { var anInstanceofMyClass = new MyClass(); anInstanceofMyClass.TestCall(); } public void TestCall() { } }
Example 3
Similarly, a static method cannot call an instance method unless you explicitly give it an instance of the class, as follows:
// CS0120_3.cs using System; public class MyClass { public static void Main() { DoIt("Hello There"); // CS0120 } private void DoIt(string sText) { Console.WriteLine(sText); } }
To correct this error, you could also add the keyword static to the method definition:
// CS0120_3.cs using System; public class MyClass { public static void Main() { DoIt("Hello There"); // CS0120 } private static void DoIt(string sText) { Console.WriteLine(sText); } }
See also
- The C# type system
Flooopsik 0 / 0 / 0 Регистрация: 11.01.2020 Сообщений: 4 |
||||||||||||
1 |
||||||||||||
Для нестатического поля, метода или свойства требуется ссылка на объект11.01.2020, 21:52. Показов 13836. Ответов 3 Метки нет (Все метки)
Здравствуйте, не могу решить проблемы в программе. Список ошибок: Ошибка CS0120 Для нестатического поля, метода или свойства «MathLangParser.Parse(string)» требуется ссылка на объект.
0 |
samana 2629 / 1597 / 852 Регистрация: 23.02.2019 Сообщений: 3,876 |
||||||||
11.01.2020, 22:21 |
2 |
|||||||
Решение Вы пытаетесь вызвать обычные методы в статическом методе, так не работает.
Либо оставьте эти методы обычными, но тогда перед их вызовом нужно создать экземпляр их класса:
В вашем случае, конечно правильнее сделать методы статичными, как в первом коде.
1 |
2728 / 1644 / 870 Регистрация: 14.04.2015 Сообщений: 5,612 |
|
11.01.2020, 22:23 |
3 |
Flooopsik, во-первых, ошибка говорит о том, что нет ссылки на определенную сборку. а взять ее можно из GitHub https://github.com/ArtObr/PascalCompilator но это тоже не решит проблемы, так как исходный метод Execute в классе MathLangIntepreter не имеет параметров, а ты в него пытаешься что-то передать. что касается Parse в MathLangParser, то его беглым взглядом вообще найти не удалось, откуда ты его откопал, не известно.
1 |
Модератор 13821 / 10026 / 2670 Регистрация: 21.04.2018 Сообщений: 29,826 Записей в блоге: 2 |
|
12.01.2020, 02:24 |
4 |
Flooopsik, вы приводите текст ошибок, НО не приводите файлы и номера строк где они возникли. Вы привели коды двух методов
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
12.01.2020, 02:24 |
Помогаю со студенческими работами здесь Для нестатического поля, метода или свойства требуется ссылка на объект Для нестатического поля, метода или свойства требуется ссылка на объект Для нестатического поля, метода или свойства требуется ссылка на объект
Ошибка “Для нестатического поля, метода или свойства требуется ссылка на объект” Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 4 |
- Remove From My Forums
-
Вопрос
-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;public class A //Класс A
{
public float a; // Поле а класса А
public float b; // Поле b класса A
public A() { a = 3f; b = 2.5f; } // Конструктор без параметров
public float c //Свойство с
{
get { return a / b; } //Метод
set { c = value; } //Возвращаемое значение
}
}
public class B : A //Класс В — наследник класса А
{
public float d = 10f; // Поле d класса В
public int i;
public float c2 // Свойство с2
{
get { return a + b + d; }
set { c2 = value; }
}
static void Main(string[] args) //Начало программы
{
Console.WriteLine(«Введите число и увидите значения «);
Console.WriteLine(«1 — полей a,b,d»);
Console.WriteLine(«2 — свойств с,c2»);
B.i = Console.ReadLine();
switch (B.i) //Проверяем чему равно i
{
case 1: Console.WriteLine(«a={0} «, B.a, «b={0} «, B.b, «d={0} «, B.d); break;
case 2: Console.WriteLine(«2={0} «, B.c, «c2={0} «, B.c2); break;
default:
Console.WriteLine(«Введено неправильное значение «); break;
}
}
}
Ответы
-
Добрый день.
В языке C# разделяют динамические и статические члены класса. То что объявляете вы, например:
public class A //Класс A { public float a; // Поле а класса А }
Это объявление динамического поля. Доступ к нему вне класса может идти только через объектную переменную. Как-нибудь так:
A myObject = new A(); myObject.a = 10;
Чтобы обращаться по имени класса, необходимо член объявить как статический, например, вот так:
public class A //Класс A { public static float a; // Поле а класса А }
К такому полю можно будет обращаться через имя класса:
A.a = 10;
-
Изменено
2 декабря 2016 г. 11:05
-
Помечено в качестве ответа
Maksim MarinovMicrosoft contingent staff, Moderator
5 декабря 2016 г. 8:27
-
Изменено