2009-04-20 13 views

Répondre

0

Je ne pense pas qu'il est facile à faire avec le contrôle de texte par défaut mais vous pouvez essayer icsharpcode texteditor ou Alsing's text editor control

Je l'ai utilisé icsharpcode pour une substance similaire, il est assez facile de travailler avec.

7

Windows dispose d'une fonctionnalité cachée de copie du texte MessageBox lorsqu'un utilisateur clique sur CTRL + C lorsque la boîte de message est active.

Si vous devez autoriser un utilisateur à mettre le texte en surbrillance, vous devez créer une boîte de message personnalisée pour cela.

0

Créez une boîte de message personnalisée et utilisez une zone de texte désactivée avec les styles définis de manière appropriée pour afficher le message.

Selon le commentaire de Jhonny: Créer un nouveau formulaire, et l'afficher avec ShowDialog

+0

Comment puis-je créer une boîte de message personnalisé? –

+0

Créer un nouveau formulaire, et l'afficher avec ShowDialog –

+0

Jhonny me battre à elle. – ChrisF

0

Ajouter un nouveau formulaire à votre projet. Dans Visual Studio, vous pouvez le faire en accédant à Projet -> Ajouter un formulaire Windows.

Modifiez le formulaire jusqu'à ce qu'il soit suffisamment proche des boîtes de dialogue Windows standard. Quelques propriétés que vous aurez envie de changer:

  • FormBorderStyle
  • StartPosition
  • MaximizeBox
  • MinimizeBox
  • ShowIcon
  • ShowInTaskbar

Utilisez un ReadOnly Textbox pour de la forme étiquette. Et définissez BorderStyle de la zone de texte à Aucun.

Enfin, utilisez la méthode ShowDialog() du formulaire pour l'afficher en tant que boîte de dialogue modale.

PS. Vous devriez également le tester avec de grandes quantités de texte. Vous devrez peut-être définir le mode d'autosize du formulaire et définir la zone de texte à multiline et envelopper.

J'espère que cela aide.

1

Voici un code que j'ai utilisé pour créer un MessageBox personnalisé. Ce qui suit est la classe MessageBox:

' A custom MessageBox class 
' Written to allow custom button text, specifically to allow for bilingual messageboxes 
' 
Public Class CustomMessageBox 

    'Variables 
    Private _btn1Return As DialogResult 
    Private _btn2Return As DialogResult 
    Private _btn3Return As DialogResult 

    'Enumerate system icons 
    Enum SystemIcons 
    ErrorIcon = 1 
    WarningIcon = 2 
    QuestionIcon = 3 
    InformationIcon = 4 
    End Enum 

    'Enumerate possible button combinations 
    Enum ButtonTypes 
    YesNo = 1 
    YesNoCancel = 2 
    Ok = 3 
    OkCancel = 4 
    End Enum 

    'Enumerate possible default buttons 
    Enum DefaultButton 
    Button1 = 1 
    Button2 = 2 
    Button3 = 3 
    End Enum 


#Region "Constructor" 
    'Constructor 
    Public Sub New(ByVal text As String, ByVal caption As String, ByVal buttons As ButtonTypes, ByVal icon As SystemIcons, ByVal defaultButton As DefaultButton) 
    InitializeComponent() 
    Me.Text = caption 
    Me.msgBoxText.Text = text 
    SetupIcon(icon) 
    SetupButtons(buttons, defaultButton) 
    End Sub 
#End Region 

#Region "Functions" 
    'Set text and return values of all buttons. Also set focus to default button. 
    Private Sub SetupButtons(ByVal buttons As Integer, ByVal defaultButton As Integer) 
    Select Case buttons 
     Case 1 
     msgBoxButton1.Text = My.Resources.Caption_Yes 
     _btn1Return = Windows.Forms.DialogResult.Yes 
     msgBoxButton2.Text = My.Resources.Caption_No 
     _btn2Return = Windows.Forms.DialogResult.No 
     msgBoxButton3.Visible = False 
     Case 2 
     msgBoxButton1.Text = My.Resources.Caption_Yes 
     _btn1Return = Windows.Forms.DialogResult.Yes 
     msgBoxButton2.Text = My.Resources.Caption_No 
     _btn2Return = Windows.Forms.DialogResult.No 
     msgBoxButton3.Text = My.Resources.Caption_Cancel 
     _btn3Return = Windows.Forms.DialogResult.Cancel 
     Case 3 
     msgBoxButton1.Text = My.Resources.Caption_OK 
     _btn1Return = Windows.Forms.DialogResult.OK 
     msgBoxButton2.Visible = False 
     msgBoxButton3.Visible = False 
     Case 4 
     msgBoxButton1.Text = My.Resources.Caption_OK 
     _btn1Return = Windows.Forms.DialogResult.OK 
     msgBoxButton2.Text = My.Resources.Caption_Cancel 
     _btn2Return = Windows.Forms.DialogResult.Cancel 
     msgBoxButton3.Visible = False 
    End Select 

    'Set focus to specified default button 
    Select Case defaultButton 
     Case 1 
     msgBoxButton1.Focus() 
     Case 2 
     msgBoxButton2.Focus() 
     Case 3 
     msgBoxButton3.Focus() 
    End Select 

    End Sub 

    'Display specified icon 
    Private Sub SetupIcon(ByVal iconValue As Integer) 
    Dim icon As Icon = Nothing 
    Select Case iconValue 
     Case 1 
     icon = System.Drawing.SystemIcons.Error 
     Case 2 
     icon = System.Drawing.SystemIcons.Warning 
     Case 3 
     icon = System.Drawing.SystemIcons.Question 
     Case 4 
     icon = System.Drawing.SystemIcons.Information 
    End Select 

    Me.msgBoxIcon.Image = icon.ToBitmap 
    End Sub 
#End Region 

#Region "Events" 
    'Set return value when button is clicked. 
    Private Sub msgBoxButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles msgBoxButton1.Click 
    Me.DialogResult = _btn1Return 
    Me.Close() 
    End Sub 

    'Set return value when button is clicked. 
    Private Sub msgBoxButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles msgBoxButton2.Click 
    Me.DialogResult = _btn2Return 
    Me.Close() 
    End Sub 

    'Set return value when button is clicked. 
    Private Sub msgBoxButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles msgBoxButton3.Click 
    Me.DialogResult = _btn3Return 
    Me.Close() 
    End Sub 
#End Region 

End Class 

Et le code designer ici associé:

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ 
Partial Class CustomMessageBox 
    Inherits System.Windows.Forms.Form 

    'Form overrides dispose to clean up the component list. 
    <System.Diagnostics.DebuggerNonUserCode()> _ 
    Protected Overrides Sub Dispose(ByVal disposing As Boolean) 
     Try 
      If disposing AndAlso components IsNot Nothing Then 
       components.Dispose() 
      End If 
     Finally 
      MyBase.Dispose(disposing) 
     End Try 
    End Sub 

    'Required by the Windows Form Designer 
    Private components As System.ComponentModel.IContainer 

    'NOTE: The following procedure is required by the Windows Form Designer 
    'It can be modified using the Windows Form Designer. 
    'Do not modify it using the code editor. 
    <System.Diagnostics.DebuggerStepThrough()> _ 
    Private Sub InitializeComponent() 
    Me.msgBoxText = New System.Windows.Forms.Label 
    Me.msgBoxIcon = New System.Windows.Forms.PictureBox 
    Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel 
    Me.msgBoxButton1 = New System.Windows.Forms.Button 
    Me.msgBoxButton3 = New System.Windows.Forms.Button 
    Me.msgBoxButton2 = New System.Windows.Forms.Button 
    CType(Me.msgBoxIcon, System.ComponentModel.ISupportInitialize).BeginInit() 
    Me.TableLayoutPanel1.SuspendLayout() 
    Me.SuspendLayout() 
    ' 
    'msgBoxText 
    ' 
    Me.msgBoxText.AutoSize = True 
    Me.msgBoxText.Cursor = System.Windows.Forms.Cursors.Cross 
    Me.msgBoxText.Dock = System.Windows.Forms.DockStyle.Fill 
    Me.msgBoxText.FlatStyle = System.Windows.Forms.FlatStyle.Flat 
    Me.msgBoxText.Location = New System.Drawing.Point(59, 0) 
    Me.msgBoxText.MaximumSize = New System.Drawing.Size(245, 0) 
    Me.msgBoxText.Name = "msgBoxText" 
    Me.msgBoxText.Padding = New System.Windows.Forms.Padding(0, 10, 0, 10) 
    Me.msgBoxText.Size = New System.Drawing.Size(39, 33) 
    Me.msgBoxText.TabIndex = 6 
    Me.msgBoxText.Text = "Label1" 
    ' 
    'msgBoxIcon 
    ' 
    Me.msgBoxIcon.Dock = System.Windows.Forms.DockStyle.Left 
    Me.msgBoxIcon.Location = New System.Drawing.Point(0, 0) 
    Me.msgBoxIcon.Name = "msgBoxIcon" 
    Me.msgBoxIcon.Padding = New System.Windows.Forms.Padding(15, 10, 0, 0) 
    Me.msgBoxIcon.Size = New System.Drawing.Size(59, 53) 
    Me.msgBoxIcon.TabIndex = 4 
    Me.msgBoxIcon.TabStop = False 
    ' 
    'TableLayoutPanel1 
    ' 
    Me.TableLayoutPanel1.AutoSize = True 
    Me.TableLayoutPanel1.ColumnCount = 5 
    Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) 
    Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle) 
    Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle) 
    Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle) 
    Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) 
    Me.TableLayoutPanel1.Controls.Add(Me.msgBoxButton1, 1, 0) 
    Me.TableLayoutPanel1.Controls.Add(Me.msgBoxButton3, 3, 0) 
    Me.TableLayoutPanel1.Controls.Add(Me.msgBoxButton2, 2, 0) 
    Me.TableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom 
    Me.TableLayoutPanel1.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.FixedSize 
    Me.TableLayoutPanel1.Location = New System.Drawing.Point(0, 53) 
    Me.TableLayoutPanel1.Name = "TableLayoutPanel1" 
    Me.TableLayoutPanel1.Padding = New System.Windows.Forms.Padding(0, 0, 0, 10) 
    Me.TableLayoutPanel1.RowCount = 1 
    Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle) 
    Me.TableLayoutPanel1.Size = New System.Drawing.Size(305, 39) 
    Me.TableLayoutPanel1.TabIndex = 5 
    ' 
    'msgBoxButton1 
    ' 
    Me.msgBoxButton1.AutoSize = True 
    Me.msgBoxButton1.Location = New System.Drawing.Point(34, 3) 
    Me.msgBoxButton1.Name = "msgBoxButton1" 
    Me.msgBoxButton1.Size = New System.Drawing.Size(75, 23) 
    Me.msgBoxButton1.TabIndex = 0 
    Me.msgBoxButton1.Text = "Button1" 
    Me.msgBoxButton1.UseVisualStyleBackColor = True 
    ' 
    'msgBoxButton3 
    ' 
    Me.msgBoxButton3.AutoSize = True 
    Me.msgBoxButton3.Location = New System.Drawing.Point(196, 3) 
    Me.msgBoxButton3.Name = "msgBoxButton3" 
    Me.msgBoxButton3.Size = New System.Drawing.Size(75, 23) 
    Me.msgBoxButton3.TabIndex = 2 
    Me.msgBoxButton3.Text = "Button3" 
    Me.msgBoxButton3.UseVisualStyleBackColor = True 
    ' 
    'msgBoxButton2 
    ' 
    Me.msgBoxButton2.AutoSize = True 
    Me.msgBoxButton2.Location = New System.Drawing.Point(115, 3) 
    Me.msgBoxButton2.Name = "msgBoxButton2" 
    Me.msgBoxButton2.Size = New System.Drawing.Size(75, 23) 
    Me.msgBoxButton2.TabIndex = 1 
    Me.msgBoxButton2.Text = "Button2" 
    Me.msgBoxButton2.UseVisualStyleBackColor = True 
    ' 
    'CustomMessageBox 
    ' 
    Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 
    Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 
    Me.AutoSize = True 
    Me.ClientSize = New System.Drawing.Size(305, 92) 
    Me.Controls.Add(Me.msgBoxText) 
    Me.Controls.Add(Me.msgBoxIcon) 
    Me.Controls.Add(Me.TableLayoutPanel1) 
    Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog 
    Me.MaximizeBox = False 
    Me.MinimizeBox = False 
    Me.Name = "CustomMessageBox" 
    Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide 
    Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen 
    Me.Text = "MessageBox" 
    Me.TopMost = True 
    CType(Me.msgBoxIcon, System.ComponentModel.ISupportInitialize).EndInit() 
    Me.TableLayoutPanel1.ResumeLayout(False) 
    Me.TableLayoutPanel1.PerformLayout() 
    Me.ResumeLayout(False) 
    Me.PerformLayout() 

    End Sub 
    Friend WithEvents msgBoxText As System.Windows.Forms.Label 
    Friend WithEvents msgBoxIcon As System.Windows.Forms.PictureBox 
    Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel 
    Friend WithEvents msgBoxButton1 As System.Windows.Forms.Button 
    Friend WithEvents msgBoxButton3 As System.Windows.Forms.Button 
    Friend WithEvents msgBoxButton2 As System.Windows.Forms.Button 
End Class 
Questions connexes