Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173

Как объявить переменную с областью видимости в пределах класса формы

12.10.2012, 10:15. Показов 3019. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Приложение ищет опечатки, используя свой словарь и словарь MS Word. Но у некоторых пользователей нет MS Word, поэтому сделал опцию useWord.

При начале проверки:

C#
1
2
3
4
5
6
7
8
9
10
if (useWord)
    try{
         Word.Application app = new Word.Application();
        app.Visible = false;
    }
catch(Exception ex)
{
    useWord = false;
    ItemUseWord.Checked = false;
}
далее (через 100 строчек кода) мне нужно применять созданный ранее объект "app":

C#
1
2
3
4
5
6
7
8
9
10
if (useWord)
{
    if (app.CheckSpelling(word))
    {
        NewWordsDic.Add(lo);
        continue;
    }
    BadWordsCount++;
    dataGridView1.Rows.Add(topic, word, line);
}
Но c# не видит этот объект: Элемент app не существует в текущем контексте.

Каким образом мне создать объект app (т.к. запустить Word в фоновом режиме), чтобы потом к нему можно было обращаться?

Переписывать всю функцию в двух вариантах:
if (useWord)
вся функция проверки с учетом Word
else
вся функция проверки без учета Word

как-то не хочется.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.10.2012, 10:15
Ответы с готовыми решениями:

Как обеспечить видимость класса в пределах формы и всех ее методов
Здравствуйте! Подскажите новичку :) Такая проблема: недавно взялся изучать C#. Пытаюсь написать калькулятор доходности по депозиту,...

Что-то с областью видимости
Приветствую! Пытаюсь распарсить локальные файлы на предмет JSON. Пишу так: if (id_report!="") ...

Может ли областью видимости структуры быть тело метода класса?
Может ли областью видимости структуры быть тело метода класса?

5
82 / 82 / 24
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
12.10.2012, 10:28
Suppir, вы создаете и инициализируете app в блоке try catch поэтому ваш app и не видно за его пределами, вынесети объявление куда-нибудь повыше
0
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
12.10.2012, 10:33  [ТС]
Непонятно, куда его повыше выносить, если приложение имеет вид:

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
namespace Название_приложения
{
    public partial class Form1 : Form
    {    
        public Form1()
        {
        }
        
        private void button1_Click(object sender, EventArgs e)
        {
            bool useWord = ItemUseWord.Checked;
            if (useWord)
                try{
                Word.Application app = new Word.Application();
                app.Visible = false;
            }
            catch(Exception ex)
            {
            useWord = false;
            ItemUseWord.Checked = false;
            }
            
            ...
            //здесь куча кода
            ...
            
            if (useWord)
            {
                if (app.CheckSpelling(word))
                {
                    NewWordsDic.Add(lo);
                    continue;
                }
                BadWordsCount++;
                dataGridView1.Rows.Add(topic, word, line);
            }
        
        }
        
    }
     
}
Добавлено через 1 минуту
Можно ли создавать объект внутри функции таким образом, чтобы он был виден глобально?
0
82 / 82 / 24
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
12.10.2012, 10:42
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
public partial class Form1 : Form
    {    
        private Word.Application app;
        public Form1()
        {
               app = null;
        }
        
        private void button1_Click(object sender, EventArgs e)
        {
            if (useWord)
                try{
                app = new Word.Application();
                app.Visible = false;
            }
            catch(Exception ex)
            {
            useWord = false;
            ItemUseWord.Checked = false;
            }
            
            ...
            //здесь куча кода
            ...
            
            if (useWord && app != null)
            {
                if (app.CheckSpelling(word))
                {
                    NewWordsDic.Add(lo);
                    continue;
                }
                BadWordsCount++;
                dataGridView1.Rows.Add(topic, word, line);
            }
        
        }
        
    }
вот так, думаю лучше

либо так
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
private void button1_Click(object sender, EventArgs e)
        {
            Word.Application app = null;
            if (useWord)
                try{
                app = new Word.Application();
                app.Visible = false;
            }
            catch(Exception ex)
            {
            useWord = false;
            ItemUseWord.Checked = false;
            }
            
            ...
            //здесь куча кода
            ...
            
            if (useWord && app != null)
            {
                if (app.CheckSpelling(word))
                {
                    NewWordsDic.Add(lo);
                    continue;
                }
                BadWordsCount++;
                dataGridView1.Rows.Add(topic, word, line);
            }
        
        }
Добавлено через 7 минут
Цитата Сообщение от Suppir Посмотреть сообщение
Можно ли создавать объект внутри функции таким образом, чтобы он был виден глобально?
если так созададите то будет виден внутри метода и будет он локальным, а глобальным только как переменная класса.
1
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
12.10.2012, 10:53  [ТС]
Сейчас попробую, чуть позже отпишусь.

Добавлено через 7 минут
Спасибо, вот эта строчка очень помогла!

C#
1
Word.Application app = null;
Добавлено через 23 секунды
Т.е. мы тупо создали пустую переменную, заняв место "повыше".
0
82 / 82 / 24
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
12.10.2012, 10:58
Цитата Сообщение от Suppir Посмотреть сообщение
Т.е. мы тупо создали пустую переменную, заняв место "повыше".
почти, мы вынесли переменную из блока try catch, дав ей видимость для всего метода, плюс ко всему этому переменной присвоено значение null, на тот случай если переменная useWord станет true и в конце метода может ошибочно вызваться app.CheckSpelling(word), но судя по данному коду такого возникнуть не может, остальную часть я не знаю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.10.2012, 10:58
Помогаю со студенческими работами здесь

Объявить переменные, область видимости которых распространялась бы на все формы
Здравствуйте! Я создаю приложение в visual studio 2008, которое содержит несколько форм. И мне нужно объявить переменные, область...

Как и где создать процедуру с глобальной областью видимости
Здравствуйте. Я хотел спросить, можно ли создать подпрограмму(процедуру или что то на подобии), что б вызывать с любой формы. У меня в...

За областью видимости
Привет всем, начал недавно изучать java по Шилдту, прочитал что есть такая хорошая вещь как "сборщик мусора" и появился вопрос...

Грабли с областью видимости пременных
Объясните плиз, уже второй раз наступаю app.post('/auth',function(req,res,next){ var db = require('./db.js'); ...

Проблема с областью видимости объектов.
При изучении Java столкнулся со следующей проблемой: объекты (например JFrame) создаваемые в одном блоке не доступны из другого блока кода....


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

Или воспользуйтесь поиском по форуму:
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