Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 0 / 1
Регистрация: 02.02.2015
Сообщений: 79

Подскажите почему не могу вызвать метод экземпляра, добавленный в класс, наследованный от Button?

19.03.2021, 06:36. Показов 1351. Ответов 5

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
MainForm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech.Synthesis;
 
namespace KeyApp
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            InitializeKeyForm();
        }
 
        public void InitializeKeyForm()
        {
            KeyClass keyForm1 = new KeyClass();
            this.Controls.Add(this.keyForm1);            
            this.keyForm1.Click += new System.EventHandler(this.keyForm1_Click);            
        }        
 
        private void MainForm_KeyPress(object sender, KeyPressEventArgs e)
        {
            keyForm1.Key_press1();//sender, e);
            
            //button1.Text = mainRow[Key.newKey];
 
            //MessageBox.Show("");
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Emit;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace KeyApp
{
    static class Program
    {       
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
    }
 
    public class KeyClass : System.Windows.Forms.Button
    {        
        public KeyClass()
        {
            this.Font = new System.Drawing.Font("Arial", 30F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
            this.Location = new System.Drawing.Point(100, 100);
            this.MaximumSize = new System.Drawing.Size(100, 100);
            this.MinimumSize = new System.Drawing.Size(20, 20);
            this.Name = "Key";
            this.Size = new System.Drawing.Size(50, 50);
            this.TabIndex = 0;
            //this.Visible = false;      
            this.random = new Random();
            //string[] mainRow = { "ф", "ы", "в", "а", "п", "р", "о", "л", "д", "ж", "э" };
            currentKey = random.Next(mainRow.Length);
            this.Text = mainRow[currentKey];
        }     
 
        public string[] alphavit = {"а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф",
                                "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я"};
        public string[] mainRow = { "ф", "ы", "в", "а", "п", "р", "о", "л", "д", "ж", "э" };
        public Int32 oldKey = 0;
        public Int32 currentKey = 0;
        public Random random;        
 
        public void Key_press1()//object sender, KeyPressEventArgs e)
        {
            /*if (this.Text == e.KeyChar.ToString())
            {
                int num = this.random.Next(this.mainRow.Length);
                this.Text = this.mainRow[num];
            }*/
        }
    }
}
Выдаёт ошибку
ОшибкаCS1061"Button" не содержит определения "Key_press1", и не удалось найти доступный метод расширения "Key_press1", принимающий тип "Button" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).

Методы поля наследованные отлично вызываются, а мой добавленный как будто не существует.
Почему компилятор воспринимает keyForm1 как Button?

Они же в одном намспайсе и должны видеть друг друга.
Сначала подумал что наследование не работает из-за того, что Button не публичный, но он public
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.03.2021, 06:36
Ответы с готовыми решениями:

Создать шаблонный класс и наследованный от этого класса метод
Создать шаблонный класс и наследованный от этого класса метод(естественно шаблонный), реализовать его в int main(){} через INT и Double.

Как создать событие или вызвать метод при нажатии на экземпляр объекта (Button)?
List<Button> but = new List<Button>(); private void button1_Click(object sender, EventArgs e) { Button p...

Почему при вызове метода у экземпляра класса он сначала ищет у экземпляра
Всем привет, после прочтения Лутца про ООП появился такой вопрос почему при вызове метода у экземпляра класса он сначала ищет у экземпляра,...

5
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,231
19.03.2021, 06:57
Цитата Сообщение от releyshic Посмотреть сообщение
KeyClass keyForm1 = new KeyClass();
Переменная keyForm1 - локальная переменная, объявленная в методе, она не будет видна в других методах.
Сделайте ее членом формы, и инициализируйте:
C#
1
2
3
4
5
6
7
private KeyClass keyForm1;
public void InitializeKeyForm()
        {
            keyForm1 = new KeyClass();
            this.Controls.Add(this.keyForm1);            
            this.keyForm1.Click += new System.EventHandler(this.keyForm1_Click);            
        }
0
1 / 0 / 1
Регистрация: 02.02.2015
Сообщений: 79
19.03.2021, 07:49  [ТС]
Так и думал, что чтото простое. Я почемуто думал что на экземпляры объектов области видимости не распространяются
Но не помогло, ругается на "keyForm1"
CS0229 Неоднозначность между "MainForm.keyForm1" и "MainForm.keyForm1" KeyApp

Может весь проект приложить?
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,231
19.03.2021, 08:50
Цитата Сообщение от releyshic Посмотреть сообщение
Может весь проект приложить?
Прикладывайте.

Цитата Сообщение от releyshic Посмотреть сообщение
Так и думал, что чтото простое.
Дело в том, что ваше описание ошибки не соответствует предоставленному коду.
0
1 / 0 / 1
Регистрация: 02.02.2015
Сообщений: 79
19.03.2021, 10:28  [ТС]
Прикладываю
Вложения
Тип файла: rar KeyApp.rar (39.2 Кб, 3 просмотров)
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
19.03.2021, 13:02
releyshic,
C#
1
2
           KeyClass keyForm1 = new KeyClass();
            this.Controls.Add(this.keyForm1);
Причем тут keyForm1 и this.keyForm1?
Что там в this.keyForm1?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.03.2021, 13:02
Помогаю со студенческими работами здесь

Не могу вызвать метод
Ребят, приветствую! Хочу реализовать систему вывода комментариев к постам деревом. Вот первый кусок кода, находящийся в классе Post....

Не могу вызвать метод
#include "pch.h" #include <iostream> #include <string> #include <fstream> using namespace std; class reis { public: int...

Progress Button, как вызвать метод, а после закончить Progress?
Есть кнопка с прогрессом, по ее клику вызывается это: private void sendProgress (final LinearProgressButton button){ ...

Dll не могу вызвать метод
Решил попробывать написать юнит тест на Visual Studio 2015. Пишу по этой линке: https://msdn.microsoft.com/en-us/library/hh598953.aspx ...

Почему не получается вызвать метод rowCount() в PDO?
$phone = "11111"; $dbhost = "127.0.0.1"; $login = "red"; $email = "mail@mail.ru"; $dbuser = "dbuser"; $dbpass = "password"; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru