Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2019, 10:29   #1
Ищущий1
Пользователь
 
Регистрация: 11.03.2018
Сообщений: 19
По умолчанию обратиться из dll к открытой форме

Я из другого языка и что-то не пойму по уровню доступа.

У меня форма запускается из DLL. Но обратиться к ней для обновления данных уже не получается.

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace gcw_dll
{
    public static class Class1
    {
        [System.Reflection.Obfuscation(Feature = "DllExport")]
        public static int testik(int xx, int yy)
        {
            return xx + yy+1;
        }

        [System.Reflection.Obfuscation(Feature = "DllExport")]
        public static void init()
        {
            Form1 MyFrm = new Form1();
            MyFrm.ShowDialog(); // открытие формы
        }

        [System.Reflection.Obfuscation(Feature = "DllExport")]
        public static void newdata(double data1)
        {
            // пытаюсь изменить данные на форме
            Form1.label1.text = Convert.ToString(data1);
        }
    }
    
}
Была ошибка:
CS0122 'Form1.label1" недоступен из-за его уровня защиты.

Я зашел в Form1.Designer.cs и вместо:
private System.Windows.Forms.Label label1;
сделал
public System.Windows.Forms.Label label1;

теперь ошибка:
CS0120 Для не статического поля, метода или свойства "Form1.label1" требуется ссылка на объект.

Если добавить к public еще и static становится еще больше ошибок.
Чувствую не так это решается. Но не пойму как?
Ищущий1 вне форума Ответить с цитированием
Старый 28.07.2019, 12:05   #2
Ищущий1
Пользователь
 
Регистрация: 11.03.2018
Сообщений: 19
По умолчанию

Здесь вообще форум живой? :-D
Ищущий1 вне форума Ответить с цитированием
Старый 28.07.2019, 12:21   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Вы форум с чатом не перепутали? Возвращайте взад все и пишите сеттер.
p51x вне форума Ответить с цитированием
Старый 28.07.2019, 12:47   #4
Ищущий1
Пользователь
 
Регистрация: 11.03.2018
Сообщений: 19
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вы форум с чатом не перепутали? Возвращайте взад все и пишите сеттер.
Спасибо!
Я как бы уже понял что нужно геттеры сеттеры юзать. Но один черт не работает!

Код:
(...)
        private void Button1_Click(object sender, EventArgs e)
        {
            label1.Text = "нажата";
        }
        public static void getLabel(string text)
        {
            label1.text = text;
            //Console.WriteLine("Hello World "+text);
        }

        private void Label1_Click(object sender, EventArgs e)
        {
            label1.Text = "нажата лейбл";
        }
(...)
На строку вызова label1.text ошибка
CS0120 Для не статического поля, метода или свойства "Form1.label1" требуется ссылка на объект.


нашел пример перецитируемый на нескольких сайтах:
Код:
public TextBox getTextBox()
        {
            return textBox1;
        }
Но еще больше больше вопросов. Как это потом юзать не понятно. Переписываю на
Код:
public Label getLabel()
        {
            return label1;
        }
И один хрен ошибка CS0120 Для не статического поля, метода или свойства "Form1.label1" требуется ссылка на объект.
Какого надо то??
Ищущий1 вне форума Ответить с цитированием
Старый 28.07.2019, 13:29   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Надо в конструкторе формы создать объект label и инициализировать это поле им.
p51x вне форума Ответить с цитированием
Старый 28.07.2019, 13:41   #6
Ищущий1
Пользователь
 
Регистрация: 11.03.2018
Сообщений: 19
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Надо в конструкторе формы создать объект label и инициализировать это поле им.
Объект конечно создан (label1).
Не понял, что значит "инициализировать это поле им"?
Ищущий1 вне форума Ответить с цитированием
Старый 28.07.2019, 13:49   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Показуйте где он создан
p51x вне форума Ответить с цитированием
Старый 28.07.2019, 14:08   #8
Ищущий1
Пользователь
 
Регистрация: 11.03.2018
Сообщений: 19
По умолчанию

Код:
 partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        
        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.label1 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(207, 262);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 0;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.Button1_Click);
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(218, 199);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(31, 13);
            this.label1.TabIndex = 1;
            this.label1.Text = "0000";
            this.label1.Click += new System.EventHandler(this.Label1_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(532, 309);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.Button button1;
        public System.Windows.Forms.Label label1;
    }
Ищущий1 вне форума Ответить с цитированием
Старый 28.07.2019, 14:11   #9
Ищущий1
Пользователь
 
Регистрация: 11.03.2018
Сообщений: 19
По умолчанию

public его сделал я. Раньше private был.
так не показывает ошибки при таком геттере
Код:
public void getLabel(string text)
        {
            label1.Text=text;
        }
Но любой вызов такого метода сразу ошибка CS0120 Для не статического поля, метода или свойства "Form1.getLabel()" требуется ссылка на объект.
Ищущий1 вне форума Ответить с цитированием
Старый 28.07.2019, 14:12   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Почеу оно паблик до сих пор? Вы делали геттер в классе форм1?
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обратиться к компоненту на форме? AlkaloiD Общие вопросы по Java, Java SE, Kotlin 10 10.04.2011 21:43
Как обратиться к уже созданным на форме label'ам в цикле? bemm Общие вопросы .NET 5 21.03.2011 17:44
обратиться к label на форме borik120 Windows Forms 8 16.09.2010 22:33
Как обратиться к активной форме? Dimon88 Помощь студентам 4 18.10.2008 00:03
как обратиться к невидемой форме Scorpeon Общие вопросы Delphi 3 29.06.2007 16:16