.NET C# winform Tooltip 显示 超出 屏幕范围
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET C# winform Tooltip 显示 超出 屏幕范围相关的知识,希望对你有一定的参考价值。
如题。蛋疼啊。
自己重写的一个ExToolTip:ToolTip
,在显示时候,有时候因为显示范围过大会超出屏幕范围。
但是,他可以向上显示或向下显示ToolTip,但这个貌似是系统控制的挖。。。
如果要重写这部分,请问我要从哪里下手?
如上图,因为控件靠近屏幕底部,tooltip就只看到这上半部分。
如果他朝上显示就能看全了。。。要如何让他向上显示?
关键是Show的话没法显示图片。
.netframework 4.5可以设定tooltip位置,但是需要换vs2012.。。
蛋疼
怎么没法显示图片,要Show出来的窗体里放个picturebox控件,把路径传过去(或者直接在那个窗体里放好图片,这样只要传文字了)
show出来的那个窗体,标题栏什么的都去掉(BorderStyle属性里设的。定好位置,再弄个计时器,多少秒后自动关闭窗体。
c# winform .net 为用户控件创建按钮点击事件
【中文标题】c# winform .net 为用户控件创建按钮点击事件【英文标题】:c# winform .net create button click event for user control 【发布时间】:2021-08-19 20:08:15 【问题描述】:我对 c# winform (.net framework) 用户控件有问题。
我有一个“通知”用户控件,其中包含一个按钮和一些信息。 我有一个“今日清单”表格,dinamycal 使用数据库生成 UC。我不知道如何为按钮创建事件。当我单击一个按钮时,我想从 UC 获取一个信息(标签)。
图片:
UC(我想得到'label2'文本)
生成的 UC
我试过这种方法,但没有:
已编辑:
UC
public event EventHandler<ActionTaskEventArgs> ActionTaskClicked;
private void button1_Click(object sender, EventArgs e)
string cardid = label2.Text;
var args = new ActionTaskEventArgs(cardid);
ActionTaskClicked?.Invoke(this, args);
public class ActionTaskEventArgs : EventArgs
public ActionTaskEventArgs(string taskId)
TaskId = taskId;
public string TaskId get;
表格
//UC generating:
if (statusz[i] == "Kiadott")
listItems[i] = new notifications();
listItems[i].Title = title[i];
listItems[i].Details = details[i];
listItems[i].Id = id[i].ToString();
listItems[i].Finish = "Ma";
listItems[i].BtnTxt = "Kezdés";
listItems[i].BtnVisible = true;
listItems[i].color = Color.FromArgb(254, 95, 85);
flowLayoutPanel1.Controls.Add(listItems[i]);
listItems[i].ActionTaskClicked += this.ActionTask_Clicked;
//
private void ActionTask_Clicked(object sender, notifications.ActionTaskEventArgs e)
MessageBox.Show(e.TaskId);
有人可以帮帮我吗?
现在我得到一个错误:
void UC_Click(object sender, EventArgs e)
//I gave an error for the below row! Can't convert button type to notifications type i guess.
notifications obj = (notifications)sender;
MessageBox.Show(obj.Id);
【问题讨论】:
How to know in a Form the name of a Button clicked in a UserControl 如果我生成动态的,如何订阅主窗体中的按钮单击? 我不知道我做错了什么,但并没有真正起作用。我也一样,链接中的内容和您写的内容。但是当我点击按钮时,什么都不做。 我用新代码更新了问题。 我不知道我做错了什么,但现在可以了。非常感谢! 【参考方案1】:您可以通过定义自定义添加/删除访问器将用户控件的事件“转发”到按钮:
// UC:
public event EventHandler ButtonClick
add => btn.Click += value;
remove => btn.Click -= value;
并且在您的主表单中订阅notifications.Click
(这似乎是生成的多个孩子的用户控件)。但实际上你应该订阅子控件的ButtonClick
:
((UC)asd.Controls[0]).ButtonClick += Child0Click;
【讨论】:
我不确定我是否理解这一点,但我也看到你是匈牙利语。你能帮我找个地方吗? 我用更多缺失的部分更新了我的答案 它给我丢了这个错误:'System.InvalidCastException: 'Az objektum nem konvertálható „System.Windows.Forms.Panel” típusról „Retask.forms.notifications” típusra.'' 我应该把你的第二个代码? 当然,我从您的代码中看不到您的控件相互嵌入的深度。但我希望意图是明确的。更优雅的解决方案是在您的notifications
控件上创建一个 GetChild(int index)
方法,该方法在指定索引处返回 UC
。以上是关于.NET C# winform Tooltip 显示 超出 屏幕范围的主要内容,如果未能解决你的问题,请参考以下文章
C# .net4.5 winform程序 怎么在没有net环境运行?
C# .net4.5 winform程序 怎么在没有net环境运行?