Как я могу показать диалог и захватить ответ - PullRequest
2 голосов
/ 17 ноября 2010
private void ShowIterationSelection()
{
    IterationForm iterationForm = new IterationForm(lblProjectID.Text);
    iterationForm.ShowDialog();
}

Когда я показываю диалоговое окно, он отображает список итераций, связанных с проектом, используя ProjectID:

public partial class IterationForm : Form
{
    public IterationForm(string projectID)
    {
        InitializeComponent();
        LoadIterationsForProject(projectID);
    }

    private void LoadIterationsForProject(string projectID)
    {
        IterationRepository iterationRepo = new IterationRepository();
        Int64 ID = Convert.ToInt64(projectID);
        dgvIterations.DataSource = iterationRepo.FindAllIterations().Where(i => i.IDProject == ID).Select(i => new { Codigo = i.ID, Descripcion = i.Description, Inicio = i.StartDate, Fin = i.EndDate });
    }
}

Мой вопрос, как я могу захватить выбранное значение из представления таблицы данных ипередать мне мою форму вызова, чтобы открыть другую форму с выбором IterationID?

Спасибо за помощь.

Так что, может быть, что-то вроде:

private void ShowIterationSelection()
{
    IterationForm iterationForm = new IterationForm(lblProjectID.Text);
    var result = iterationForm.ShowDialog();
    showTheThing(result); //this uses the iterationID
}

Ответы [ 4 ]

3 голосов
/ 17 ноября 2010

результат ShowDialog () является перечислением типа DialogResult.обычно вы проверяете, имеет ли показанная форма DialogResult «Ok».вы можете установить свойство в вашей форме, которое содержит ваш результат, например, в свойстве "ResultProperty", если вы хотите прочитать его после закрытия формы, используйте что-то вроде:

IterationForm iterationForm = new IterationForm(lblProjectID.Text);
if ( iterationForm.ShowDialog() == DialogResult.Ok )
{
    // read result
    var result = iterationForm.ResultProperty
}
else
{
    // user has not clicked ok - do some other stuff here
}

в форме, которую вы показалиВы можете поместить обработчик событий на кнопку, которую пользователь должен нажать в случае принятия, и добавить код, подобный следующему:

private void Accept_Click(object sender, EventArgs e)
{
    this.ResultProperty = someResult;
    this.DialogResult = DialogResult.Ok;
    this.Close();
}

, если пользователь нажал кнопку отмены, вы установили бы свойство следующим образом:

private void Decline_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.Cancel;
    this.Close();
}
1 голос
/ 17 ноября 2010

Просто создайте открытое свойство в форме итерации, к которому вы можете получить доступ из основной формы.

public partial class IterationForm : Form
{ 
    // set this to the selected object (change to w/e type you need)
    public object SelectedObject{get; private set;}
    public IterationForm(string projectID)
    {
        InitializeComponent();
        LoadIterationsForProject(projectID);
    }

    private void LoadIterationsForProject(string projectID)
    {
        IterationRepository iterationRepo = new IterationRepository();
        Int64 ID = Convert.ToInt64(projectID);
        dgvIterations.DataSource = iterationRepo.FindAllIterations().Where(i => i.IDProject == ID).Select(i => new { Codigo = i.ID, Descripcion = i.Description, Inicio = i.StartDate, Fin = i.EndDate });
    }
}

Тогда вы можете сделать:

private void ShowIterationSelection()
{
    IterationForm iterationForm = new IterationForm(lblProjectID.Text);
    var result = iterationForm.ShowDialog();
    showTheThing(iterationForm.SelectedObject); //this uses the iterationID
}
0 голосов
/ 17 ноября 2010

ShowDialog() возвращает только DialogResult .

Но вы можете запросить iterationID как открытое свойство в IterationForm при получении успешного DialogResult.Что-то вроде:

        var iterationForm = new IterationForm(lblProjectID.Text);

        if (iterationForm.ShowDialog() == DialogResult.OK)
        {
            // do something with iterationForm.SelectedIterationId
        }
0 голосов
/ 17 ноября 2010

Начните с предоставления свойству IterationForm свойства для выбранного идентификатора:

public int SelectedID { get; set; }

Когда ваш пользователь выбирает строку из вашей таблицы данных, вам необходимо установить свойство selectedID.Я оставлю этот бит на ваше усмотрение.

Теперь добавьте обработчик для события Closed вашей IterationForm:

private void ShowIterationSelection()     
{     
    IterationForm iterationForm = new IterationForm(lblProjectID.Text);
    iterationForm.Closed += new EventHandler(iterationForm_Closed)
    iterationForm.ShowDialog();     
} 

void iterationForm_Closed (object sender, EventArgs e)
{
    IterationForm form = (IterationForm)sender;
    showTheThing(form.SelectedID);    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...