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

Как добавить методу четыре параметра и изменять данные в параметрах при нажатии разных кнопок?

27.08.2017, 15:03. Показов 1521. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как добавить методу что ниже, четыре параметра и изменять данные в параметрах при нажатии разных кнопок?

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
     unsafe void PatchFilesLevel5()
        {
            long[] offsets = { 0x111, 0x111 + 0xB8, 0x111 + 0x170 }; /* здесь нужно 
делать замену смещений при нажатии разных кнопок*/
            byte[] buf4 = new byte[4];
            decimal mulitplyBy = numericUpDown111.Value;  /* здесь нужно 
делать замену ипользуемого numericUpDown при разных кнопках*/
            foreach (string fileName in Directory.EnumerateFiles(Application.StartupPath + @"\unpacked2", "scene*"))
            {
                Match m = Regex.Match(Path.GetFileName(fileName), @"^scene(\d+)$");
                if (m.Success)
                {
                    int p = int.Parse(m.Groups[1].Value);
                    if ((p >= 9 && p <= 11) || p == 12 || p == 14) /*здесь, если вообще можно, 
 делать замену ипользуемых ((p >= 9 && p <= 11) || p == 12 || p == 14) при разных кнопках*/
                    {
                        using (var fstream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
                        {
                            foreach (long offset in offsets)
                            {
                                if (offset + 4 < fstream.Length)
                                {
                                    fstream.Position = offset;
                                    fstream.Read(buf4, 0, 4);
 
                                    int n = (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)); /* здесь нужно 
делать замену формулы при нажатии разных кнопок (например при 1-ой кнопке одна формула: 
(int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)); при 2-ой кнопке формула меняется */
                                    if (n > 99)
                                    {
                                        n = 99;
                                    }
                                    fixed (byte* b = buf4)
                                    {
                                        *((int*)b) = n; 
                                    }
 
                                    fstream.Position -= 4;
                                    fstream.Write(buf4, 0, 4);
                                }
                            }
                        }
                    }
                }
            }
        }
Например:
1) При нажатии 1-ой кнопки в строке long[] offsets = { 0x111, 0x111 + 0xB8, 0x111 + 0x170 }; нужно чтоб использовались смещения: { 0x111, 0x111 + 0xB8, 0x111 + 0x170 }); При нажатии 2-ой кнопки чтоб в строке использовались смещения: { 0x222, 0x222 + 0xB8, 0x222 + 0x170 };
Обьяснили как сделать. Можно добавить методу PatchFilesLevel5 параметр offsets типа long unsafe void PatchFilesLevel5(long[] offsets) а в метод нажимаемой кнопки в виде аргумента задавать смещения:
C#
1
2
3
4
buttonPatch1_Click(object sender, EventArgs e) 
{ 
PatchFilesLevel5(new long[]{ 0x111, 0x111 + 0xB8, 0x111 + 0x170 }); 
}
Можно в других строках также задавать параметры?
2) Например: При нажатии 1-ой кнопки в строке decimal mulitplyBy = numericUpDown111.Value; нужно чтоб использовался numericUpDown111.Value. При нажатии 2-ой кнопки используется numericUpDown222.Value. Меняется используемый numericUpDown.

3) Например: При 1-ой кнопке в строке int n = (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)); нужно чтоб использовалась одна формула: (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)); При 2-ой кнопке формула меняется например на (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)/100); .

4) (Если это возможно сделать) Например: При 1-ой кнопке в строке if ((p >= 9 && p <= 11) || p == 12 || p == 14) нужно чтоб использовались: ((p >= 9 && p <= 11) || p == 12 || p == 14) При 2-ой кнопке например: ((p >= 5 && p <= 20) || p == 50).
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.08.2017, 15:03
Ответы с готовыми решениями:

При нажатии на кнопку изменять данные в DBGrid
Нужна ваша помощь. Есть DBGrid с продукцией и ее количеством. Нужно сделать так, что бы при нажатии на кнопку менялось количество...

Как изменять свойства текста при изменении параметра?
Такой вопрос у меня появился. Есть на окне несколько Label с текстом, который привязан к свойствам VM. При изменении их мне хочется, чтобы...

При нажатии на ссылку не перезагружать страницу, но изменять строку адреса (как в Vk)
как сделать , чтоб нажав на ссылку страница не перезагружалась , но страка URL(адресса) изменялась похоже как в вконтакте

12
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
27.08.2017, 21:47
Сама функция:
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
        private void function(string buttonName)
        {
            switch (buttonName)
            {
                case "Button1":
                    long[] offsets = {0x111, 0x111 + 0xB8, 0x111 + 0x170};
                    decimal mulitplyBy = numericUpDown111.Value;
                    if ((p >= 9 && p <= 11) || p == 12 || p == 14)
                    {
                        
                    }
 
                    break;
 
                case "Button2":
                    long[] offsets = { 0x222, 0x222 + 0xB8, 0x222 + 0x170 };
                    decimal mulitplyBy = numericUpDown222.Value;
                    if ((p >= 5 && p <= 20) || p == 50)
                    {
 
                    }
 
                    break;
            }
        }
Вызов функции в обработчике:
C#
1
2
3
4
5
        private void button_Click(object sender, EventArgs e)
        {
            Button b = sender as Button;
            function(b.Name);
        }
Обработчик один для всех кнопок!
1
0 / 0 / 2
Регистрация: 07.06.2016
Сообщений: 75
27.08.2017, 22:06  [ТС]
Shogun31337, А в самом коде метода unsafe void PatchFilesLevel5() нужно что-то менять?
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
27.08.2017, 22:14
Цитата Сообщение от Razi82 Посмотреть сообщение
Shogun31337, А в самом коде метода unsafe void PatchFilesLevel5() нужно что-то менять?
Функция function(string buttonName) это и есть твоя PatchFilesLevel5. Просто назвал ее в своем примере иначе.
0
0 / 0 / 2
Регистрация: 07.06.2016
Сообщений: 75
27.08.2017, 22:41  [ТС]
А если задавать аргументами в методе вот так:
C#
1
unsafe void PatchFilesLevel5(long[] offsets, decimal mulitplyBy, int n)
Как тогда в методе прописать формулу например при нажатии 1-ой кнопки формула будет умножать int n = (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0));, а при нажатии 2-ой кнопки формула будет добавлять int n = (int)(mulitplyBy + BitConverter.ToInt32(buf4, 0)); в третьем варианте формула еще изменится. Выходит надо задавать в виде аргумента в методе кнопок вот так?
C#
1
2
3
4
5
private void buttonPatch1_Click(object sender, EventArgs e)
        {
            PatchFilesLevel5(new long[] { 0x2B8, 0x2B8 + 0xB8, 0x2B8 + 0x170 }, numericUpDownAll1.Value, (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)));
                  // но, выдает ошибку: mulitplyBy и buf4 не существуют в текущем контексте
        }
C#
1
2
3
4
5
private void buttonPatch2_Click(object sender, EventArgs e)
        {
            PatchFilesLevel5(new long[] { 0x2B9, 0x2B9 + 0xB8, 0x2B9 + 0x170 }, numericUpDownAll2.Value, (int)(mulitplyBy + BitConverter.ToInt32(buf4, 0))); 
                  // здесь  в формуле добавление
        }
Вопрос в том как задавать в методе разных кнопок разные формулы? Например формула умножения или добавления. (Если смог правильно описать задачу).
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
27.08.2017, 22:52
Цитата Сообщение от Razi82 Посмотреть сообщение
Вопрос в том как задавать в методе разных кнопок разные формулы? Например формула умножения или добавления. (Если смог правильно описать задачу).
Посмотри как следует тот пример, который я написал и все станет ясно! Никаких функций в параметрах там передавать не надо. Если уж очень хочется передавать функцию в качестве параметра, то смотри в сторону делегатов! Но, учитывая уровень знаний, тебе в этом вопросе до второго пришествия не разобраться...
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18285 / 14208 / 5368
Регистрация: 17.03.2014
Сообщений: 28,887
Записей в блоге: 1
27.08.2017, 22:55
Лучший ответ Сообщение было отмечено Razi82 как решение

Решение

Razi82, тебе правильно сказали - нужно передавать аргументы методу PatchFilesLevel5
исправленный метод PatchFilesLevel5
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
unsafe void PatchFilesLevel5(long[] offsets, Func<int,bool> fileSelector, Func<int,int> intConverter)
{
    byte[] buf4 = new byte[4];
    foreach (string fileName in Directory.EnumerateFiles(Application.StartupPath + @"\unpacked2", "scene*"))
    {
        Match m = Regex.Match(Path.GetFileName(fileName), @"^scene(\d+)$");
        if (m.Success)
        {
            int p = int.Parse(m.Groups[1].Value);
            if (fileSelector(p))
            {
                using (var fstream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
                {
                    foreach (long offset in offsets)
                    {
                        if (offset + 4 < fstream.Length)
                        {
                            fstream.Position = offset;
                            fstream.Read(buf4, 0, 4);
 
                            int n = intConverter(BitConverter.ToInt32(buf4, 0));
                            if (n > 99)
                            {
                                n = 99;
                            }
                            fixed (byte* b = buf4)
                            {
                                *((int*)b) = n; 
                            }
 
                            fstream.Position -= 4;
                            fstream.Write(buf4, 0, 4);
                        }
                    }
                }
            }
        }
    }
}

Обработчики
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void buttonPatch1_Click(object sender, EventArgs e)
{
    PatchFilesLevel5(    
        new long[]{ 0x111, 0x111 + 0xB8, 0x111 + 0x170 },
        p => (p >= 9 && p <= 11) || p == 12 || p == 14,
        num => (int)(numericUpDown111.Value * num)
    );
}
 
void buttonPatch2_Click(object sender, EventArgs e)
{
    PatchFilesLevel5(    
        new long[]{ 0x222, 0x222 + 0xB8, 0x222 + 0x170 },
        p => (p >= 5 && p <= 20) || p == 50,
        num => (int)(numericUpDown222.Value * num/100)
    );
}

Код не проверялся. Могут быть ошибки компиляции.

Цитата Сообщение от Shogun31337 Посмотреть сообщение
Сама функция: ...
Неудачная идея. Вместо универсального метода мы получили метод который нужно менять под каждую кнопку. Тоже самое можно сказать о привязке логики к имени кнопки. Так лучше не делать.
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
27.08.2017, 23:03
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Неудачная идея
Согласен! И сам бы так делать не стал. Но, в данном случае, считаю такой вариант оправданным, т.к. он наиболее прост в использовании. Вариант с делегатами породит только еще больше вопросов у ТС. Ибо кнопок у него не 2, а значительно больше, а самостоятельно добавить код для остальных ему будет затруднительно... И, соответственно, эта тема разрастется еще несколькими...
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18285 / 14208 / 5368
Регистрация: 17.03.2014
Сообщений: 28,887
Записей в блоге: 1
27.08.2017, 23:05
Цитата Сообщение от Shogun31337 Посмотреть сообщение
а самостоятельно добавить код для остальных ему будет затруднительно...
А я в него верю

Добавлено через 51 секунду
Цитата Сообщение от Shogun31337 Посмотреть сообщение
в данном случае, считаю такой вариант оправданным, т.к. он наиболее прост в использовании.
Я так и подумал уже после отправки своего ответа. Как простое решение "в лоб" пойдет, да.
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
27.08.2017, 23:08
Цитата Сообщение от OwenGlendower Посмотреть сообщение
А я в него верю
Я не говорю, что у него мозгов не хватит разобраться! Просто по словам самого ТС, у него сейчас нет никакого желания разобраться даже в основах программирования. Т.е. иными словами, он и не будет этого делать, а сразу задаст вопрос на форуме...
0
0 / 0 / 2
Регистрация: 07.06.2016
Сообщений: 75
28.08.2017, 06:21  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Код не проверялся. Могут быть ошибки компиляции.
Попробовал, ошибки не найдены, код работает.

Цитата Сообщение от Shogun31337 Посмотреть сообщение
сразу задаст вопрос на форуме
Ну почему же, сначала пробую сам сделать. Таким способом, некоторые простые вопросы сам решил. Потом обращаюсь за советом к тебе. А уже после, когда нахожусь практически в отчаянном положении, задаю вопрос на форуме. И то, что OwenGlendower помог разобраться с вопросом, это для меня как бальзам на душу.
Цитата Сообщение от Shogun31337 Посмотреть сообщение
нет желания разобраться даже в основах программирования
Говорил, что эта программа практически написана, чтоб ее написать нужно 1-2 дня и узнать 2-4 вопроса, а для того чтоб разобраться в основах языка C# нужно 5 недель минимум. Тем более неизвестно, буду ли еще что-то писать на C#, по крайней мере не планирую. (Не планирую изучать C# как первый язык. Сначала хочу посмотреть на Python). Пишу программу больше не для себя, а для мира. Пускай например программой воспользуется даже только 20 человек. При том что программа может помочь уменьшить затраты времени при редактировании на 10-30 часов каждому. Имею ввиду, что программа пишется исключительно на энтузиазме.
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
28.08.2017, 13:03
Цитата Сообщение от Razi82 Посмотреть сообщение
Говорил, что эта программа практически написана, чтоб ее написать нужно 1-2 дня и узнать 2-4 вопроса, а для того чтоб разобраться в основах языка C# нужно 5 недель минимум. Тем более неизвестно, буду ли еще что-то писать на C#, по крайней мере не планирую. (Не планирую изучать C# как первый язык. Сначала хочу посмотреть на Python). Пишу программу больше не для себя, а для мира. Пускай например программой воспользуется даже только 20 человек. При том что программа может помочь уменьшить затраты времени при редактировании на 10-30 часов каждому. Имею ввиду, что программа пишется исключительно на энтузиазме.
Извини, если мои слова прозвучали как то резко! Просто, как я говорил тебе в ЛС, я считаю, что для того чтобы программировать нужно, для начала, выучить хотя бы основы! И абсолютно неважно для каких целей, для какой аудитории и на какой мотивации будет писаться программа. А если нет времени/желания/возможностей... Ну ведь никто в здравом уме не взялся бы удалять себе аппендикс, не имея хирургических навыков и полагаясь на помощь медицинского форума? И, к слову о 1-2 днях... Посмотри когда ты написал мне первое сообщение по этой теме... Это было 3 недели назад! За это время можно было настолько хорошо изучить язык, что написание данной программы у тебя, действительно, заняло бы 1-2 дня, причем без помощи форума! Ну и напоследок... Раз уж ты сперва хочешь изучать Python, то, возможно, и эту программу следовало писать на нем, а не на C#?
0
0 / 0 / 2
Регистрация: 07.06.2016
Сообщений: 75
28.08.2017, 17:12  [ТС]
Shogun31337, (Согласен, что для программирования нужно, выучить основы. С этим не поспоришь).
Мне для написания большей половины программы, как оказалось, нужно было узнать всего 3 строчки кода . Не 300 строчек, а 3. И их узнал за неделю. Для написания другой половины программы нужна функция/метод, что в этой теме. Остальное в программе уже готово.
Ну там в ЛС 1-ый вопрос был 2,5 недели назад и это было в большей мере общение. Посмотрел ЛС: 10-го числа: 1-ый вопрос. 12-го числа: 1-ый ответ, в общем обьясняющий на словах порядок действий. 14-го числа спросил: А кода много надо написать для этого? 16-го числа получил ответ: Ну, на все вместе, строк 10 уйдет. (Как раз говорилось о методе что в этой теме). А так в простых вопросах ты мне помог, у меня бы заняло выяснение таких вопросов много времени. Например о округлении в numericUpDown мне кажется не пишут в документации и в книжках. Для этого нужно было узнать у человека с опытом почему Visual Studio делает округления.
Остальное расскажу в ЛС потому что уже не по теме. В общем, OwenGlendower спасибо за помощь. Shogun31337 спасибо за обьяснения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.08.2017, 17:12
Помогаю со студенческими работами здесь

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

Как сделать блокировку кнопок при при нажатии на точку?
Как сделать, что бы было 2 точки и 2 табла с кнопками в 1-м окне, так что бы когда помечаешь 1-ю точку,то активно 1-е табло с кнопками, а...

Что передать в качестве параметра методу, чтобы использовать данные с помощью метода `xpath`?
def get_hash(node) { weight: node.xpath('.//span/text()').text, price: node.xpath('.//span/text()').text, logo:...

Как вывести данные в один и тот же текстовый инпут, если необходимо использовать функции onClick с разных кнопок?
Задача: &quot;Интернет-магазин&quot; продаёт рамки для фотографий. Для заказа пользователь щёлкает на кнопку «в корзину», при этом в верхнем правом...

При нажатии кнопок мыши выводить информацию о нажатии соответствующей кнопки
на с++ написать программу которая при нажатии кнопок мыши выводить информацию о нажатии соответствующей кнопки c++


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru