Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Suppir
24 / 24 / 3
Регистрация: 08.08.2011
Сообщений: 1,137
#1

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

12.10.2012, 10:15. Просмотров 1938. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2012, 10:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как объявить переменную с областью видимости в пределах класса формы (C#):

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

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

Как объявить переменную - C#
Или так(тоже не получается) namespace имя { public partial class Form1 : Form { public Form1() ...

Как объявить переменную в степени - C#
Всем доброго времени суток, ребят. Делаю лабу по численным методам, прошу вашей подсказки. Как в C# объявить функцию если она...

Как объявить переменную глобально? - C#
Как сделать одну переменную так, чтобы она могла использоваться во всех других функциях.

Как объявить глобальную переменную? - C#
Как объявить глобальную переменную?у меня 16 блоков и нужно чтобы она была доступна всем блокам Добавлено через 12 минут В С#.

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

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
LostCoast
82 / 82 / 5
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
12.10.2012, 10:42 #4
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
Suppir
24 / 24 / 3
Регистрация: 08.08.2011
Сообщений: 1,137
12.10.2012, 10:53  [ТС] #5
Сейчас попробую, чуть позже отпишусь.

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

C#
1
Word.Application app = null;
Добавлено через 23 секунды
Т.е. мы тупо создали пустую переменную, заняв место "повыше".
0
LostCoast
82 / 82 / 5
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
12.10.2012, 10:58 #6
Цитата Сообщение от Suppir Посмотреть сообщение
Т.е. мы тупо создали пустую переменную, заняв место "повыше".
почти, мы вынесли переменную из блока try catch, дав ей видимость для всего метода, плюс ко всему этому переменной присвоено значение null, на тот случай если переменная useWord станет true и в конце метода может ошибочно вызваться app.CheckSpelling(word), но судя по данному коду такого возникнуть не может, остальную часть я не знаю.
0
12.10.2012, 10:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2012, 10:58
Привет! Вот еще темы с ответами:

Как объявить глобальную переменную - C#
Вот код /* * Created by SharpDevelop. * User: admin * Date: 30.06.2014 * Time: 18:36 * * To change this template...

Объявить строковую переменную с русскими буквами как символьную - C#
Можно-ли Объявить переменную с русскими буквами и применить как символьную??? за ранее спс!!! using System; using...

Как объявить глобальную переменную для всего проекта? - C#
Как объявить переменную для всего проекта, а не для одной формы или блока? То, что в VB делается в модуле.

.NET 4.x Как глобально объявить переменную для ее работы в разных методах - C#
Подскажите пожалуйста как можно сделать переменную в классе контролера для того чтобы можно было брать из нее данные в разных методах. ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.