Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Petr_S
213 / 230 / 87
Регистрация: 21.04.2013
Сообщений: 404

Не могу обратится к своему свойству формы TopMost

28.11.2014, 23:49. Показов 1106. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Мне нужно при задании значения свойства формы TopMost выполнить некоторые действия.
VB.Net 2010 Express.
VB.NET
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
Option Strict On
 
Public Class Form1
 
    Private Button1 As Button
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Button1 = New Button With {.Location = New Point(10, 10), .Text = "Press"}
        AddHandler Button1.Click, AddressOf Button1_Click
        Me.Controls.Add(Button1)
 
        Form2.Show()
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Me.TopMost = Not (Me.TopMost)
 
        'так не работает
        'For Each f As Form In Me.OwnedForms
        '    MsgBox(f.ToString, Title:="Form1")
        '    f.TopMost = Me.TopMost
        'Next
 
        'так работает
        Form2.TopMost = Me.TopMost
    End Sub
End Class
 
Public Class Form2
    Inherits System.Windows.Forms.Form
 
    Public Overloads Property TopMost As Boolean
        'Public Shadows Property TopMost As Boolean
        Get
            Return MyBase.TopMost
        End Get
        Set(ByVal value As Boolean)
            MyBase.TopMost = value
            MsgBox("TopMost Property", Title:="Form2")
        End Set
    End Property
 
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Owner = Form1
    End Sub
End Class
В приведенном коде при задании значения просто выводится сообщение "TopMost Property".
Если явно задавать значение (строка 25: Form2.TopMost = Me.TopMost), то всё работает, но мне надо задавать значения в цикле (т.к. форм может быть несколько). Это должны делать строки с 19 по 22. Здесь проблема - так не работает. Как это исправить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.11.2014, 23:49
Ответы с готовыми решениями:

Как обратится к свойству объекта
Интересует следующий вопрос! В справочнике Номенклатура выбираем любой элемент, у этого элемента, если есть, выбираем характеристику....

Как правильно обратится к свойству RowCount чтобы изменить его значение?
StringGrid1->RowCount ?

как правильно обратится к унаследованному свойству объекта в массиве объектов в качестве параметра функции
всем привет подскажите решение такой ситуации попробую описать проблему:допустим есть класс TCustomAAA=class()

4
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
29.11.2014, 00:06
А что это за приложение? MDI? Или обычное?
Формы открыты?

Добавлено через 10 минут
Раскомментировал цикл и убрал строку 25.
Код работает следующим образом:
При нажатии на кнопку первая и вторая форма становятся выше всех окон в системе.
При повторном нажатии снова позволяют перекрывать себя другим окнам.

Или я не понял задачу?
0
 Аватар для Petr_S
213 / 230 / 87
Регистрация: 21.04.2013
Сообщений: 404
29.11.2014, 00:43  [ТС]
Памирыч, обычное приложение.
При задании значения свойства TopMost в Form2 нужно выполнить кое-какие действия. В примере это выдача сообщения MsgBox("TopMost Property", Title:="Form2").
Если использовать строку 25 (т.е. задать напрямую значение в Form2), то сообщение выводится, если перебирать циклом, то сообщение "TopMost Property" не выводится. Мне нужно перебирать в цикле и при этом должно выводится сообщение "TopMost Property".
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
29.11.2014, 01:04

Не по теме:

Хм, и правда странно. Поподставлял другие коллекции, сообщение не выводится.
Поковыряюсь еще, за темой прослежу



Добавлено через 12 минут
Пока что выяснилось следующее
При прямом обращении к форме Ваша перегрузка Public Overloads Property работает.
При переборе коллекции - нет, код вообще не выполняется в классе Form2

Боюсь, что "прямое обращение" не столько к форме как таковой, как к классу, унаследованному от формы.
Видимо, компилятор считает, что это немного разные понятия.
1
 Аватар для Petr_S
213 / 230 / 87
Регистрация: 21.04.2013
Сообщений: 404
29.11.2014, 01:25  [ТС]
Цитата Сообщение от Памирыч Посмотреть сообщение
Боюсь, что "прямое обращение" не столько к форме как таковой, как к классу, унаследованному от формы.
Видимо, компилятор считает, что это немного разные понятия.
Да, видимо, при обращении к Form происходит обращение к базовому, не перегруженному свойству.

Сейчас попробовал заменить
For Each f As Form In Me.OwnedForms
на
For Each f As Form2 In Me.OwnedForms

Заработало. Это, конечно, очень не правильный способ. Но работает.
Видимо, придется, сделать свой класс формы со своим перегруженным TopMost и наследовать его для своих форм. Если, конечно, не будет какого-нибудь другого решения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.11.2014, 01:25
Помогаю со студенческими работами здесь

Нужен TopMost код для формы
Здравствуйте, я пишу свой эксплоит 1 месяц, и там очень много функций + автообновление, и я хотел сделать настройки для моего эксплоита, и...

Открытие MsgBox поверх формы со свойством TopMost
Столкнулся с проблемой. Есть форма, через нее вызывается вторая форма у которой в свойствах включен TopMost. Через вторую форму...

2 формы topmost. Но одну нужно удерживать "выше"
у меня есть 2 формы с topmost = true. все прекрасно, но иногда необходимо, чтобы одна была над другой. как это сделать?

Как обратится к объекту другой формы
Как обратится к объекту формы из другой формы? NetBeans 7.1.2. В интернете, внятного ответа не нашел. NewJFrame.java ...

Не могу подключиться к своему роутеру
Не могу подключиться к своему роутеру!!!!


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера 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