2015-09-29 2 views
0

Я пытаюсь передать значение «тест» из класса WorkspaceNoteUpdateComponent и в методе noteUpdateControl_AddNoteClicked перейти к другому классу NoteUpdateUserControl и методу buttonAdd_Click. По какой-то причине, однако, кажется, что значение «тест» в первом методе никогда не пропускает его. Что я делаю не так?Передавать значение из внутреннего метода в другой класс

Класс WorkspaceNoteUpdateComponent методом noteUpdateControl_AddNoteClicked

public class WorkspaceNoteUpdateComponent : IWorkspaceComponent2 
{ 
    private IRecordContext _recContext; 
    public static string CustAddrCity = "SOMETHING"; 


    public Control GetControl() 
    { 
     NoteUpdateUserControl noteUpdateControl = new NoteUpdateUserControl(); 
     noteUpdateControl.AddNoteClicked += new NoteUpdateUserControl.AddNoteHandler(noteUpdateControl_AddNoteClicked); 

     return noteUpdateControl; 
    } 

    public string noteUpdateControl_AddNoteClicked(ref string CustAddrCity) 
    { 
     IContact contactRecord = _recContext.GetWorkspaceRecord(RightNow.AddIns.Common.WorkspaceRecordType.Contact) as IContact; 

     CustAddrCity = "test"; 

     _recContext.RefreshWorkspace(); 
     return CustAddrCity; 
    } 
} 

класса NoteUpdateUserControl с методом buttonAdd_Click

public partial class NoteUpdateUserControl : UserControl 
{ 
    public delegate string AddNoteHandler(ref string custAddrCity); 
    public event AddNoteHandler AddNoteClicked; 
    string _boxtext = WorkspaceNoteUpdateComponent.CustAddrCity; 

    public NoteUpdateUserControl() 
    { 
     InitializeComponent(); 
    } 

    private void buttonAdd_Click(object sender, EventArgs e) 
    { 

     if (AddNoteClicked != null) 
     { 


      MessageBox.Show(_boxtext); 
     } 
    } 

*** UPDATE удалены только для чтения из строки _boxtext, как это не было намеченная часть кода ** **

+0

'_boxtext' в вашем пользовательском элементе управления не является ссылкой на' CustAddrCity' в классе Workspace, его копией. Вы пометили его как readonly и только инициализировали его при построении объекта, так или иначе вам нужно физически обновить это значение. –

+0

Кроме того, это несчастливый побочный эффект (неверный) - использование имен переменных. 'CustAddrCity' внутри метода не совпадает с' CustAddrCity' вне метода, компилятор предполагает, что вы хотите локальную копию внутри метода, и он не устанавливает значение в классе. Я думаю, вы, возможно, захотите прочитать, что такое 'static',' readonly' и 'ref'. –

+0

Рон, спасибо за вход, я обновил свой пост, так как часть readonly не была предназначена. Это была ошибка. Я понимаю свою ошибку со статической частью в объявлении CustAddrCity. – booksguy

ответ

0

Вы запускаете свое мероприятие в любом другом месте?

Ваш код отсутствует событие инициирующее:

if (AddNoteClicked != null) 
    { 
     string _eventBoxText = _boxtext; 

     AddNoteClicked(ref _eventBoxText); //<-- YOU NEED THIS LINE TO TRIGGER YOUR EVENT 

     MessageBox.Show(_eventBoxText); 
    } 

Примечание Я заменил _boxtext на _eventBoxText, _boxtext только для чтения, и, таким образом, would not be acceptable as ref argument in any context other method than the class constructor.

Смежные вопросы