Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701

TabControl выкидывает исключения

04.08.2024, 15:47. Показов 617. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день уважаемые Шарписты.
Очень хотелось бы запихать созданный метод Control_Key в отдельный класс но при обращении к textBox из главной формы Form1 выдаёт исключение

это код в классе internal class ClassControlKey : Form
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace ClientCOM
{
    internal class ClassControlKey : Form
    {
        public void Control_Key(string tab_control, byte contr, string tab_page, byte pag, string text_Box, byte symbol, KeyPressEventArgs e)
        {
            string tc = tab_control + contr;
            string tp = tab_page + pag;
            string tb = "textBox" + text_Box;
            char number = e.KeyChar;
            if (!Char.IsDigit(number) && number != 8 && number != 44 && number != 45) // цифры, клавиша BackSpace и запятая
            {
                e.Handled = true;
            }
 
            if (char.IsNumber(e.KeyChar) || ((e.KeyChar == ',') && ((((Controls[tc] as TabControl).Controls[tp] as TabPage).Controls[tb] as TextBox).Text.IndexOf(',') == -1)))
            {
                if ((((Controls[tc] as TabControl).Controls[tp] as TabPage).Controls[tb] as TextBox).Text.IndexOf(',') > 0)
                {
                    if ((((Controls[tc] as TabControl).Controls[tp] as TabPage).Controls[tb] as TextBox).Text.IndexOf(',') < (((Controls[tc] as TabControl).Controls[tp] as TabPage).Controls[tb] as TextBox).Text.Length - symbol)
                        e.Handled = true;
                }
            }
        }
    }
}
а так метод вызывается из главной формы
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
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;
using System.IO.Ports;
using System.IO;
using System.Timers;
using System.Threading;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
using System.Security.Policy;
using static System.Net.Mime.MediaTypeNames;
using Microsoft.SqlServer.Server;
 
namespace ClientCOM
{
 
    public partial class Form1 : Form
    {
ClassControlKey Control_Key = new ClassControlKey();
         public void textBoxDrive_KeyPress(object sender, KeyPressEventArgs e)
        {
            Control_Key.Control_Key("tabControl", 1, "tabPage", 1, "Drive", 1, e);
        }
    }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.08.2024, 15:47
Ответы с готовыми решениями:

пару дней назад приобрёл ноутбук . И постоянно выкидывает из игр на рабочий стол выкидывает даже когда фильм смотрю !!!
подскажите в чём проблемма

Создание TabControl в TabPage, а в этом TabControl создать RichTextBox
Нужно создать TextBox и кнопку,при нажатии на кнопку в уже созданом TabControl создаётся новая вкладка(ну TabPage)и в этой вкладке еще...

Организация собственного исключения и передача в него исходного исключения
Для обработки исключений при работе с БД я создал собственное исключение: public class SQLEntityException : ApplicationException ...

8
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18306 / 14230 / 5368
Регистрация: 17.03.2014
Сообщений: 28,903
Записей в блоге: 1
04.08.2024, 16:37
Лучший ответ Сообщение было отмечено VladimirU как решение

Решение

Цитата Сообщение от VladimirU Посмотреть сообщение
при обращении к textBox из главной формы Form1 выдаёт исключение
Правильно. Класс ClassControlKey наследуется от Form, у которого по умолчанию нет никаких элементов управления. Поэтому когда вы пытаетесь получить элемент управления по имени - Controls[tc] as TabControl - вы получаете null. Чтобы получать не null нужно чтобы код работал с экземпляром вашей формы - Form1. Например, так (это говнокод, но работать должен):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
internal class ClassControlKey
{
    public void Control_Key(Form1 form1, string tab_control, byte contr, string tab_page, byte pag, string text_Box, byte symbol, KeyPressEventArgs e)
    {
        string tc = tab_control + contr;
        string tp = tab_page + pag;
        string tb = "textBox" + text_Box;
        char number = e.KeyChar;
        if (!Char.IsDigit(number) && number != 8 && number != 44 && number != 45) // цифры, клавиша BackSpace и запятая
        {
            e.Handled = true;
        }
 
        if (char.IsNumber(e.KeyChar) || ((e.KeyChar == ',') && ((((form1.Controls[tc] as TabControl).Controls[tp] as TabPage).Controls[tb] as TextBox).Text.IndexOf(',') == -1)))
        {
            if ((((form1.Controls[tc] as TabControl).Controls[tp] as TabPage).Controls[tb] as TextBox).Text.IndexOf(',') > 0)
            {
                if ((((form1.Controls[tc] as TabControl).Controls[tp] as TabPage).Controls[tb] as TextBox).Text.IndexOf(',') < (((form1.Controls[tc] as TabControl).Controls[tp] as TabPage).Controls[tb] as TextBox).Text.Length - symbol)
                    e.Handled = true;
            }
        }
    }
}
C#
1
2
3
4
5
6
7
8
    public partial class Form1 : Form
    {
ClassControlKey Control_Key = new ClassControlKey();
         public void textBoxDrive_KeyPress(object sender, KeyPressEventArgs e)
        {
            Control_Key.Control_Key(this, "tabControl", 1, "tabPage", 1, "Drive", 1, e);
        }
    }
Цитата Сообщение от VladimirU Посмотреть сообщение
Очень хотелось бы запихать созданный метод Control_Key в отдельный класс
Зачем?
1
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701
04.08.2024, 16:50  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Зачем?
Просто код растёт и растёт огромный стал и что то в нём отыскать становиться проблемно.

Добавлено через 5 минут
OwenGlendower, Form1.Controls[tc] нет не работает при компиляции выдаёт ошибку
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка (активно) CS0120 Для нестатического поля, метода или свойства "Control.Controls" требуется ссылка на объект. ClientCOM C:\ST\ClientCOM\ClientCOM\ClassControlKe y.cs 26

Добавлено через 4 минуты
И через ссылку тоже нуль исключения
Form1 form_1 = new Form1();
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18306 / 14230 / 5368
Регистрация: 17.03.2014
Сообщений: 28,903
Записей в блоге: 1
04.08.2024, 17:29
Цитата Сообщение от VladimirU Посмотреть сообщение
Form1.Controls[tc] нет не работает при компиляции выдаёт ошибку [...] "Для нестатического поля, метода или свойства "Control.Controls" требуется ссылка на объект."
Правильно. Свойство Controls экземплярное, а вы обращаетесь к нему так как будто оно статическое.

Цитата Сообщение от VladimirU Посмотреть сообщение
И через ссылку тоже нуль исключения
В Form1 точно есть элемент управления с именем "tabControl", у которого есть закладка "tabPage" на которой расположено поле ввода "Drive"?

Цитата Сообщение от VladimirU Посмотреть сообщение
Просто код растёт и растёт огромный стал и что то в нём отыскать становиться проблемно.
Не обижайтесь, но с вашим уровнем знаний вы рискуете сделать ситуацию еще хуже и добавить баги.

Я присмотрелся более внимательно к вашему коду и понял что его можно сильно упростить:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
internal class ClassControlKey
{
    public void Control_Key(TextBox textBoxDrive, KeyPressEventArgs e, byte symbol)
    {
        char number = e.KeyChar;
        if (!Char.IsDigit(number) && number != 8 && number != 44 && number != 45) // цифры, клавиша BackSpace и запятая
        {
            e.Handled = true;
        }
 
        if (char.IsNumber(e.KeyChar) || ((e.KeyChar == ',') && textBoxDrive.Text.IndexOf(',') == -1))
        {
            if (textBoxDrive.Text.IndexOf(',') > 0)
            {
                if (textBoxDrive.Text.IndexOf(',') < (textBoxDrive.Text.Length - symbol))
                    e.Handled = true;
            }
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
public partial class Form1 : Form
{
    ClassControlKey Control_Key = new ClassControlKey();
    
    public void textBoxDrive_KeyPress(object sender, KeyPressEventArgs e)
    {
        Control_Key.Control_Key((TextBox)sender, e, 1);
    }
}
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701
04.08.2024, 17:41  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
В Form1 точно есть элемент управления с именем "tabControl", у которого есть закладка "tabPage" на которой расположено поле ввода "Drive"?
Конечно есть я не совсем уж тупой и безнадёжный. Если метод Control_Key определить в главной форме Form1 то всё без проблем работает.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18306 / 14230 / 5368
Регистрация: 17.03.2014
Сообщений: 28,903
Записей в блоге: 1
04.08.2024, 17:47
Цитата Сообщение от VladimirU Посмотреть сообщение
Конечно есть я не совсем уж тупой и безнадёжный.
Я этого не говорил.

Цитата Сообщение от VladimirU Посмотреть сообщение
Если метод Control_Key определить в главной форме Form1 то всё без проблем работает.
Хорошо. Тогда мой вариант с передачей this должен работать.
1
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701
04.08.2024, 18:16  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Хорошо. Тогда мой вариант с передачей this должен работать.
Спасибо огромное, я не внимательный не заметил в вашем примере вот это Control_Key(Form1 form1. Всё работает что подтверждает гибкость языка Шарп.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18306 / 14230 / 5368
Регистрация: 17.03.2014
Сообщений: 28,903
Записей в блоге: 1
04.08.2024, 18:23
Цитата Сообщение от VladimirU Посмотреть сообщение
я не внимательный не заметил в вашем примере вот это Control_Key(Form1 form1
А пример в посте #4 вы заметили?
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701
04.08.2024, 18:47  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
А пример в посте #4 вы заметили?
да взял на вооружение спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.08.2024, 18:47
Помогаю со студенческими работами здесь

MVVM. Если окно содержит 1 TabControl, который в себе содержит много вкладок и в каждой может быть другой TabControl с вкладками
Я сделал так: Создал UserControl, в него поместил TabControl создал вкладки, во вкладки начал помещать нужные объекты (ListView, кнопки,...

tabControl внутри tabControl!
Здравствуйте. Возникла задача сделать нечто похожее. Скрин с гитхаба: Как видите, у человека в программе(написанной где-то на делфи)...

Выкидывает из 1с
стоит сетевая версия 1с у всех сразу в 1 день на всех машинах стало выкидывать через 5-10мин работы и пишет ошибку Сигнатура проблемы: ...

Выкидывает из инета!
в инет я вхожу через модем МТС вот ситуация такая допустим играю я себе в кс вижу врга целюсь.... и тут те на модем полностью вырубается не...

Выкидывает из паруса!
Есть 3 компьютера. на 2х из них установлена программа ПАРУС, а 3-ий использовался, как сервер и на нем были установлены все базы ПАРУСа....


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru