Je dois afficher une boîte de message mais l'utilisateur doit pouvoir surligner et copier le texte dans la boîte de message. Comment pourrais-je y parvenir? FYI ceci en C#.Mettre le texte en surbrillance dans la boîte aux messages
Répondre
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.
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.
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
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.
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
Comment puis-je créer une boîte de message personnalisé? –
Créer un nouveau formulaire, et l'afficher avec ShowDialog –
Jhonny me battre à elle. – ChrisF