C# 在子窗口中绘图怎么无法显示呢,好像是一闪而过

问题描述

我在子窗口中定义了两个picturebox,Graphicsx1,Graphicsx2;x1=this.fan_pictureBox.CreateGraphics();x2=this.pictureBox1.CreateGraphics();然后在Onpaint里面Penpen1=newPen(Color.Blue,4);x1.DrawRectangle(pen1,10,10,20,20);x2.DrawRectangle(pen1,10,10,20,20);在主窗口里面有一个按钮启动:fm=newAirForm();fm.Show();运行之后发现没有矩形出来,这是什么原因呢,仔细看好像矩形出来又消失了?

解决方案

解决方案二:
如果是wpf的话,对话框的背景应设置为null
解决方案三:
不好意思看错了,是OnPaintt啊
解决方案四:
你在form1里新建一个按钮,点击后调用fm.Invalidate()试试呢
解决方案五:
是因为Paint顺序,先是Form.Paint,然后是PictureBox.Paint第一次加载的时候在PictureBox.Paint的时候将Form.Paint中画的矩形覆盖掉了,在你焦点离开Form再重新回到Form的时候,Form.Paint重新被调用(此时PictureBox.Paint)没有被调用,这时候矩形就显示出来了。
解决方案六:
在窗口绘制矩形问题privatevoidbutton1_Click(objectsender,EventArgse){Graphicsgraphics=this.CreateGraphics();//声明一个Graphics对象PenmyPen=newPen(Color.Blue,8);//实例化Pen类//调用Graphics对象的DrawRectangle方法graphics.DrawRectangle(myPen,10,10,150,100);}
解决方案七:
最终用了把矩形画在背景上,设置picturebox的背景为刚才的Image,图形显示出来了,关于phoenix8343_cn兄提到的PAINT的顺序,我只用了protectedoverridevoidOnPaint(PaintEventArgse)//这个重载函数,这个应该是FORM的,不知道PICTUREBOX的Onpaint如何写?
解决方案八:
能不能获取PICTUREBOX的Graphic然后直接画呢
解决方案九:
g.Refresh()
解决方案十:
引用

不知道PICTUREBOX的Onpaint如何写?

在pictureBox的事件中有的。找到后双击它就出来了。
解决方案十一:
然后引用

然后在Onpaint里面Penpen1=newPen(Color.Blue,4);x1.DrawRectangle(pen1,10,10,20,20);x2.DrawRectangle(pen1,10,10,20,20);

时间: 2024-08-02 17:30:59

C# 在子窗口中绘图怎么无法显示呢,好像是一闪而过的相关文章

在子窗口中绘图,但是运行后不出现

问题描述 如题,代码如下:protectedoverridevoidOnPaint(PaintEventArgse){base.OnPaint(e);Graphicsg=this.CreateGraphics();HatchBrushhBrush1=newHatchBrush(HatchStyle.Cross,Color.PaleGoldenrod,Color.White);RectanglerecCurrent=newRectangle(20,80,60,20);e.Graphics.Fill

请教:如何在子窗口中使用父窗口中的listview控件?!

问题描述 有一个父窗口和子窗口.现在想在子窗口中使用父窗口中的listview,请问该如何做呢? 解决方案 解决方案二:写个管理类,对父窗口的界面管理.字窗口能访问这个管理类就行了!解决方案三:ListViewlist=(ListView)Application.OpenForms["Form1"].Controls["listView1"];if(list!=null)...... 解决方案四:在show子窗口的时候,将ListView传递给它

JS获取子窗口中返回的数据实现方法_javascript技巧

在开发的时候,遇到了这样一个问题,客户填写自己的收货地址,可以新建,但同时也可以选择之前填写的,由于我们的客户本身就是商户,地址繁多,把它之前的地址简单用个下拉框罗列出来显然不合适,并且客户要求能够对地址通过姓名筛选,这样,选择地址就必须再开一个小窗来完成了,那么,小窗中填写的值怎么回传呢? js有个方法showModalDialog在这种情况下用的就比较多了,其作用是打开一个模态窗口,什么事模态窗口?就是打开后不能操作父窗口,只有子窗口操作完了,关闭了,才可以继续父窗口的动作.回到最开始的问题

c#窗体程序主窗口中tabPage中显示子窗口中控件tabPage不能显示第二页

问题描述 c#窗体程序主窗口中tabPage中显示的子窗口中控件tabPage不能显示第二页1,主窗口FROM1中有一个控件tabPage,用如下代码把窗口FROM2显示到主窗口FROM1的tabPage中来 from2f=newfrom2();f.TopLevel=false;f.Show();f.Parent=this.tabControl1.SelectedTab;2,但是子窗口的tabPage只能显示第一页的内容,第二页的显示不了,用弹出窗口就能正常显示第二页.3,第二页的内容其实有如下

SDL 在指定窗口中绘图

SDL默认会自动创建绘图窗口,可以通过设置环境变量,让其在指定窗口绘图.代码如下:  [cpp] view plaincopyprint? char sdl_var[64];      sprintf(sdl_var, "SDL_WINDOWID=%d", m_screen.GetSafeHwnd());//主窗口句柄    SDL_putenv(sdl_var);     注意:环境设置必需在SDL_Init(...)之前进行,否则不起作用

JavaScript子窗口ModalDialog中操作父窗口对像_基础知识

在ModalDialog中操作父窗口对象 1.不能使用window.parent Window.parent是用来在frame中进行操作的,在对话框中不能用来操作父窗口对象 2.正确的做法 调用modaldialog时通过传参数的方式操作 例: 需求 父窗口页面为a.html 子窗口页面为b.html.a.html中有文本框id为test1,在打开的对话框中点击按钮,将a.html的文本框值改为"子窗口值". 实现 打开对话框时把test1作为参数传给子窗口,在子窗口中获取参数,将参数

改变窗口中的光标形状

如何在注册表中查找默认浏览器信息? 如何改变窗口中的光标形状? 如何避免资源ID冲突? 如何在注册表中查找默认浏览器位置的定义?我需要知道EXE文件的路径和名称以便启动一个应用程序会话.我的目的很简单,就是打开默认的浏览器,这样用户能够象普通程序一样使用它,而不是在我设计的程序窗口内浏览因特网. Rolf Wenger 据我所知,在Window中没有专门指定默认浏览器的注册表键值或设定值.即使专家也很难弄清楚整个注册表,更何况常人.我知道可能存在这样一个键值, HKCU\System\Mumbl

MFC父窗口控制子窗口CListCtrl控件刷新的问题

问题描述 MFC父窗口控制子窗口CListCtrl控件刷新的问题 目标:父窗口单击按钮,向子窗口发送一个消息:子窗口的消息处理函数中,调用列表显示函数来刷新列表数据. 我的代码: // 父窗口void CDlg4::OnButtonClick(){ CDlg43 *dlg = new CDlg43(); dlg->Create(IDD_DIALOG_43this); if (NULL == dlg) { AfxMessageBox(""failed""); d

消息处理-Win32消息,子窗口如何接受WM_KEYDOWN消息

问题描述 Win32消息,子窗口如何接受WM_KEYDOWN消息 我有一个主窗口,里面创建了一个子窗口.所有的操作其实都是为了对子窗口里的图片进行处理.但是一些控件如Button等放在主窗口.现在我想要这个子窗口处理我的PAGEUP和PAGEDOWN键盘消息,但是在主窗口的消息处理函数中可以接收到WM_KEYDOWN消息,而在子窗口中却不能接收到.我知道可以通过主窗口主动POST消息给子窗口实现,但是我想知道能不能直接在子窗口里接收消息.比如,主窗口放弃处理这个消息,并传递给子窗口.我对Wind