以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]在窗口中打开包含richtextbox控件的窗口时鼠标右键菜单偏离  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=109294)

--  作者:jyh7081
--  发布时间:2017/11/8 21:23:00
--  [求助]在窗口中打开包含richtextbox控件的窗口时鼠标右键菜单偏离

[求助]在窗口中打开包含richtextbox控件的窗口时鼠标右键菜单偏离

 


此主题相关图片如下:截屏图片.jpg
按此在新窗口浏览图片

 

窗口打开窗口代码:

Forms("导航窗口").Controls("SplitContainer2").Panel1Collapsed = True  \'隐藏导航栏

Dim PB As WinForm.Panel = e.Form.Controls("Panel4")
Dim Name As String = "日记本"
Forms(Name).OPEN(-1000,-1500)
Forms(Name).BaseForm.TopLevel = False
Forms(Name).BaseForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
\'Forms(Name).BaseForm.Dock = System.Windows.Forms.DockStyle.Fill
\'PB.BaseControl.Controls.Clear
PB.BaseControl.Controls("panel5").visible = False   \'增加此句
PB.BaseControl.Controls.add(Forms(Name).BaseForm)
Forms(Name).BaseForm.left = (pb.width-Forms(Name).BaseForm.width) / 2
Forms(Name).BaseForm.top = (pb.height-Forms(Name).BaseForm.height) / 2
Forms("日记本").open


--  作者:有点甜
--  发布时间:2017/11/8 21:33:00
--  
 例子发上来测试。
--  作者:jyh7081
--  发布时间:2017/11/9 22:01:00
--  

测试示例做几次都没有成功,但大概找到原因了。

在主窗口内有个"panel1",次窗口显示richtextbox的也是个"panel1"。

当在主窗口显示次窗口时:在次窗口右键点击击鼠标时,右键菜单显示到了主窗口中。

请老师指教。谢谢!

 

1、自定义函数mytxt_MouseDown:

Dim sender = args(0)   \'rtf窗口鼠标右键
Dim e = args(1)

Dim f As WinForm.Form = Forms.ActiveForm
If f IsNot Nothing Then
    If e.Button = MouseButtons.Right Then \'假定按下的是鼠标右键
        ContextMenus("快捷菜单1").Show(f.controls("panel1"),e.x,e.y) \'则在鼠标位置显示快捷菜单
    End If
End If

 

2、窗口打开窗口代码:

Forms("导航窗口").Controls("SplitContainer2").Panel1Collapsed = True  \'隐藏导航栏

Dim PB As WinForm.Panel = e.Form.Controls("Panel4")
Dim Name As String = "日记本"
Forms(Name).OPEN(-1000,-1500)
Forms(Name).BaseForm.TopLevel = False
Forms(Name).BaseForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
\'Forms(Name).BaseForm.Dock = System.Windows.Forms.DockStyle.Fill
\'PB.BaseControl.Controls.Clear
PB.BaseControl.Controls("panel5").visible = False   \'增加此句
PB.BaseControl.Controls.add(Forms(Name).BaseForm)
Forms(Name).BaseForm.left = (pb.width-Forms(Name).BaseForm.width) / 2
Forms(Name).BaseForm.top = (pb.height-Forms(Name).BaseForm.height) / 2
Forms("日记本").open


--  作者:有点甜
--  发布时间:2017/11/9 23:03:00
--  

为什么要用下面这个?

 

Dim f As WinForm.Form = Forms.ActiveForm

 

多个窗口一起使用的使用的时候,控件不要重名就好了。控件名可以用窗口名+本来的名字。


--  作者:jyh7081
--  发布时间:2019/6/13 10:33:00
--  

甜老师好!

遇到老师楼上质疑的问题了:

我在窗口中的页面集合中有多个richtextbox同时使用,鼠标右键的快捷菜单怎样调用?自定义函数mytxt_MouseDown怎样修改?

谢谢!

 

1、自定义函数mytxt_MouseDown:

Dim sender = args(0)   \'rtf窗口鼠标右键
Dim e = args(1)

Dim f As WinForm.Form = Forms.ActiveForm
If f IsNot Nothing Then
    If e.Button = MouseButtons.Right Then \'假定按下的是鼠标右键
        ContextMenus("快捷菜单1").Show(f.controls("panel1"),e.x,e.y) \'则在鼠标位置显示快捷菜单
    End If
End If


--  作者:有点甜
--  发布时间:2019/6/13 10:55:00
--  

1、可以根据sender获取窗口名称,比如

 

msgbox(sender.parent.name)

msgbox(sender.parent.parent.name)

 

2、你不是可以给 richtextbox 命名的吗?添加的时候,命名,如

 

txt.name = e.form.name & "_abc"

 

然后事件里面直接使用,如

 

msgbox(sender.name)

 


--  作者:jyh7081
--  发布时间:2019/6/13 16:55:00
--  

老师好!

我在窗口的afterload中命名和赋值没有问题;但是鼠标右键不出现快捷菜单,不知道是哪里的问题?


1、AfterLoad

Dim ct1 As New Windows.Forms.RichTextBox
ct1.Dock = Windows.Forms.DockStyle.Fill
ct1.Name ="RichTextBox1"
e.Form.Controls("Panel1").BaseControl.Controls.Add(ct1)
ct1.DataBindings.Add("text", Tables("表A").Grid.DataSource, "第一列")
ct1.Font = new System.Drawing.Font("楷体", 12)    \'字体


Dim ct2 As New Windows.Forms.RichTextBox
ct2.Dock = Windows.Forms.DockStyle.Fill
ct2.Name ="RichTextBox2"
e.Form.Controls("Panel2").BaseControl.Controls.Add(ct2)
ct2.DataBindings.Add("text", Tables("表A").Grid.DataSource, "第二列")
ct2.Font = new System.Drawing.Font("楷体", 12)    \'字体

 

Dim ct3 As New Windows.Forms.RichTextBox
ct3.Dock = Windows.Forms.DockStyle.Fill
ct3.Name ="RichTextBox3"
e.Form.Controls("Panel3").BaseControl.Controls.Add(ct3)
ct3.DataBindings.Add("text", Tables("表A").Grid.DataSource, "第三列")
ct3.Font = new System.Drawing.Font("楷体", 12)    \'字体

------------------

2、MouseDown----?

If e.Button = MouseButtons.Right Then \'假定按下的是鼠标右键

    ContextMenus("快捷菜单1").Show(e.Form.Controls("RichTextBox1"),e.x,e.y) \'则在鼠标位置显示快捷菜单
End If

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目66.table

[此贴子已经被作者于2019/6/13 18:35:03编辑过]

--  作者:有点甜
--  发布时间:2019/6/13 17:09:00
--  

1、你要给richtextbox绑定事件啊;

 

2、代码改成,比如

 

Dim ct1 As New System.Windows.Forms.RichTextBox
ct1.Dock = System.Windows.Forms.DockStyle.Fill
ct1.Name =e.form.name & "_RichTextBox1"
e.Form.Controls("Panel1").BaseControl.Controls.Add(ct1)
ct1.DataBindings.Add("text", Tables("表A").Grid.DataSource, "第一列")
\'ct1.text = "在设计窗口的时候,应该先设置好分区面板的方向属性,该属性决定分区面板是水平分割,还是垂直分割"
ct1.Font = new System.Drawing.Font("楷体", 12)    \'字体

 

3、需要引用的时候,直接用

 

msgbox(sender.name)

msgbox(sender.parent.name)

 


--  作者:jyh7081
--  发布时间:2019/6/13 18:34:00
--  
这俩句代码放不进事件,提示未定义sender

msgbox(sender.name)

msgbox(sender.parent.name)



图片点击可在新窗口打开查看此主题相关图片如下:截屏图片.jpg
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2019/6/13 18:47:00
--  

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目66.table