【问题标题】:C# Switch-case Loop for Datagridview cellsDatagridview 单元格的 C# Switch-case 循环
【发布时间】:2010-04-21 15:08:44
【问题描述】:

我正在处理一个带有 datagridview 和 webbrowser 控件的表单。我在 datagridview 中有三列作为 URL、用户名和密码。我想做的是自动登录一些我经常使用的网站。出于这个原因,我不确定这是否是正确的方法,但我创建了以下代码。问题在于 switch 的参数。

我将单击 datagridview 上的行,然后单击 login_button,以便将用户名和密码信息传递到网页上的相关字段。为什么我需要一个 switch-case 循环是因为所有网页的用户名和密码字段都有不同的元素 ID。

正如我所说,我不确定datagridview是否允许switch-case,我搜索了网络但找不到任何示例。

private void login_button_Click(object sender, EventArgs e)
    {
        switch (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString())
        {
            case "http://www.website1.com":
                webBrowser1.Document.GetElementById("username").InnerText = dataGridView1.Rows[3].Cells[3].Value.ToString();
                webBrowser1.Document.GetElementById("password").InnerText = dataGridView1.Rows[3].Cells[4].Value.ToString();
                return;
            case "http://www.website2.com":
                webBrowser1.Document.GetElementById("uname").InnerText = dataGridView1.Rows[4].Cells[3].Value.ToString();
                webBrowser1.Document.GetElementById("pswd").InnerText = dataGridView1.Rows[4].Cells[4].Value.ToString();
                return;
        }
        HtmlElementCollection elements = this.webBrowser1.Document.GetElementsByTagName("Form");
        foreach (HtmlElement currentElement in elements)
        {
            currentElement.InvokeMember("Login");
        }
    }

【问题讨论】:

    标签: c# winforms datagridview webbrowser-control switch-statement


    【解决方案1】:

    我不确定在 C# 中是否确实如此,但您可能必须在临时变量上执行切换 例如

    string site = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
    switch(site)
    {
    ....
    }
    

    如果不出意外,它将使调试更容易。

    每个 case 也应该以一个 break 结尾;不是退货;

    【讨论】:

      【解决方案2】:

      你确定了吗

      dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
      

      返回网址?

      这将是第一个开始的地方。

      也许:

      dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString()
      

      至于 datagrid + 开关,datagrid 不知道/关心开关。它只知道按下按钮时调用:

      private void login_button_Click(object sender, EventArgs e)
      

      如果对 URL 进行硬编码会怎样?其他都行吗?

      编辑: 哦,那是行不通的! 您的交换机中有回报。因此,您将结束该方法并且永远不会调用:

        HtmlElementCollection elements = this.webBrowser1.Document.GetElementsByTagName("Form");
          foreach (HtmlElement currentElement in elements)
          {
              currentElement.InvokeMember("Login");
          }
      

      【讨论】:

        猜你喜欢
        • 2014-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-23
        • 2022-12-09
        相关资源
        最近更新 更多