Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为多个按钮创建工具提示_C#_Winforms_Tooltip_Oledb - Fatal编程技术网

C# 为多个按钮创建工具提示

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

下面的代码假设将信息添加到从数据库中获取的工具提示中(类密码执行此操作(这是实际工作的部分))。我尝试在FOR循环中执行此操作,但它警告我这一行:

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最好的重载