-1

Windows アプリケーション用のコードを書いていますが、IntelliSense が一部のクリック イベント スコープでオプションを提供しないことを除けば、問題なく動作しています。驚いたことに、その助けを借りずにコーディングすると、そのコード行に赤い波線が表示されないので、スコープは問題ないと思います。

私は2つのフォームを持っておりFormAFormBボタンクリックイベントは、添付されたロジックを実行した後に受け取った情報で満たされたテキストボックスでFormAトリガーする必要があります。FormB私がやっている方法は

formSrchResult.txtSearchFirstName.Text = searchedInfo.FirstName;
formSrchResult.txtSearchLastName.Text = searchedInfo.LastName;
formSrchResult.txtSearchUsername.Text = searchedInfo.UserName;
formSrchResult.txtSearchEmail.Text = searchedInfo.Email;

formSearchResultのオブジェクトでありFormSearch(FormB)searchedInfoテキストボックスに表示するデータを格納するプロパティを持つクラスのオブジェクトですFormSearch。との両方が publicFormSearchsearchedInfo宣言されていますが、入力を開始すると

「formSrchResult.」+ "Ctrl + スペース"

IntelliSense では、テキスト ボックスとプロパティの名前の一覧が表示されません。それで、これを引き起こしている可能性のあるものについて誰かが何か考えを持っているかどうか疑問に思っていました.知りたい. ところで、そのVisual Studio 2012。

ありがとう。

public class UserInfo
{
    public int UserID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string UserName { get; set; }
}

それは検索された情報を格納するクラスであり、以下は検索メソッドのコードです...

public UserInfo Search(string email)
{
    UserInfo searchUserInfo = new UserInfo();

    try
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand("spListEverything", conn);
        cmd.CommandText = "spListEverything";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@Email", email);

        SqlDataReader rdrSearch = cmd.ExecuteReader();

        if (rdrSearch.Read())
        {
            //why do we need to convert the first name, last name etc to ToString
            //when they are defined, in the database, as a string itself?
            searchUserInfo.UserID = Convert.ToInt32(rdrSearch["UserID"]);
            searchUserInfo.FirstName = rdrSearch["FirstName"].ToString();
            searchUserInfo.LastName = rdrSearch["LastName"].ToString();
            searchUserInfo.UserName = rdrSearch["UserName"].ToString();
            searchUserInfo.Email = rdrSearch["Email"].ToString();
        }
        else 
        {
            // "Sorry, no match found";
        }

        }
    catch (Exception ex)
    {
    }
    finally
    {
       conn.Close();
    }
    return searchUserInfo;
}

以下は、Intellisense が役に立たなかった btnClick イベントのコーディングです。

private void btnSearch_Click(object sender, EventArgs e)
{
    string email = txtSearchEmail.Text.ToString();

    Manage myManage = new Manage(); //to call the search function
    FormSearchResult formSrchResult = new FormSearchResult();//to put the vlaues in the textboxes in that form

    UserInfo searchedInfo = myManage.Search(email);

    //the search function is not working properly. No value is returned to be stored
    //in the userInfo object

    //Here for some reason my intellisense is not providing options.

    formSrchResult.txtSearchFirstName.Text = searchedInfo.FirstName;
    formSrchResult.txtSearchLastName.Text = searchedInfo.LastName;
    formSrchResult.txtSearchUsername.Text = searchedInfo.UserName;
    formSrchResult.txtSearchEmail.Text = searchedInfo.Email;

    txtSearchFirstName.Enabled = false;
    formSrchResult.ShowDialog();
}
4

1 に答える 1

0

Windows フォーム コントロールはフォームの静的プロパティではないため、別のクラスからそのコントロールにアクセスできるようにするには、formSrchResult 型のオブジェクトを作成する必要があります。クラスには、その型のオブジェクトへの直接参照なしで呼び出される静的メソッドまたはプロパティが必要です。

このようなもの:

public partial class FormB : Form
{
    private formSrchResult formSR; // this is a private field that is accessible to any method in your FormB class - you must initialize it first before trying to do anything on the object or you will receive a null reference

    private void Search_Click(object sender, EventArgs e)
    {
        SearchResult searchedInfo = DoSearch();
        formSR = new formSrchResult();
        formSR.txtSearchFirstName.Text = searchedInfo.FirstName;
        formSR.txtSearchLastName.Text = searchedInfo.LastName;
        formSR.txtSearchUsername.Text = searchedInfo.UserName;
        formSR.txtSearchEmail.Text = searchedInfo.Email;
        formSR.Show();
    }

    private SearchResult DoSearch()
    { 
        // your code
    }
}

formSrchResult オブジェクトを FormB クラスからグローバルにアクセスできるようにして、それをプライベート フィールドとして宣言することもできます。このようにして、クラスの任意のメソッドからオブジェクトにアクセスできます。これが役立つことを願っています。

于 2013-04-10T18:08:50.683 に答える