Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обратиться о объекту зная относительное имя / 25 сообщений из 27, страница 1 из 2
25.10.2012, 15:02
    #38013184
taaamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
У меня есть кнопка. Я хочу проверить ее имя (а имена там 'Button1', 'Button2' до 8) на нечетность, и если она четкая, то хочу двигать ее и ту, которая имеет в имени цифру на 1 меньшую. Как это сделать? Вот мой код, он должен всё объяснить.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Class MainWindow
    Public Property dvig As Button

    Private Property dvig2 As Button

    Private Sub Buttons_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button2.Click, Button4.Click, Button6.Click, Button8.Click, Button7.Click, Button5.Click, Button3.Click, Button1.Click
        Dim ob As Button
        ob = sender
        If ob.Name.Substring(ob.Name.Length - 1, 1) Mod 2 <> 0 Then
            dvig = ob
            'dvig2 = ?
        End If

    End Sub

End Class
...
Рейтинг: 0 / 0
25.10.2012, 15:13
    #38013221
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
taaamerlan,
четкая кнопка - улыбнуло )) пасибо
зы sender смотри, это и есть твоя кнопка..
...
Рейтинг: 0 / 0
25.10.2012, 15:20
    #38013243
taaamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
Блин, что я написал?) Я имел в виду четность числа в имени. А про решение - sender я рассмотрел и передал все от него объекту ob. Щас вспомнил, что можно по другому, хоть это и не читабельно)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Class MainWindow
    Public Property dvig As Button

    Private Property dvig2 As Button

    Private Sub Buttons_Click(sender As Object, e As System.Windows.RoutedEventArgs) Handles Button2.Click, Button4.Click, Button6.Click, Button8.Click, Button7.Click, Button5.Click, Button3.Click, Button1.Click

        MsgBox(CType(sender, Button).Name.Substring(CType(sender, Button).Name.Length - 1, 1))
        If CType(sender, Button).Name.Substring(CType(sender, Button).Name.Length - 1, 1) Mod 2 <> 0 Then
            dvig = CType(sender, Button)
            'dvig2 = ?
        End If

    End Sub

End Class






А как мне обратиться к кнопке с именем как у той кнопки, но с цифрой на 1 меньше?
...
Рейтинг: 0 / 0
25.10.2012, 15:22
    #38013246
taaamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
зря я наверно так сделал. Совсем не читабельно
...
Рейтинг: 0 / 0
25.10.2012, 15:23
    #38013248
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
taaamerlan, да что бы не парсить себе мозги, организуйте switch по имени.. их всего восемь,думаю не умрете
...
Рейтинг: 0 / 0
25.10.2012, 15:26
    #38013254
taaamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
Мне нужно именно так. Потом их количество измениться. Знаю только, что их будет четное количество.
p.s. Знаю, что если их будет больше 10, то придется проверку переделать, но пока хоть так бы понять, как делать
...
Рейтинг: 0 / 0
25.10.2012, 15:30
    #38013264
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
taaamerlan,
дак вы что все кнопки на один обработчик повесили?
...
Рейтинг: 0 / 0
25.10.2012, 15:32
    #38013267
taaamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
Где-то в степи, да, а что не видно?
...
Рейтинг: 0 / 0
25.10.2012, 15:33
    #38013273
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
taaamerlan,
ну и что, обратитесь к кнопке, и сделаете ее клик, и что дальше,
...
Рейтинг: 0 / 0
25.10.2012, 15:37
    #38013293
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
Где-то в степи,
уж не хотите ли вы ее цвет поменять на желтый ( боже упаси...)
...
Рейтинг: 0 / 0
25.10.2012, 15:37
    #38013294
taaamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
Где-то в степи, дальше кнопку с четной цифрой в названии буду двигать по одному сценарию, а с нечетной по другому
...
Рейтинг: 0 / 0
25.10.2012, 15:39
    #38013298
taaamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
taaamerlan, забейте на предыдушие предложение. Не так вас понял
...
Рейтинг: 0 / 0
25.10.2012, 15:39
    #38013300
taaamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
taaamerlan, а нет. Правильно)
...
Рейтинг: 0 / 0
25.10.2012, 15:40
    #38013303
taaamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
Не подумайте! Это не раздвоение личности)
...
Рейтинг: 0 / 0
25.10.2012, 15:41
    #38013305
taaamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
Как обратиться к кнопке зная её относительное имя?
...
Рейтинг: 0 / 0
25.10.2012, 15:41
    #38013307
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
taaamerlan,
рефлексией
...
Рейтинг: 0 / 0
25.10.2012, 15:44
    #38013315
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
taaamerlanГде-то в степи, дальше кнопку с четной цифрой в названии буду двигать по одному сценарию, а с нечетной по другому
а мне нравится, кнопки как тараканы бегают по форме, а главбух пытается их вовремя нажать, в этом что то есть.
...
Рейтинг: 0 / 0
25.10.2012, 15:47
    #38013329
pyroman69
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
taaamerlanУ меня есть кнопка. Я хочу проверить ее имя (а имена там 'Button1', 'Button2' до 8) на нечетность, и если она четкая, то хочу двигать ее и ту, которая имеет в имени цифру на 1 меньшую. Как это сделать? Вот мой код, он должен всё объяснить.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Class MainWindow
    Public Property dvig As Button

    Private Property dvig2 As Button

    Private Sub Buttons_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button2.Click, Button4.Click, Button6.Click, Button8.Click, Button7.Click, Button5.Click, Button3.Click, Button1.Click
        Dim ob As Button
        ob = sender
        If ob.Name.Substring(ob.Name.Length - 1, 1) Mod 2 <> 0 Then
            dvig = ob
            'dvig2 = ?
        End If

    End Sub

End Class


Код: vbnet
1.
2.
3.
4.
If ob.Name.Substring(ob.Name.Length - 1, 1) Mod 2 <> 0 Then
   dvig = ob
   dvig2  = ob.Parent.Controls["ТутНадоУказатьИмяКонтрола"]
End If
...
Рейтинг: 0 / 0
25.10.2012, 16:07
    #38013366
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
taaamerlan,

а как вы кнопки на форму кидаете, вручную или каким нить алгоритмом?
...
Рейтинг: 0 / 0
25.10.2012, 16:07
    #38013367
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
Хм... А не проще в свойство Tag кнопки 2 засунуть ссылку на кнопку 1? Вообще в чём смысл всего этого? :)
...
Рейтинг: 0 / 0
25.10.2012, 17:46
    #38013557
taaamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
pyroman69, спасибо огромное!
skyANA, хороший совет)


pationtaaamerlan,

а как вы кнопки на форму кидаете, вручную или каким нить алгоритмом?


Нет, там они сразу будут. Просто мне нужно представить приблизительный вариант заказчику (если это можно так назвать), а конкретного количества необходимых кнопок нет
...
Рейтинг: 0 / 0
26.10.2012, 01:59
    #38013944
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
taaamerlan,
Вот хелпик накидал кнопочки ( Контролы) искать без рекурсии
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 static class Helper
    {
        public static T GetControl<T>(this Control @this, string controlName)where T:Control
        {
            if (@this == null)  throw new ArgumentNullException("source is ass");
            var sourceProperties = @this.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance). Where(a => a.Name.Equals(controlName));
            var fieldInfos = sourceProperties as List<FieldInfo> ?? sourceProperties.ToList(); 
            if (fieldInfos.Any())
              return (T) fieldInfos.First().GetValue(@this);
            return null;
        }
    }


а пользоваться просто
Код: c#
1.
2.
3.
 Button bt = this.GetControl<Button>("Button_1");
            if (bt == null) return;
            bt.BackColor = Color.Yellow;
...
Рейтинг: 0 / 0
26.10.2012, 11:56
    #38014302
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
Где-то в степиtaaamerlan,
Вот хелпик накидал кнопочки ( Контролы) искать без рекурсии
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 static class Helper
    {
        public static T GetControl<T>(this Control @this, string controlName)where T:Control
        {
            if (@this == null)  throw new ArgumentNullException("source is ass");
            var sourceProperties = @this.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance). Where(a => a.Name.Equals(controlName));
            var fieldInfos = sourceProperties as List<FieldInfo> ?? sourceProperties.ToList(); 
            if (fieldInfos.Any())
              return (T) fieldInfos.First().GetValue(@this);
            return null;
        }
    }



а пользоваться просто
Код: c#
1.
2.
3.
 Button bt = this.GetControl<Button>("Button_1");
            if (bt == null) return;
            bt.BackColor = Color.Yellow;



а почему Controls не использовал? а если кнопки динамически добавлены?
...
Рейтинг: 0 / 0
26.10.2012, 12:04
    #38014315
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
pation,
этож без обхода, я написал выше, ( кстсти забыл проверку на приведение сделать)
...
Рейтинг: 0 / 0
27.10.2012, 02:20
    #38015396
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обратиться о объекту зная относительное имя
pation,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 public static T GetControl<T>(this Control @this, string nameControl) where T : Control
        {
            if (@this == null || @this.IsDisposed) throw new ObjectDisposedException("source is ass");
            var result = default(T);
            foreach (Control control in @this.Controls)
            {
                if (control is T && string.Equals(nameControl, control.Name))
                {
                    result = control as T;
                    break;
                }
                result = GetControl<T>(control, nameControl);
                if (result != null)
                {
                    break;
                }
            }
            return result;
        }
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обратиться о объекту зная относительное имя / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]