MNIHD 2024-07-11 09:41 采纳率: 33.3%
浏览 3
已结题

visual studio自制控件

我正在重写textbox控件,但写完后每次在窗体上插入这个控件时visual studio就会停止运行
我的代码看起来也没问题啊,为什么一插入窗体就死机呢

public partial class textbox : UserControl
{
    public textbox()
    {
        InitializeComponent();
    }

    public Color Color { get; set; } = Color.White;

    public Color ShapeColor { get; set; } = Color.DodgerBlue;

    public string TextboxText
    {
        get
        {
            return TextboxText;
        }
        set
        {
            TextboxText = value;
        }
    }
    
    private void textbox_Paint(object sender, PaintEventArgs e)
    {
        Graphics graphics = e.Graphics;
        graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        Pen pen = new Pen(ShapeColor, 1);
        graphics.DrawArc(pen, 0, 0, 8, 8, 180, 90);
        graphics.DrawLine(pen, 4, 0, this.Width - 5, 0);
        graphics.DrawArc(pen, this.Width - 9, 0, 8, 8, 270, 90);
        graphics.DrawLine(pen, this.Width - 1, 4, this.Width - 1, this.Height - 5);
        graphics.DrawArc(pen, this.Width - 9, this.Height - 9, 8, 8, 0, 90);
        graphics.DrawLine(pen, 4, this.Height - 1, this.Width - 5, this.Height - 1);
        graphics.DrawArc(pen, 0, this.Height - 9, 8, 8, 90, 90);
        graphics.DrawLine(pen, 0, 4, 0, this.Height - 5);
        richTextBox1.BackColor = Color;
        richTextBox1.Text = TextboxText;
    }

    private void textbox_Load(object sender, EventArgs e)
    {
        richTextBox1.Height = this.Height - 6;
        richTextBox1.Width = this.Width - 6;
    }

    private void textbox_Resize(object sender, EventArgs e)
    {
        richTextBox1.Height = this.Height - 6;
        richTextBox1.Width = this.Width - 6;
    }
}

这是visual studio的特性吗?

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-11 09:41
    关注

    引自免费微信小程序:皆我百晓生

    从你的代码来看,Visual Studio死机的问题可能并不是由你的代码直接导致的。然而,你的代码中存在一些潜在的问题可能会导致运行时错误或性能问题。我会指出这些问题并给出可能的解决方案。另外,我也会探讨一些Visual Studio可能遇到的问题和解决方案。

    代码问题:

    1. TextboxText属性的setter方法中,你正在尝试递归地设置TextboxText的值,这会导致无限递归并可能导致堆栈溢出错误。你应该使用其他变量来存储值,然后再设置属性。

    修改后的代码可能如下:

    public string TextboxText
    {
        get
        {
            return _textboxText;
        }
        set
        {
            _textboxText = value;
            richTextBox1.Text = _textboxText;  // 使用私有变量来避免递归调用
        }
    }
    private string _textboxText;
    

    Visual Studio相关问题:

    1. Visual Studio有时可能会因为各种原因(如内存泄漏、资源占用过高)而崩溃或停止响应。你可以尝试重启Visual Studio或使用任务管理器关闭一些资源消耗过大的进程。同时确保你的Visual Studio是最新版本,旧版本的Visual Studio可能存在已知的bug或兼容性问题。你也可以尝试更新到最新的.NET Framework或.NET Core版本。
    2. 确保你的自定义控件没有无限循环的事件处理或其他可能导致死机的逻辑。比如在你的Paint事件中,确保没有无限循环绘制或者复杂的计算导致性能下降。你的Paint事件中的代码看起来并没有明显的无限循环或性能问题,但还是要注意调试过程中的行为变化。如果怀疑有问题,可以添加一些日志记录或使用性能分析工具(如Visual Studio的性能分析器)来检查性能问题。
    3. 确保你的自定义控件中的所有资源(如位图、字体等)都已正确释放。资源泄漏可能会导致应用程序性能下降或崩溃。你可以使用Visual Studio的资源管理器来检查内存和资源使用情况。同时确保在控件的Dispose方法中正确释放所有资源。虽然你的代码中似乎并没有直接使用位图等资源,但仍然值得注意这个常见问题。同时如果你在自定义控件内部使用RichTextBox等其它控件时没有正确地处理其资源释放,也可能导致问题。因此确保正确地管理所有子控件的资源也非常重要。

    如果以上建议都不能解决你的问题,建议你使用Visual Studio的调试工具进行调试,看看是否有任何异常被抛出或堆栈跟踪信息可以帮助你定位问题所在。同时,你也可以尝试简化你的代码以缩小问题的范围,比如先移除一些不必要的逻辑或功能,看看问题是否仍然存在。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 7月19日
  • 已采纳回答 7月11日
  • 创建了问题 7月11日

悬赏问题

  • ¥50 求恶意流量检测系统搭建教程( C++ python C)
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)
  • ¥20 web页面如何打开Outlook 365的全球离线通讯簿功能
  • ¥15 io.jsonwebtoken.security.Keys