none
Возможно разместить MessageBox по центру формы программы ? RRS feed

  • Вопрос

  • Не нашел ответа на этот вопрос, так может кто нибудь знает способ ?

    пока создаю собственные MessageBox программно

    'Нажатие кнопки справка
      Private Sub Button4_Click(ByVal sender As System.Object, _
                   ByVal e As System.EventArgs) _
                   Handles Button4.Click
    
        'Объявляем новую форму и объекты элементов управления
        Dim form2 As New Form
        Dim btnOk As New Button
        Dim txtInfo As New Label
    
        '''''' Устанавливаем свойства метки
        txtInfo.BorderStyle = BorderStyle.None
        txtInfo.BackColor = Color.White
        txtInfo.Size = New Size(450, 400 - 70)
        txtInfo.Location = New Point(0, 0)
        '2)Текст сообщения
        ' В показанном ниже коде используется новый класс StringWriter 
        'для построения строки в памяти.
        ' Команды WriteLine добавляют код в буфер строк вместе 
        'со знаками возврата каретки и перевода строки.
        Dim writer As IO.StringWriter = New IO.StringWriter()
    
        With writer
          .WriteLine("")
          .WriteLine("")
          .WriteLine(" Перед применением программы протестируйте ее на соответствие")
          .WriteLine(" методикам, принятым на Вашем предприятии или Вашему личному опыту.")
          .WriteLine(" В любом случае выбор полностью зависит от Вас.")
          .WriteLine("")
          .WriteLine(" Соотношения между напряжением, током и мощностью:")
          .WriteLine("    в однофазной (фаза-ноль) сети:      P = U * I * cos(φ)")
          .WriteLine("    в трехфазной сети (фаза-фаза-фаза): P = √3 * U * I * cos(φ)")
          .WriteLine("      где:")
          .WriteLine("    Р - Мощность потребителя")
          .WriteLine("    U - Напряжение в сети")
          .WriteLine("    I -Ток нагрузки")
          .WriteLine("    в программе cos(φ) = 1")
          .WriteLine("")
          .WriteLine(" Сечение токопроводящей жилы, берется из таблиц.")
          .WriteLine("    ПУЭ, Таблица 1.3.4; Таблица 1.3.5; Таблица 1.3.6; Таблица 1.3.7;")
          .WriteLine("    ГОСТ 16442-80, Таблица 23; Таблица 24")
          .WriteLine("")
          .WriteLine(" Сечения приняты из расчета нагрева жил до 65°С при температуре ")
          .WriteLine(" окружающей среды +25°С. При определении количества проводов, ")
          .WriteLine(" прокладываемых Закрыто*, нулевой рабочий провод четырехпроводной")
          .WriteLine(" системы трехфазного тока (или заземляющий провод) в расчет не входит.")
          .WriteLine(" Закрыто* - В трубе, в коробе , в пучке")
          .WriteLine("")
        End With
        txtInfo.Text = writer.ToString() 'Наш текст
    
        '''''' Устанавливаем свойства кнопки
        btnOk.Text = "OK"
        btnOk.Size = New Size(75, 25)
        btnOk.Location = New Point(310, 340)
    
        '''''' Устанавливаем свойства формы
        '1)Определяем свойство Text и стиль границ формы
        form2.Text = "Справка"
        form2.FormBorderStyle = FormBorderStyle.FixedDialog
        form2.MaximizeBox = False
        form2.MinimizeBox = False
        '2)Объявляем структуру Rectangle, хранящую размеры формы
        'Верхний левый угол формы (200, 100)
        'Ширина и высота формы (410, 400)
        Dim Form2Rect As New Rectangle(200, 100, 410, 400)
        'Устанавливаем границы формы с помощью этого объекта Rectangle
        form2.DesktopBounds = Form2Rect
        '3)Указываем, положение формы по центру 
        ' родительской формы
        form2.StartPosition = FormStartPosition.CenterParent
        '4)Определяем событие кнопки формы
        form2.CancelButton = btnOk
    
        ''''''Добавляем новые объекты в коллекцию Controls
        form2.Controls.Add(txtInfo)
        form2.Controls.Add(btnOk)
    
        ''''''Отображаем форму как модальное диалоговое окно
        Beep()
        form2.ShowDialog()
    
    
    
      End Sub
    
    • Перемещено SachinW 1 октября 2010 г. 21:08 MSDN Forums Consolidation (От:Начинающие разработчики)
    7 августа 2010 г. 16:53

Ответы

Все ответы

  • Встроенный Класс MessageBox  не возможно изменить.

    Может кто поделится собственным классом MessageBox

    8 августа 2010 г. 18:50
  • Есть вариант с хуком на появление message box. Посмотри http://www.codeproject.com/KB/dialog/CenterDialog.aspx.

    В комментах есть код, заставляющий заработать хак под висту.

    IMHO, не стоит выводить такие огромные куски текста message box-ом. С него копировать неудобно :)

    • Помечено в качестве ответа a.lisov 9 августа 2010 г. 15:12
    9 августа 2010 г. 9:34
  • PashaPash Спасибо за ответ буду разбиратся.

    Сам вышел из положения созданием функции доработав код выше . Функция создает окно сообщения программно.

    Public Sub CreateMyMsgBox(ByVal Prompt As Object, _
     ByVal Font_Name As String, ByVal Font_h As String, _
     ByVal Title As Object, ByVal Picture As Integer)
     Dim formMsg As New Form
     Dim panel1 As New TableLayoutPanel
     Dim label1 As New Label()
     Dim btnOk As New Button
     Dim PicBox As New PictureBox
     Dim Font As New _
     System.Drawing.Font(Font_Name, Font_h)
    
     ''''''' Инициализация Panel.
     panel1.AutoSize = True
     panel1.Size = New Size(240, 70)
     panel1.Dock = DockStyle.Fill
    
     ''''''' Инициализация Label.
     label1.Text = Prompt
     label1.Font = Font
     label1.TextAlign = ContentAlignment.MiddleLeft
     label1.Padding = New Padding(10)
     label1.Margin = New Padding(0)
     label1.AutoSize = True
     label1.Dock = DockStyle.Fill
     'Макс Размер текстового поля(формы)
     label1.MaximumSize = New Size(470, 450)
     'Мин Размер текстового поля(формы)
     label1.MinimumSize = New Size(240, 70)
     'Цвет фона текстового поля
     label1.BackColor = Color.White
     'Фоновый рисунок текстового поля
     'label1.Image = '- путь
    
     '''''' Инициализация кнопки
     btnOk.Text = "OK"
     btnOk.Size = New Size(80, 25)
     btnOk.Location = New Point(0, 0)
     btnOk.Anchor = AnchorStyles.Bottom
     btnOk.Anchor = AnchorStyles.Right
     btnOk.Margin = New Padding(0, 6, 20, 6)
     'Определяем событие кнопки 
     formMsg.CancelButton = btnOk
    
     '''''' Инициализация PictureBox
     PicBox.Dock = DockStyle.Fill
     PicBox.Margin = New Padding(0, 6, 0, 6)
     PicBox.SizeMode = PictureBoxSizeMode.Zoom
     PicBox.Height = 30
     'Путь к рисунку
     PicBox.Image = My.Resources.Info___копия
    
     '''''' Инициализация формы formMsg
     formMsg.Text = Title
     formMsg.Size = New Size(240, 70)
     formMsg.FormBorderStyle = FormBorderStyle.FixedDialog
     formMsg.MaximizeBox = False
     formMsg.MinimizeBox = False
     formMsg.MaximumSize = New Size(520, 460)
     formMsg.MinimumSize = New Size(240, 70)
     formMsg.FormBorderStyle = _
     Windows.Forms.FormBorderStyle.FixedDialog
     formMsg.AutoSize = True
     formMsg.Margin = New Padding(0)
     formMsg.StartPosition = FormStartPosition.CenterParent
    
     ' Добавляем Контролы в Panel.
     If Picture = 1 Then
      panel1.Controls.Add(PicBox)
     End If
     panel1.Controls.Add(label1)
     panel1.Controls.Add(btnOk)
    
     ' Добавляем Panel в коллекцию формы
     formMsg.Controls.Add(panel1)
    
     'Отображаем форму как модальное диалоговое окно
     Beep()
     formMsg.ShowDialog()
     End Sub

    Размер изменяется авто взависемости от длины текста 

    есть возможность менять шрифт и размер текста

    показывать или нет рисунок сообщения (1-да; 0-нет)

    вот пример использования

    CreateMyMsgBox("Пожалуйста, вводите только цифры. ", _
        "Arial", 9, "Ошибка при задании параметров", 1)

    Вроде работает неплохо. Использую для вывода сообщений об ошибках с рисунком (рисунок формата png три треугольника с "!" на прозрачном фоне в линию)и информации (без рисунка).

    9 августа 2010 г. 15:11