问题 没有油漆活动?!

aw48

活跃的成员
加入
2013年2月9日
福彩12选5走势图
35
地点
德国
编程经验
10+
你好,
使用frmbitmap的show / hide显示由form1 frmbitmap导入的位图仅显示一个空窗口,我发现不抛出Frmbitmap的Paint事件。这就是为什么我正在使用VisibleChanged事件。

Frmbitmap.show(此)从Form1的绘画活动调用。

C#:
    public partial class frmBitmap : Form
    {
        public frmBitmap()
                {
            InitializeComponent();
            BitmapOrigin = new Point(0,0);
        }

        private void frmBitmap_Paint(object sender, PaintEventArgs e)
        {
            if (Bitmap == null) return;
            e.Graphics.DrawImage(Bitmap, BitmapOrigin);
        }

        private void frmBitmap_VisibleChanged(object sender, EventArgs e)
        {
            switch(this.Visible) {
            case true :
                ParentOrigin = new Point(Owner.Left + (Owner.Width >> 1), Owner.Top + (Owner.Height >> 1));

                Graphics = this.CreateGraphics();
                if (Bitmap.Width != this.Width || Bitmap.Height != this.Height) {
                    SetPositionAndSize();
                }
                Graphics.DrawImage(Bitmap, BitmapOrigin);
                break;

            case false :
                Graphics.Clear(this.BackColor);
                Graphics.Dispose();
                break;
            }
        }

        private void SetPositionAndSize()
        {
            this.Width = Bitmap.Width;
            this.Height = Bitmap.Height;
            this.Left = ParentOrigin.X - (this.Width >> 1);
            this.Top = ParentOrigin.Y - (this.Height >> 1);
        }

        internal Bitmap Bitmap { get; set; }
        internal Point ParentOrigin { get; set; }
        private    Graphics    Graphics;
        private    Point    BitmapOrigin;
    }

任何人都可以对这个问题进行一些解释或也许是不同的方法吗?
提前致谢
 
最后编辑了主持人:

跳伞运动员

工作人员
加入
2019年4月6日
福彩12选5走势图
2,893
地点
切萨皮克,va.
编程经验
10+
有一个油漆活动。问题是你挂钩吗?你是否正在做任何力量重新涂料?
C#:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SimpleCS
{
    class MyForm : Form
    {
        public MyForm()
        {
            this.Paint += MyForm_Paint;
            var timer = new Timer() { Interval = 1000 };
            timer.Tick += Timer_Tick;
            timer.Enabled = true;
        }

        private void Timer_Tick(object sender, EventArgs e)
        {
            Invalidate();
        }

        private void MyForm_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawString($"Painting... {DateTime.Now}", SystemFonts.DefaultFont, SystemBrushes.ControlText, 30, 30);
        }
    }

    class Program
    {
        static void Main()
        {
            Application.Run(new MyForm());
        }
    }
}

产生此输出...
579
 

跳伞运动员

工作人员
加入
2019年4月6日
福彩12选5走势图
2,893
地点
切萨皮克,va.
编程经验
10+
frmbitmap.show(这个)是 从Form1的绘画活动中呼吁.
为什么要从父母表单的绘画活动?油漆事件应该用于绘画,而不是用于处理用户交互。

无论如何,这个位的 WM_PAINT.文档 可能证明有洞察力。
当应用程序的福彩12选5走势图队列中没有其他福彩12选5走势图时,系统会发送此福彩12选5走势图。 DispatchMessage. 确定发送福彩12选5走势图的位置; GetMessage. 确定要派遣的福彩12选5走势图。 GetMessage. 返回 WM_PAINT. 当应用程序的福彩12选5走势图队列中没有其他福彩12选5走势图时,福彩12选5走势图 DispatchMessage. 将福彩12选5走势图发送到相应的窗口过程。

窗口可能会导致呼叫的内部绘制福彩12选5走势图 redrawwindow. 使用rdw_internalpaint标志集。在这种情况下,窗口可能没有更新区域。申请可以称之为 getupdaterect. 函数确定窗口是否具有更新区域。如果 getupdaterect.返回零,应用程序不需要调用 BeginPaint.封面 functions.

:

系统发送内部 WM_PAINT. 福彩12选5走势图只有一次。内部后 WM_PAINT. 福彩12选5走势图已退回 GetMessage. 或者 偷看 或者被发送到窗口 updateWindow.,系统没有发布或进一步发送 WM_PAINT. 邮件直到窗口无效或直到 redrawwindow. 使用RDW_INTERNALPAINT标志集再次调用。
 

sh

众所周知的成员
加入
2018年9月5日
福彩12选5走势图
1,982
编程经验
10+
什么 do you mean by : imported by form1 frmBitmap ?

如果需要重新粉刷,你是否告诉它会发射吗?绘制控件时会发生绘制事件。事件处理程序在哪里制作油漆事件火灾?

如已经指出的那样,油漆事件用于绘画,而不是用于何时显示表单或用于用户操作的何种方式。连接您的活动是一个好主意,以便他们射击,但如果您使用专为用户交互的相应事件处理程序而不是设计用于绘制控件的那些,那将是一个更好的想法。如果在论坛上发布代码,您还可以记得使用代码标记。读它,因为它在眼睛上相当沉重。
 

aw48

活跃的成员
加入
2013年2月9日
福彩12选5走势图
35
地点
德国
编程经验
10+
在添加FRMbitMap之前,位图以Form1的Paint Event中显示,并在第一步中,我只是用Frmbitmap.show()替换rapimage。如果显示位图工作,就像我想要它一样,我将修改form1。
 
最佳 底部