2013-04-10 94 views
-1

我正在爲Windows應用程序編寫一些代碼,除了IntelliSense在某些點擊事件範圍內不提供選項以外,事情還會繼續。令人驚訝的是,當我在沒有它的幫助的情況下對其進行編碼時,它不會在該行代碼中給我任何紅色的波浪曲線,所以我認爲範圍是確定的。智能感知不起作用

我有兩種形式,FormAFormB,在FormA一個按鈕單擊事件應該觸發FormB其文本框裝滿它運行附加邏輯後收到的信息。如何我做的是

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

formSearchResultFormSearch(FormB)searchedInfo的對象是一個類的對象具有的屬性存儲數據,這是我想在FormSearch文本框來顯示。無論是FormSearchsearchedInfo被聲明爲public,但是當我開始打字

「formSrchResult。」 +「ctrl + space」

智能感知不會給我帶有文本框和屬性名稱的列表。所以,我想知道是否有人會對可能導致這種情況的任何想法有所瞭解,我很想知道。順便說一下,它的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; 
} 

下面是我對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(); 
} 
+0

不要僅僅依靠intellisense來假定範圍是正確的。嘗試編譯該項目並檢查可能的錯誤。 – 2013-04-10 17:55:41

+0

您嘗試訪問的屬性或字段的訪問級別是什麼?也許如果你要顯示實際的類定義,它將有助於解決你面臨的這個問題\ – MethodMan 2013-04-10 17:59:42

回答

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類訪問,這樣你就聲明,作爲一個私有字段。通過這種方式,您可以從班級中的任何方法訪問您的對象。我希望這有幫助。

+0

感謝您的回覆。我很抱歉,但我無法看到你提供的代碼片段與我的代碼片段有什麼不同。我創建了一個FormSearch的對象作爲frmSearchResult和UserInfo作爲搜索信息。正如下面@DJ KRAZE所提到的是我的代碼片段..公共類用戶信息 {0}組; } public string FirstName {get;組; } public string LastName {get;組; } public string Email {get;組; } public string UserName {get;組; } } – NoSaidTheCompiler 2013-04-11 01:58:53

+0

我已經將我的代碼片段添加到了我的主帖子中,如果這有幫助的話。還有Cameron,當你建議我讓我的formSrchResult對象全局可訪問時,你的意思是什麼。我的FormSearchResult在默認情況下具有公共範圍,是不是應該使其全局可訪問。我感謝你們所有的時間。 – NoSaidTheCompiler 2013-04-11 02:14:52

+0

我已經更新了我的答案,以包含我在談論的內容,爲您的搜索結果表單創建私人字段。此外,您的代碼是否現在無錯地構建? – 2013-04-11 12:34:22