1 / 1 / 0
Регистрация: 11.04.2013
Сообщений: 51
1

Доступ к переменной из другого метода

17.06.2013, 16:02. Показов 9403. Ответов 10
Метки нет (Все метки)

Всем добрый день! Подскажите пожалуйста, как реализовать доступ к переменной fileLength? Метод dataLengthReader должен быть void. Например что бы результат вычислений данного метода был доступен в Savescreen().

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
public class MainForm : Form
    {
        public int fileLength;
        private MessageBasedSession mbSession;
        private IAsyncResult asyncHandle = null;
    }
 
private void SaveScreen()
        {
            try
            {
                asyncHandle = mbSession.BeginWrite("MMEM:DATA? \"c:\\hcopy.jpg\"", new AsyncCallback(OnWriteComplete), null);
                asyncHandle = mbSession.BeginRead(mbSession.DefaultBufferSize, new AsyncCallback(fileDataLength), null);
                Wait();
                
            }
            catch
            {
 
            }
        }
 
private void dataLengthReader(IAsyncResult result)
        {
            try
            {
                string responseString = mbSession.EndReadString(result);
                responseString = responseString.Replace("#", string.Empty);
                int lengthNumber = Convert.ToInt32(responseString.Substring(0, 1));
                fileLength = Convert.ToInt32(responseString.Substring(1,lengthNumber)); //Вот к этой
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message);
            }
        }
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.06.2013, 16:02
Ответы с готовыми решениями:

Присвоение переменной одного метода значения из другого метода
Есть метод А(), в которой в переменную int a присваивается 34; И есть метод В(), в которой в...

Java доступ к переменной из другого метода
Здравствуйте, подскажите пж-та, только начинаю изучать java, возник вопрос - пытаюсь сделать...

Как получить доступ к переменной из другого метода с++
Хочу чтоб вводились дни по месяцам, например если февраль то не может быть в месяце 30 дней. Сделал...

Как получить доступ к переменной находящейся в одном методе из другого метода в пределах одного класса
Привет всем! Очередной вопрос новичка, допустим, у меня есть метод 1, в котором назначена...

10
Master of Orion
Эксперт .NET
6087 / 4943 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.06.2013, 16:11 2
Venethi,
1)передавать ссылку на форму
2)передавать само значение
3) делать статическим полем
..
в общем: Ответы на 7 самых частых вопросов по WinForms
0
1 / 1 / 0
Регистрация: 11.04.2013
Сообщений: 51
17.06.2013, 18:00  [ТС] 3
Psilon, вот хоть убейте, не понимаю как мне например из под метода SaveScreen() вывести значение fileLength в lable... вообще мне нужно вывести размер файла в этот метод что бы запустить запись файла на диск из потока.
0
Администратор
Эксперт .NET
9161 / 4439 / 749
Регистрация: 17.04.2012
Сообщений: 9,229
Записей в блоге: 14
17.06.2013, 18:07 4
Цитата Сообщение от Venethi Посмотреть сообщение
Например что бы результат вычислений данного метода был доступен в Savescreen()
fileLength является нестатическим полем класса, а значит доступна в любом нестатическом методе этого класса. У вас всё уже сделано, может я не понимаю смысл вопроса?
Цитата Сообщение от Venethi Посмотреть сообщение
не понимаю как мне например из под метода SaveScreen() вывести значение fileLength в lable
C#
1
label1.Value = fileLength.ToString();
0
1 / 1 / 0
Регистрация: 11.04.2013
Сообщений: 51
17.06.2013, 18:32  [ТС] 5
у меня вне метода dataLengthReader значение fileLength нулевое.
0
18 / 18 / 6
Регистрация: 10.09.2011
Сообщений: 83
18.06.2013, 01:36 6
а не проще ли сделать что бы метод возвращал значение и просто напросто его вызвать в нужном методе. просто не понятна строгая необходимость что-бы метод ничего не возвращал ( тоесть void ). А так можешь сделать все в 1 классе и глобальную переменную в ходе выполнения метода её просто присвоить и уже обращаешся к ней в другом методе.
0
1 / 1 / 0
Регистрация: 11.04.2013
Сообщений: 51
18.06.2013, 09:52  [ТС] 7
Если я делаю вот так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private int fileDataLength(IAsyncResult result)
        {
            try
            {
                string responseString1 = mbSession.EndReadString(result);
                responseString1 = responseString1.Replace("#", string.Empty);
                int lengthNumber = Convert.ToInt32(responseString1.Substring(0, 1));
                fileLength = Convert.ToInt32(responseString1.Substring(1,lengthNumber));
                
                
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message);
            }
            return (fileLength);
        }
То перестает работать метод :

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private void SaveScreen()
        {
            try
            {
                asyncHandle = mbSession.BeginWrite("MMEM:DATA? \"c:\\hcopy.jpg\"", new AsyncCallback(OnWriteComplete), null);
                asyncHandle = mbSession.BeginRead(mbSession.DefaultBufferSize, new AsyncCallback(fileDataLength), null); //здесь пишет Error 'int CableMeasurement.MainForm.fileDataLength(System.IAsyncResult)' has the wrong return type
                               
            }
            catch
            {
 
            }
        }
я видимо что-то не догоняю...)
0
60 / 59 / 15
Регистрация: 04.05.2010
Сообщений: 161
18.06.2013, 10:24 8
Так конечно же нулевое значение. Во первых у вас методы
private void SaveScreen() и private void dataLengthReader(IAsyncResult result)

находятся в

public class MainForm : Form ?

Если да, то какое может быть присвоено значение переменной fileDataLength в этой строке, если вы не вызывали
метод private void dataLengthReader(IAsyncResult result)

asyncHandle = mbSession.BeginRead(mbSession.DefaultBufferSize, new AsyncCallback(fileDataLength), null);
0
1 / 1 / 0
Регистрация: 11.04.2013
Сообщений: 51
18.06.2013, 11:50  [ТС] 9
akafeanor , простите, это у меня путаница с названиями методов, метод dataLengthReader() это fileDataLength().

То есть из asyncHandle = mbSession.BeginRead(mbSession.DefaultBufferSize, new AsyncCallback(fileDataLength), null); вызывается

private int fileDataLength(IAsyncResult result)

Да, они находятся в public class MainForm : Form

Добавлено через 56 минут
попробую изложиь проблему подробнее. Мне нужно с определенного устройства считать jpg картинку. Что бы ее считать мне нужно знать длинну файла.

Метод private void SaveScreen()
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private void SaveScreen()
        {
            try
            {
                asyncHandle = mbSession.BeginWrite("MMEM:DATA? \"c:\\hcopy.jpg\"", new AsyncCallback(OnWriteComplete), null); //выдает строку в поток. Строка вида #577563????????
                asyncHandle = mbSession.BeginRead(mbSession.DefaultBufferSize, new AsyncCallback(fileDataLength), null); // читаем и отправляем строку в fileDataLength
                                
            }
            catch
            {
 
            }
        }
В методе private void fileDataLength(IAsyncResult result) обрабатываем эту строку и получаем нужное кол-во байт

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void fileDataLength(IAsyncResult result)
        {
            try
            {
                string responseString1 = mbSession.EndReadString(result);
                responseString1 = responseString1.Replace("#", string.Empty);
                int lengthNumber = Convert.ToInt32(responseString1.Substring(0, 1));
                GlobalVar.fileLength = Convert.ToInt32(responseString1.Substring(1,lengthNumber)); //записываю в глобальную переменную               
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message);
            }
        }
Далее мне нужно это кол-во байт использовать для того что бы я смог сохранить файл с этого устройства. Но у меня периодически значение глобальной переменной остается нулевым. Пытаюсь отловить дебагером, но ничего не понимаю, то появляется значение, то нет... бред какой-то.
0
3 / 3 / 0
Регистрация: 16.06.2013
Сообщений: 16
18.06.2013, 13:05 10
Могу ошибаться, но попробовать стоит:
C#
1
public static int dope{ get; set; }
А в функции fileDataLength() после преобразования в инт :
C#
1
dope = fileLength;
0
1 / 1 / 0
Регистрация: 11.04.2013
Сообщений: 51
18.06.2013, 13:21  [ТС] 11
davps, не помогло, но все равно спасибо, решил что буду эту переменную использовать из под метода в котором она создается.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2013, 13:21

Обращение к переменной метода из другого метода
public class Solution { public static void main(String args) throws Exception { ...

Вызов переменной метода из другого метода
class A(): def m(self): number = x #переменный параметр - номер заявки,...

Обратиться к переменной из другого метода
public void test () { int16 per = 0; } public void test() ...

Изменение переменной из другого метода
Есть переменная "path", нужно создать новый метод, в котором эта переменная меняла бы значение. ...


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

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

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