c# 带有长输入消息的 MessageBox 提示将使按钮无法访问

问题描述

将 MessageBox.Show 与按钮和长输入消息一起使用将导致按钮实际上无法访问,因为它们处于屏幕外。认消息框无法调整大小或向下滚动,这意味着当发生这种情况时,没有真正的方法可以点击消息框中的“是”按钮。有没有办法确保按钮可访问?是否通过使 MessageBox 可调整大小、可滚动、根据屏幕大小截断消息等方式?

现在的临时解决方法是手动将消息截断为任意 40 行(这种情况不经常发生),但滚动条等肯定会更简洁。

我的代码在 720p 显示器上使用大约 50 行文本时会中断(不知道为什么还有人会有 720p 显示器......)

DialogResult dr = MessageBox.Show(this,message,"Please confirm",MessageBoxButtons.YesNoCancel,MessageBoxIcon.information);
if (dr == DialogResult.No || dr == DialogResult.Cancel)
    return ResponseStatus.Fail;
return ResponseStatus.Success;

我截断消息的hacky解决方

var lines = message.Split(new[] { "\r\n","\r","\n" },StringSplitOptions.None).ToList();
if (lines.Count() > 40)
{
    //try removing blank line formatting
    lines = message.Split(new[] { "\r\n",StringSplitOptions.RemoveEmptyEntries).ToList();
    if (lines.Count() > 40)
    {
        var count = lines.Count();
        lines = lines.GetRange(0,40);
        lines.Add($"Prompt too long,{count - 40} lines have been removed. The rest will be logged.");
        logger.Info("Extra prompt lines: ");
        foreach (var line in lines.Skip(40))
            logger.Info(line);
    }
            
    message = string.Join(Environment.NewLine,lines);
            
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)