Files
123123/ZA.CoreService.ESBCertificateManager/Services/CopyableErrorDialog.cs
T

134 lines
3.8 KiB
C#

namespace ZA.CoreService.ESBCertificateManager.Services;
/// <summary>
/// Fehlerdialog mit Text und Button „In Zwischenablage kopieren“.
/// Kopiert den Fehlertext beim Öffnen automatisch.
/// </summary>
public static class CopyableErrorDialog
{
public static void Show(
IWin32Window? owner,
string title,
string details)
{
string text = string.IsNullOrWhiteSpace(details)
? "(keine Fehlerdetails)"
: details.Trim();
TryCopy(text);
using Form dialog = new()
{
Text = title,
StartPosition = FormStartPosition.CenterParent,
FormBorderStyle = FormBorderStyle.FixedDialog,
MaximizeBox = false,
MinimizeBox = false,
ShowInTaskbar = false,
ClientSize = new Size(640, 420),
BackColor = Color.FromArgb(16, 28, 48),
ForeColor = Color.FromArgb(241, 245, 249),
Font = new Font("Segoe UI", 9.5f)
};
Label hint = new()
{
Text = "In Zwischenablage kopiert.",
Location = new Point(16, 12),
AutoSize = false,
Size = new Size(608, 28),
ForeColor = Color.FromArgb(208, 171, 57)
};
TextBox box = new()
{
Location = new Point(16, 44),
Size = new Size(608, 310),
Multiline = true,
ReadOnly = true,
ScrollBars = ScrollBars.Both,
WordWrap = false,
Text = text,
BackColor = Color.FromArgb(12, 22, 38),
ForeColor = Color.FromArgb(241, 245, 249),
BorderStyle = BorderStyle.FixedSingle,
Font = new Font("Consolas", 9f)
};
Label copyStatus = new()
{
Text = "✓ In Zwischenablage kopiert",
Location = new Point(16, 368),
AutoSize = true,
ForeColor = Color.FromArgb(90, 200, 140)
};
Button btnCopy = new()
{
Text = "Nochmal kopieren",
Location = new Point(280, 362),
Size = new Size(160, 36),
FlatStyle = FlatStyle.Flat,
BackColor = Color.FromArgb(39, 52, 73),
ForeColor = Color.FromArgb(241, 245, 249),
Cursor = Cursors.Hand
};
btnCopy.FlatAppearance.BorderColor =
Color.FromArgb(36, 74, 117);
btnCopy.Click += (_, _) =>
{
if (TryCopy(text))
{
copyStatus.Text = "✓ Erneut kopiert";
copyStatus.ForeColor =
Color.FromArgb(90, 200, 140);
}
else
{
copyStatus.Text = "Kopieren fehlgeschlagen";
copyStatus.ForeColor =
Color.FromArgb(220, 100, 100);
}
};
Button btnClose = new()
{
Text = "Schließen",
Location = new Point(456, 362),
Size = new Size(168, 36),
FlatStyle = FlatStyle.Flat,
BackColor = Color.FromArgb(0, 110, 182),
ForeColor = Color.White,
Cursor = Cursors.Hand,
DialogResult = DialogResult.OK
};
btnClose.FlatAppearance.BorderSize = 0;
dialog.Controls.Add(hint);
dialog.Controls.Add(box);
dialog.Controls.Add(copyStatus);
dialog.Controls.Add(btnCopy);
dialog.Controls.Add(btnClose);
dialog.AcceptButton = btnClose;
dialog.CancelButton = btnClose;
dialog.ShowDialog(owner);
}
private static bool TryCopy(string text)
{
try
{
Clipboard.SetText(text);
return true;
}
catch
{
return false;
}
}
}