C# 为多个按钮创建工具提示
下面的代码假设将信息添加到从数据库中获取的工具提示中(类密码执行此操作(这是实际工作的部分))。我尝试在FOR循环中执行此操作,但它警告我这一行:C# 为多个按钮创建工具提示,c#,winforms,tooltip,oledb,C#,Winforms,Tooltip,Oledb,下面的代码假设将信息添加到从数据库中获取的工具提示中(类密码执行此操作(这是实际工作的部分))。我尝试在FOR循环中执行此操作,但它警告我这一行: toolTip1.SetToolTip(Convert.ToString(letter),"Name: "+fullname+" ("+cdn.GetCodon1()+")" +"\n Begin: "+cdn.GetStart()+", End: "+cdn.GetEnd()+""); 我有20
toolTip1.SetToolTip(Convert.ToString(letter),"Name: "+fullname+" ("+cdn.GetCodon1()+")"
+"\n Begin: "+cdn.GetStart()+", End: "+cdn.GetEnd()+"");
我有20个按钮,它们以a-z字母命名,除了6个特定字母(请参见FOR中的IF)
代码如下:
private void UpdateToolTipButton()
{
string fullname;
Codons cdn;
char letter='a';
//get info about every amino acid from database
OleDbConnection dataConnection = new OleDbConnection();
dataConnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Projects_2012\\Project_Noam\\Access\\myProject.accdb";
dataConnection.Open();
for(int i=1;i<=26;i++,letter++)
{
if((letter!='b')&&(letter!='e' )&& (letter!='j') && (letter!='o')&& (letter!='u') && (letter!='z'))
{
OleDbCommand datacommand = new OleDbCommand();
datacommand.Connection = dataConnection;
datacommand.CommandText = "SELECT tblCodons.codonsFullName"
+" FROM tblCodons"
+" WHERE tblCodons.codonsCodon1="+letter;
OleDbDataReader dataReader = datacommand.ExecuteReader();
dataReader.Read();
fullname = dataReader.GetString(0);
cdn = new Codons(fullname);
toolTip1.SetToolTip(Convert.ToString(letter),"Name: "+fullname+" ("+cdn.GetCodon1()+")"
+"\n Begin: "+cdn.GetStart()+", End: "+cdn.GetEnd()+"");
}
}
}
private void updatetoltipbutton()
{
字符串全名;
密码子cdn;
字符class='a';
//从数据库中获取每种氨基酸的信息
OleDbConnection dataConnection=新的OleDbConnection();
dataConnection.ConnectionString=“Provider=Microsoft.ACE.OLEDB.12.0;数据源=C:\\Projects\u 2012\\Project\u Noam\\Access\\myProject.accdb”;
dataConnection.Open();
对于(int i=1;i您不应该为每个项目打开一个新的读卡器,在where子句中,您还缺少项目周围的单引号,但where子句无论如何都不是必需的\(^\u^)
无论如何,这是我的解决方案
private char _letter;
private string _fullName;
public char Letter{
get{
return _letter;
}
set{
_letter = value;
}
}
public string FullName{
get{
return _fullName;
}
set{
_fullName = value;
}
}
Private Void UpdateToolTipButton(){
string fullname;
codons cdn;
char letter;
OleDbConnection iConnect = new OleDbConnection();
iConnect.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=@"C:\Projects_2012\Project_Noam\Access\myProject.accdb";
OleDbCommand iCommand = new OldDbCommand("Select * from tblCodons",iConnect);
List<YourClassName> iList = new List<YourClassName>();
OleDbDataReader iRead = null;
iRead = iCommand.ExecuteReader();
while(iRead.Read()){
YourClassName iClass = new YourClassName();
iClass.Letter = Convert.ToChar(iRead["codonsCodon1"]);
iClass.FullName = Convert.ToString(iRead["codonsFullName"]);
iList.Add(iClass);
}
iConnect.Close();
iRead.Close();
foreach(var VarName in iList)
{
toolTip1.SetToolTip(button1, "Name: " + var.FullName);
toolTip1.ToolTipTitle = var.Letter;
}
}
private char\u字母;
私有字符串\u全名;
公函{
得到{
回信;
}
设置{
_字母=值;
}
}
公共字符串全名{
得到{
返回全名;
}
设置{
_全名=值;
}
}
私有Void updatetoltipbutton(){
字符串全名;
密码子cdn;
字符字母;
OleDbConnection iConnect=新的OleDbConnection();
iConnect.ConnectionString=@“Provider=Microsoft.ACE.OLEDB.12.0;数据
Source=@“C:\Projects\u 2012\Project\u Noam\Access\myProject.accdb”;
OleDbCommand iCommand=new OldDbCommand(“从tblCodons中选择*”,iConnect);
List iList=新列表();
OleDbDataReader iRead=null;
iRead=iCommand.ExecuteReader();
while(iRead.Read()){
YourClassName iClass=newyourclassname();
iClass.Letter=Convert.ToChar(iRead[“codoncodon1]”);
iClass.FullName=Convert.ToString(iRead[“codonsFullName]”);
iList.Add(iClass);
}
i connect.Close();
iRead.Close();
foreach(iList中的var VarName)
{
工具提示1.设置工具提示(按钮1,“名称:”+var.FullName);
toolTip1.ToolTipTitle=变量字母;
}
}
您不应该为每个项目都打开一个新的读卡器,where子句中的项目也缺少单引号,但where子句无论如何都不是必需的\(^^^^)\u/
无论如何,这是我的解决方案
private char _letter;
private string _fullName;
public char Letter{
get{
return _letter;
}
set{
_letter = value;
}
}
public string FullName{
get{
return _fullName;
}
set{
_fullName = value;
}
}
Private Void UpdateToolTipButton(){
string fullname;
codons cdn;
char letter;
OleDbConnection iConnect = new OleDbConnection();
iConnect.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=@"C:\Projects_2012\Project_Noam\Access\myProject.accdb";
OleDbCommand iCommand = new OldDbCommand("Select * from tblCodons",iConnect);
List<YourClassName> iList = new List<YourClassName>();
OleDbDataReader iRead = null;
iRead = iCommand.ExecuteReader();
while(iRead.Read()){
YourClassName iClass = new YourClassName();
iClass.Letter = Convert.ToChar(iRead["codonsCodon1"]);
iClass.FullName = Convert.ToString(iRead["codonsFullName"]);
iList.Add(iClass);
}
iConnect.Close();
iRead.Close();
foreach(var VarName in iList)
{
toolTip1.SetToolTip(button1, "Name: " + var.FullName);
toolTip1.ToolTipTitle = var.Letter;
}
}
private char\u字母;
私有字符串\u全名;
公函{
得到{
回信;
}
设置{
_字母=值;
}
}
公共字符串全名{
得到{
返回全名;
}
设置{
_全名=值;
}
}
私有Void updatetoltipbutton(){
字符串全名;
密码子cdn;
字符字母;
OleDbConnection iConnect=新的OleDbConnection();
iConnect.ConnectionString=@“Provider=Microsoft.ACE.OLEDB.12.0;数据
Source=@“C:\Projects\u 2012\Project\u Noam\Access\myProject.accdb”;
OleDbCommand iCommand=new OldDbCommand(“从tblCodons中选择*”,iConnect);
List iList=新列表();
OleDbDataReader iRead=null;
iRead=iCommand.ExecuteReader();
while(iRead.Read()){
YourClassName iClass=newyourclassname();
iClass.Letter=Convert.ToChar(iRead[“codoncodon1]”);
iClass.FullName=Convert.ToString(iRead[“codonsFullName]”);
iList.Add(iClass);
}
i connect.Close();
iRead.Close();
foreach(iList中的var VarName)
{
工具提示1.设置工具提示(按钮1,“名称:”+var.FullName);
toolTip1.ToolTipTitle=变量字母;
}
}
SetToolTip正在寻找一个控件作为第一个参数。您提供的是Convert.ToString(字母)
第一个参数必须是要显示工具提示的按钮:
toolTip1.SetToolTip(button1, "Name: " + fullname);
我猜您试图设置工具提示的标题,在这种情况下,这不是SetToolTip方法的一部分。您必须自己设置属性:
toolTip1.ToolTipTitle = Convert.ToString(letter);
如果您的按钮是这些字母,那么您可以将它们的名称作为控制键来引用:
if (this.Controls.ContainsKey(Convert.ToString(letter))) {
toolTip1.SetToolTip(this.Controls[Convert.ToString(letter)], "Name: " + fullname + " etc(";
}
SetToolTip正在寻找一个控件作为第一个参数。您正在提供Convert.ToString(letter)
第一个参数必须是要显示工具提示的按钮:
toolTip1.SetToolTip(button1, "Name: " + fullname);
我猜您试图设置工具提示的标题,在这种情况下,这不是SetToolTip方法的一部分。您必须自己设置属性:
toolTip1.ToolTipTitle = Convert.ToString(letter);
如果您的按钮是这些字母,那么您可以将它们的名称作为控制键来引用:
if (this.Controls.ContainsKey(Convert.ToString(letter))) {
toolTip1.SetToolTip(this.Controls[Convert.ToString(letter)], "Name: " + fullname + " etc(";
}
如果我没弄错的话,您的表单有多个按钮,它们的Text
属性设置为字母a-z
。问题是SetToolip
需要控件(button)作为其第一个参数来设置其工具提示,但您正在传递按钮的文本值
您的循环应按如下方式排列,以便您可以遍历实际按钮:
foreach (var button in GetButtons())
{
if (ShouldSetTooltip(button))
{
// ...
tooltip.SetTooltip(button, text);
}
}
要将所有按钮放置在表单中(或面板上),可以使用以下方法:
private IEnumerable<Button> GetButtons()
{
// this is where you decide which buttons to return
foreach (var c in this.Controls) // or panel1.Controls
if (c is Button)
yield return (Button)c;
}
[编辑]
如果希望通过控件的名称属性获取控件(注意:这与文本
属性不同),可以使用循环并按如下方式编写:
for (int i = 1; i <= 26; i++, letter++)
{
...
var button = this.Controls[letter.ToString()];
var txt = "Name: "+fullname+" ("+cdn.GetCodon1()+")"
+"\n Begin: "+cdn.GetStart()+", End: "+cdn.GetEnd()+"";
toolTip1.SetToolTip(button, txt);
}
for(int i=1;i如果我做对了,您的表单有多个按钮,它们的Text
属性设置为字母a-z
。问题是SetToolip
需要控件(button)作为其第一个参数来设置其工具提示,但您正在传递按钮的文本值
您的循环应按如下方式排列,以便您可以遍历实际按钮:
foreach (var button in GetButtons())
{
if (ShouldSetTooltip(button))
{
// ...
tooltip.SetTooltip(button, text);
}
}
要将所有按钮放置在表单中(或面板上),可以使用以下方法:
private IEnumerable<Button> GetButtons()
{
// this is where you decide which buttons to return
foreach (var c in this.Controls) // or panel1.Controls
if (c is Button)
yield return (Button)c;
}
[编辑]
如果希望通过控件的名称属性获取控件(注意:这与文本
属性不同),可以使用循环并按如下方式编写:
for (int i = 1; i <= 26; i++, letter++)
{
...
var button = this.Controls[letter.ToString()];
var txt = "Name: "+fullname+" ("+cdn.GetCodon1()+")"
+"\n Begin: "+cdn.GetStart()+", End: "+cdn.GetEnd()+"";
toolTip1.SetToolTip(button, txt);
}
对于(int i=1;顺便说一句,你能告诉我它抛出了什么警告消息吗?你说“这是关于这一行的警告我”;你能准确地添加警告消息吗?在你的sql语句中,你没有在字母周围加单引号,应该是codoncodon1=“+letter+””错误2最好的重载