笔宽

赠款1842

新成员
已加入
2018年11月4日
留言内容
3
编程经验
Beginner
C#的新手
我有一些C#代码正在尝试修改。
当id在画布上绘制时,我想将pen.with设置为fixed。

我没有编写此代码,只是试图找出pen.with在哪里。
private void DrawMainCanvas()
{
    using (Graphics g = Graphics.FromImage(todraw_bmp))
    {
        g.Clear(Color.White);
        g.DrawImage(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));

        if (sb_ShowAllLines.Checked)
        {
            DrawRects(todraw_bmp, rects);
        }


        foreach (DrawRect r in LinesToDisplay)
        {
            if (r.str != "")
            {


                g.DrawString(r.str, r.font, new SolidBrush(r.clr), r.rect.X, r.rect.Y);
                SizeF textsize = g.MeasureString(r.str, r.font);

                r.rect.Width = (int) textsize.Width;
                //r.rect.Width = 16;
                r.rect.Height = (int) textsize.Height;
            }
            else
            {
                if (sb_Transparent.Checked)
                {
                    g.FillRectangle(new SolidBrush(Color.FromArgb(128, r.clr.R, r.clr.G, r.clr.B)), r.rect);
                }
                else
                {
                    g.FillRectangle(new SolidBrush(r.clr), r.rect);
                }
            }
        }
    }

    Image.bmp_to_screen();
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    if (loaded)
    {
        if (ActiveObj != null)
        {
            if (ActiveObj.obj.str == "") //selected line
            {
                Brush BrushRectSmall = new HatchBrush(HatchStyle.Percent50, Color.FromArgb(128, 128, 128, 128));
                e.Graphics.FillRectangle(BrushRectSmall, Image.to_scr(ActiveObj.PointRect(1)));
                e.Graphics.FillRectangle(BrushRectSmall, Image.to_scr(ActiveObj.PointRect(2)));
                e.Graphics.DrawLine(Pens.Black, Center(Image.to_scr(ActiveObj.PointRect(1))),
                    Center(Image.to_scr(ActiveObj.PointRect(2))));

            }
            else //selected text
            {
                e.Graphics.DrawRectangle(Pens.Black, Image.to_scr(ActiveObj.DrawRect()));
            }
        }
    }
}

感谢您的帮助和评论
 
由主持人最后编辑:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,524
地点
悉尼,澳大利亚
编程经验
10+
我已经对您的代码进行了编辑,以使其具有正确的格式并且没有丢失的花括号。以后请为我们做。如果您希望我们为您提供代码帮助,请使其尽可能易于阅读。

至于问题,我们是否可以假设您的意思是Pen对象的Width属性要设置?如果是这样,则需要创建(然后销毁)自己的Pen对象,而不是使用Pens类中的标准对象。例如,您的Paint事件处理程序使用Pens.Black两次。这种标准的Pen的宽度为1。如果您要自己指定宽度,则可以创建自己的Pen并使用它,例如,
using (var p = new Pen(Color.Black, 2.0F))
{
    // Use p here.
}

在“使用”块中,“ p”是一支黑色的笔,类似于Pens.Black,但宽度为2而不是1。
 

赠款1842

新成员
已加入
2018年11月4日
留言内容
3
编程经验
Beginner
感谢您的回复。
我已将此代码复制并粘贴到Visual Studio之外。
我希望它的格式现在可以让您更好地看到。
请让我知道是否可以。

我已经更改了代码。
private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            if (loaded)
            {
                if (ActiveObj != null)
                {
                    if (ActiveObj.obj.str == "") //selected line
                    {
                        using (var p = new Pen(Color.Black, 8.0F))
                        {
                            Brush BrushRectSmall = new HatchBrush(HatchStyle.Percent50, Color.FromArgb(128, 128, 128, 128));
                            e.Graphics.FillRectangle(BrushRectSmall, Image.to_scr(ActiveObj.PointRect(1)));
                            e.Graphics.FillRectangle(BrushRectSmall, Image.to_scr(ActiveObj.PointRect(2)));
                            e.Graphics.DrawLine(p,Center(Image.to_scr(ActiveObj.PointRect(1))), Center(Image.to_scr(ActiveObj.PointRect(2))));
                        }
                        
                        
                        }
                    else //selected text
                    {
                        using (var p = new Pen(Color.Black, 8.0F))
                        {
                            e.Graphics.DrawRectangle(p, Image.to_scr(ActiveObj.DrawRect()));
                        }
                            
                    }
                }
            }
        }



当我使用它时,它仍然有细线。
也许它在C#代码中的其他地方。
我是C#的新手。
谢谢你的帮助。
 
Last edited:

赠款1842

新成员
已加入
2018年11月4日
留言内容
3
编程经验
Beginner
我在粘贴的代码中看不到行号。我一定在做错事
我用了




现在好像有了行号。
这个可以吗 ?
谢谢您的帮助。
 
Last edited:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,524
地点
悉尼,澳大利亚
编程经验
10+
CODE标记不显示行号,也不使用语法突出显示。如果您出于特定原因想要添加自己的格式,例如突出显示特定的一行。 XCODE标记确实添加了行号和语法突出显示,但是您可能必须刷新页面才能看到它。通常,这是代码段的更好选择。您发布的最后一个代码应如下所示:
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    if (loaded)
    {
        if (ActiveObj != null)
        {
            if (ActiveObj.obj.str == "") //selected line
            {
                using (var p = new Pen(Color.Black, 8.0F))
                {
                    Brush BrushRectSmall = new HatchBrush(HatchStyle.Percent50, Color.FromArgb(128, 128, 128, 128));
                    e.Graphics.FillRectangle(BrushRectSmall, Image.to_scr(ActiveObj.PointRect(1)));
                    e.Graphics.FillRectangle(BrushRectSmall, Image.to_scr(ActiveObj.PointRect(2)));
                    e.Graphics.DrawLine(p, Center(Image.to_scr(ActiveObj.PointRect(1))), Center(Image.to_scr(ActiveObj.PointRect(2))));
                }
            }
            else //selected text
            {
                using (var p = new Pen(Color.Black, 8.0F))
                {
                    e.Graphics.DrawRectangle(p, Image.to_scr(ActiveObj.DrawRect()));
                }
            }
        }
    }
}

您应该检查IDE设置以进行代码格式化,然后,如果某个节的格式不正确,则删除最后一个花括号并重新键入它,即可格式化整个块。就是说,我已经安装了ReSharper,所以我并不总是确定它提供的功能以及VS中的标准。

至于这个问题,我看不到任何明显的东西。您只需要进行一些测试和调试。与其开始从其他地方复制大量代码,不如自己编写一些东西。从一个DrawLine调用开始,看看是否可以绘制具有所需厚度的线。如果然后您可以开始在那里一点一点地建立代码表单。软件开发不包括复制代码,运行代码,然后要求其他人对其进行修复。调试是一项关键技能,因为它能够隔离特定功能并对其进行测试。
 
最佳 底部