200321PX Moved MV member list outside the tab area, removed second invitation tab, some small optimizations
This commit is contained in:
parent
bcfcfa5750
commit
72f4b879e1
|
@ -10,14 +10,6 @@ namespace dezentrale.core
|
|||
//! \short Data provider for the MV invitation process
|
||||
public interface IMvInvitationData
|
||||
{
|
||||
string InviteHeadline { get; }
|
||||
string InviteBody { get; }
|
||||
DateTime EventDate { get; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*List<Member> MemberList { get; set; }
|
||||
string DataTemplate { get; set; }
|
||||
IntermediateFormat DataFormat { get; set; }
|
||||
|
@ -62,6 +54,15 @@ namespace dezentrale.core
|
|||
protected override bool Run()
|
||||
{
|
||||
uint step = 0;
|
||||
|
||||
FormMail fm = new FormMail()
|
||||
{
|
||||
To = "{EMailName} <{EMail}>",
|
||||
Subject = mv.InviteHeadline,
|
||||
Body = mv.InviteBody,
|
||||
};
|
||||
fm = fm.ReplaceReflect(mv);
|
||||
|
||||
foreach (MvInvitedMember m in memberList)
|
||||
{
|
||||
step++;
|
||||
|
@ -70,28 +71,29 @@ namespace dezentrale.core
|
|||
LogTarget.LogLine($"Processing member {m.Member.NumberString} - {m.Member.Nickname}...", LogEvent.ELogLevel.Info, "MvInvitationProcess");
|
||||
LogTarget.StepStarted(step, $"Sending mail for member {m.Member.Nickname}");
|
||||
|
||||
m.StartLogEvent("MvInvitationProcess", LogEvent.eEventType.EMail, Program.config.LocalUser);
|
||||
m.MvAuthenticationCode = RandomString(10);
|
||||
m.Member.StartLogEvent("MvInvitationProcess", LogEvent.eEventType.EMail, Program.config.LocalUser);
|
||||
m.AuthCode = RandomString(10);
|
||||
|
||||
m.MvEventDate = data.EventDate;
|
||||
FormMail fm = new FormMail()
|
||||
{
|
||||
To = $"{m.EMailName} <{m.EMail}>",
|
||||
Subject = data.InviteHeadline,
|
||||
Body = data.InviteBody,
|
||||
};
|
||||
m.CurrentLog.SubEvents.Add(fm.Send(m));
|
||||
m.MvDateInvited = DateTime.Now;
|
||||
m.SaveToFile();
|
||||
|
||||
LogTarget.StepCompleted(step, $"Done with member {m.Nickname}", true);
|
||||
m.Member.CurrentLog.SubEvents.Add(fm.Send(m.Member));
|
||||
m.Member.SaveToFile();
|
||||
m.InvitationDate = DateTime.Now;
|
||||
m.Invited = true;
|
||||
|
||||
LogTarget.StepCompleted(step, $"Done with member {m.Member.Nickname}", true);
|
||||
|
||||
if (mv.Status == Mv.MvStatus.InPreparation)
|
||||
mv.Status = Mv.MvStatus.InvitationSent;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogTarget.LogLine($"Error while processing member {m.Nickname}: {ex.Message}", LogEvent.ELogLevel.Error, "MvInvitationProcess");
|
||||
LogTarget.StepCompleted(step, $"Error while processing member {m.Nickname}", false);
|
||||
LogTarget.LogLine($"Error while processing member {m.Member.Nickname}: {ex.Message}", LogEvent.ELogLevel.Error, "MvInvitationProcess");
|
||||
LogTarget.StepCompleted(step, $"Error while processing member {m.Member.Nickname}", false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
LogTarget.LogLine($"Done.", LogEvent.ELogLevel.Info, "MvInvitationProcess");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,8 +13,9 @@ namespace dezentrale.model
|
|||
[XmlAttribute] public string AuthCode { get; set; } = "";
|
||||
[XmlAttribute] public bool AttendedMv { get; set; } = false;
|
||||
|
||||
[XmlIgnore] public string NumberString { get { return $"{MemberNumber:D3}"; } }
|
||||
[XmlIgnore] public string InvitedString { get { return Invited ? "Yes" : "No"; } }
|
||||
[XmlIgnore] public string NumberString { get { return $"{MemberNumber:D3}"; } }
|
||||
[XmlIgnore] public string InvitedString { get { return Invited ? "Yes" : "No"; } }
|
||||
[XmlIgnore] public string AttendedString { get { return AttendedMv ? "Yes" : "No"; } }
|
||||
|
||||
private Member member = null;
|
||||
[XmlIgnore] public Member Member
|
||||
|
|
|
@ -28,19 +28,21 @@ namespace dezentrale.model
|
|||
protected void LogPropertyChange(string propertyName, object oldValue, object newValue)
|
||||
{
|
||||
if (XmlLog.SuppressAllLogging || SuppressLogging) return;
|
||||
if (CurrentLog == null)
|
||||
{
|
||||
CurrentLog = StartLogEvent($"DataChange, starting with {propertyName}", LogEvent.eEventType.DataChange);
|
||||
}
|
||||
|
||||
string ov = oldValue.ToString();
|
||||
string nv = newValue.ToString();
|
||||
if (!ov.Equals(nv))
|
||||
{
|
||||
if (CurrentLog == null)
|
||||
{
|
||||
CurrentLog = StartLogEvent($"DataChange, starting with {propertyName}", LogEvent.eEventType.DataChange);
|
||||
}
|
||||
CurrentLog.SubEvents.Add(new LogSubEvent()
|
||||
{
|
||||
Topic = $"{propertyName} changes from \"{oldValue.ToString()}\" to \"{newValue.ToString()}\"",
|
||||
Type = LogEvent.eEventType.DataChange,
|
||||
});
|
||||
}
|
||||
}
|
||||
public void FinishLogEvent()
|
||||
{
|
||||
|
|
|
@ -23,7 +23,7 @@ namespace dezentrale.view
|
|||
new ConfigLVDataHandler()
|
||||
{
|
||||
Name = "date",
|
||||
Display = "Date",
|
||||
Display = "EventDate",
|
||||
Width = 160,
|
||||
CustomToString = ( x => (((Mv)x).EventDate.ToString()) ),
|
||||
},
|
||||
|
|
|
@ -31,12 +31,19 @@ namespace dezentrale.view
|
|||
},
|
||||
new ConfigLVDataHandler()
|
||||
{
|
||||
Name = "invited",
|
||||
Name = "inv",
|
||||
Display = "Invited",
|
||||
Width = 48, TextAlign = HorizontalAlignment.Right,
|
||||
Width = 32, TextAlign = HorizontalAlignment.Right,
|
||||
CustomToString = ( x => ((MvInvitedMember)x).InvitedString),
|
||||
},
|
||||
new ConfigLVDataHandler()
|
||||
{
|
||||
Name = "att",
|
||||
Display = "Invited",
|
||||
Width = 32, TextAlign = HorizontalAlignment.Right,
|
||||
CustomToString = ( x => ((MvInvitedMember)x).AttendedString),
|
||||
},
|
||||
new ConfigLVDataHandler()
|
||||
{
|
||||
Name = "date",
|
||||
Display = "Date",
|
||||
|
|
221
view/frmMv.cs
221
view/frmMv.cs
|
@ -31,9 +31,8 @@ namespace dezentrale.view
|
|||
//Subject
|
||||
private TextBox tbInviteHeadline;
|
||||
private TextBox tbInviteBody;
|
||||
private TabPage tabMemberInvitation;
|
||||
//List with all members and invited yes|no
|
||||
private LvMvInvitations lvMvInvitations;
|
||||
private LvMvInvitations lvMvInvitations;
|
||||
//Option to invite selected|all members
|
||||
private TabPage tabRunningMv;
|
||||
//List with invited members with authenticated status
|
||||
|
@ -41,9 +40,6 @@ namespace dezentrale.view
|
|||
//textbox to hold an external MV protocol URL and/or
|
||||
//[rich] textbox for MV protocol
|
||||
//Button to finish MV
|
||||
|
||||
private TextBox tbPreviewHeadline;
|
||||
private TextBox tbPreviewBody;
|
||||
|
||||
private TabPage tabLog;
|
||||
|
||||
|
@ -60,13 +56,10 @@ namespace dezentrale.view
|
|||
TabPage selectedTab = tabControl.SelectedTab;
|
||||
if(selectedTab == tabInvitationSettings)
|
||||
{
|
||||
|
||||
} else if(selectedTab == tabMemberInvitation)
|
||||
{
|
||||
Button
|
||||
btn = AddButton("Invite selected", btnInviteSelected_Click);
|
||||
btn = AddButton("Invite all", btnInviteAll_Click);
|
||||
btn.Enabled = (this.mv.Status == Mv.MvStatus.InPreparation || this.mv.Status == Mv.MvStatus.InvitationSent);
|
||||
bool enabled = (mv.Status == Mv.MvStatus.InPreparation || mv.Status == Mv.MvStatus.InvitationSent);
|
||||
Button btn;
|
||||
btn = AddButton("Invite selected", btnInviteSelected_Click); btn.Enabled = enabled;
|
||||
btn = AddButton("Invite all", btnInviteAll_Click); btn.Enabled = enabled;
|
||||
} else if(selectedTab == tabRunningMv)
|
||||
{
|
||||
|
||||
|
@ -98,7 +91,9 @@ namespace dezentrale.view
|
|||
|
||||
private void DoInvitation(List<MvInvitedMember> mvMembers)
|
||||
{
|
||||
if(mvMembers == null || mvMembers.Count < 1)
|
||||
UpdateMvData();
|
||||
|
||||
if (mvMembers == null || mvMembers.Count < 1)
|
||||
{
|
||||
MessageBox.Show("No members to invite!");
|
||||
return;
|
||||
|
@ -144,10 +139,16 @@ namespace dezentrale.view
|
|||
foreach (MvInvitedMember mvi in subList) inv.Remove(mvi);
|
||||
}
|
||||
|
||||
if(inv.Count < 1)
|
||||
{
|
||||
MessageBox.Show("There are no members to invite.");
|
||||
return;
|
||||
}
|
||||
//Spawn invitation process window and run process
|
||||
MvInvitationProcess invProcess = new MvInvitationProcess(this.mv, inv);
|
||||
MvInvitationProcess invProcess = new MvInvitationProcess(mv, inv);
|
||||
frmProcessWithLog frmInvProcess = new frmProcessWithLog(invProcess, true);
|
||||
frmInvProcess.ShowDialog();
|
||||
UpdateGui();
|
||||
}
|
||||
private void btnInviteSelected_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
@ -155,34 +156,21 @@ namespace dezentrale.view
|
|||
}
|
||||
private void btnInviteAll_Click(object sender, EventArgs e)
|
||||
{
|
||||
DoInvitation(this.mv.Members);
|
||||
DoInvitation(mv.Members);
|
||||
}
|
||||
private void RefreshPreview()
|
||||
|
||||
|
||||
private void UpdateMvData()
|
||||
{
|
||||
Console.WriteLine("frmMv.RefreshPreview()");
|
||||
FormMail fm = mv.GetInvitationMail();
|
||||
tbPreviewHeadline.Text = fm.Subject;
|
||||
tbPreviewBody.Text = fm.Body;
|
||||
//Console.WriteLine(mv.InviteHeadline);
|
||||
//Console.WriteLine(mv.InviteBody);
|
||||
}
|
||||
private bool programmaticChange = true;
|
||||
private void InvitationDataChanged(object sender, EventArgs e)
|
||||
{
|
||||
Console.WriteLine($"frmMv.InvitationDataChanged(): programmatic = {programmaticChange}");
|
||||
|
||||
if (programmaticChange) return;
|
||||
DateTime dt = new DateTime( mvDate.Value.Year, mvDate.Value.Month, mvDate.Value.Day,
|
||||
mvTime.Value.Hour, mvTime.Value.Minute, mvTime.Value.Second);
|
||||
|
||||
if (sender == mvDate || sender == mvTime)
|
||||
mv.EventDate = new DateTime( mvDate.Value.Year, mvDate.Value.Month, mvDate.Value.Day,
|
||||
mvTime.Value.Hour, mvTime.Value.Minute, mvTime.Value.Second);
|
||||
|
||||
else if (sender == tbPlace) mv.Place = tbPlace.Text;
|
||||
else if (sender == tbMvAgenda) mv.Agenda = tbMvAgenda.Text;
|
||||
else if (sender == tbInviteHeadline) mv.InviteHeadline = tbInviteHeadline.Text;
|
||||
else if (sender == tbInviteBody) mv.InviteBody = tbInviteBody.Text;
|
||||
|
||||
RefreshPreview();
|
||||
mv.EventDate = dt;
|
||||
mv.Place = tbPlace.Text;
|
||||
mv.Agenda = tbMvAgenda.Text;
|
||||
mv.InviteHeadline = tbInviteHeadline.Text;
|
||||
mv.InviteBody = tbInviteBody.Text;
|
||||
}
|
||||
|
||||
private void BuildPageInvitationSettings(Control parent)
|
||||
|
@ -209,9 +197,6 @@ namespace dezentrale.view
|
|||
Format = DateTimePickerFormat.Time,
|
||||
});
|
||||
|
||||
mvDate.ValueChanged += InvitationDataChanged;
|
||||
mvTime.ValueChanged += InvitationDataChanged;
|
||||
|
||||
parent.Controls.Add(new Label()
|
||||
{
|
||||
Text = "Place:",
|
||||
|
@ -225,7 +210,6 @@ namespace dezentrale.view
|
|||
Width = 580,
|
||||
//Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right
|
||||
});
|
||||
tbPlace.TextChanged += InvitationDataChanged;
|
||||
|
||||
parent.Controls.Add(new Label()
|
||||
{
|
||||
|
@ -243,7 +227,6 @@ namespace dezentrale.view
|
|||
//Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom,
|
||||
//Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right
|
||||
});
|
||||
tbMvAgenda.TextChanged += InvitationDataChanged;
|
||||
|
||||
parent.Controls.Add(new Label()
|
||||
{
|
||||
|
@ -258,7 +241,6 @@ namespace dezentrale.view
|
|||
Width = 580,
|
||||
//Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right
|
||||
});
|
||||
tbInviteHeadline.TextChanged += InvitationDataChanged;
|
||||
|
||||
parent.Controls.Add(new Label()
|
||||
{
|
||||
|
@ -276,82 +258,12 @@ namespace dezentrale.view
|
|||
//Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom,
|
||||
//Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right
|
||||
});
|
||||
tbInviteBody.TextChanged += InvitationDataChanged;
|
||||
}
|
||||
|
||||
private void BuildPageMemberInvitation(Control parent)
|
||||
{
|
||||
SplitContainer split = new SplitContainer()
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
};
|
||||
parent.Controls.Add(split);
|
||||
|
||||
GroupBox grpInvitations = new GroupBox()
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
Text = "Invitations",
|
||||
Width = 500,
|
||||
//Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom,
|
||||
};
|
||||
split.Panel1.Controls.Add(grpInvitations);
|
||||
|
||||
grpInvitations.Controls.Add(lvMvInvitations = new LvMvInvitations()
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
});
|
||||
GroupBox grpPreview = new GroupBox()
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
Text = "Invitation mail preview",
|
||||
Width = 500,
|
||||
//Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom,
|
||||
};
|
||||
|
||||
split.Panel2.Controls.Add(grpPreview);
|
||||
|
||||
grpInvitations.Controls.Add(null);
|
||||
|
||||
|
||||
grpPreview.Controls.Add(new Label()
|
||||
{
|
||||
Text = "Subject:",
|
||||
Location = new Point(lm, 1 * line + tm + labelOffs),
|
||||
Size = new Size(110, labelHeight),
|
||||
TextAlign = ContentAlignment.BottomRight,
|
||||
});
|
||||
grpPreview.Controls.Add(tbPreviewHeadline = new TextBox()
|
||||
{
|
||||
Location = new Point(lm + 113, 1 * line + tm),
|
||||
Width = 340,
|
||||
ReadOnly = true,
|
||||
BackColor = Color.LightGray,
|
||||
//Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right
|
||||
});
|
||||
|
||||
|
||||
/*grpPreview.Controls.Add(new Label()
|
||||
{
|
||||
Text = "Body:",
|
||||
Location = new Point(lm, 2 * line + tm + labelOffs),
|
||||
Size = new Size(110, labelHeight),
|
||||
TextAlign = ContentAlignment.BottomRight,
|
||||
});*/
|
||||
grpPreview.Controls.Add(tbPreviewBody = new TextBox()
|
||||
{
|
||||
Location = new Point(8, 2 * line + tm),
|
||||
Size = new Size(452, 440),
|
||||
Multiline = true,
|
||||
ScrollBars = ScrollBars.Both,
|
||||
ReadOnly = true,
|
||||
BackColor = Color.LightGray,
|
||||
//Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom,
|
||||
//Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right
|
||||
});
|
||||
}
|
||||
|
||||
private void BuildPageRunningMv(Control parent)
|
||||
{
|
||||
//input field to add auth codes
|
||||
|
||||
|
||||
}
|
||||
private void BuildLog(Control parent)
|
||||
|
@ -369,10 +281,30 @@ namespace dezentrale.view
|
|||
int h = parent.ClientSize.Height - 35;
|
||||
int tabw = w - 5, tabh = h - 25;
|
||||
|
||||
tabControl = new TabControl()
|
||||
SplitContainer split = new SplitContainer()
|
||||
{
|
||||
Size = new Size(w, h),
|
||||
Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom,
|
||||
};
|
||||
parent.Controls.Add(split);
|
||||
|
||||
GroupBox grpInvitations = new GroupBox()
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
Text = "Invitations",
|
||||
Width = 500,
|
||||
//Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom,
|
||||
};
|
||||
grpInvitations.Controls.Add(lvMvInvitations = new LvMvInvitations()
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
});
|
||||
split.Panel1.Controls.Add(grpInvitations);
|
||||
|
||||
tabControl = new TabControl()
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
//Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom,
|
||||
|
||||
TabPages =
|
||||
{
|
||||
|
@ -381,11 +313,6 @@ namespace dezentrale.view
|
|||
Text = "Invitation settings",
|
||||
ClientSize = new Size(tabw, tabh),
|
||||
}),
|
||||
(tabMemberInvitation = new TabPage()
|
||||
{
|
||||
Text = "Member invitation",
|
||||
ClientSize = new Size(tabw, tabh),
|
||||
}),
|
||||
(tabRunningMv = new TabPage()
|
||||
{
|
||||
Text = "Running MV",
|
||||
|
@ -398,11 +325,11 @@ namespace dezentrale.view
|
|||
}),
|
||||
}
|
||||
};
|
||||
parent.Controls.Add(tabControl);
|
||||
split.Panel2.Controls.Add(tabControl);
|
||||
|
||||
BuildPageInvitationSettings(tabControl.TabPages[0]);
|
||||
BuildPageMemberInvitation(tabControl.TabPages[1]);
|
||||
BuildPageRunningMv(tabControl.TabPages[2]);
|
||||
BuildLog(tabControl.TabPages[3]);
|
||||
BuildPageRunningMv(tabControl.TabPages[1]);
|
||||
BuildLog(tabControl.TabPages[2]);
|
||||
}
|
||||
|
||||
private void Init()
|
||||
|
@ -413,22 +340,21 @@ namespace dezentrale.view
|
|||
this.StartPosition = FormStartPosition.CenterParent;
|
||||
this.Size = new System.Drawing.Size(742, 600);
|
||||
this.Text = "dezentrale-members :: MV administration";
|
||||
this.FormClosing += frmMv_Closing;
|
||||
BuildGui(this);
|
||||
|
||||
//In order to update the tool buttons etc, we need to call UpdateGui() here
|
||||
tabControl.SelectedIndexChanged += (sender, e) => { UpdateGui(); };
|
||||
|
||||
//Setup all controls values
|
||||
mvDate.Value = this.mv.EventDate;
|
||||
mvTime.Value = this.mv.EventDate;
|
||||
tbPlace.Text = this.mv.Place;
|
||||
tbMvAgenda.Text = this.mv.Agenda;
|
||||
tbInviteHeadline.Text = this.mv.InviteHeadline;
|
||||
tbInviteBody.Text = this.mv.InviteBody;
|
||||
mvDate.Value = mv.EventDate;
|
||||
mvTime.Value = mv.EventDate;
|
||||
tbPlace.Text = mv.Place;
|
||||
tbMvAgenda.Text = mv.Agenda;
|
||||
tbInviteHeadline.Text = mv.InviteHeadline;
|
||||
tbInviteBody.Text = mv.InviteBody;
|
||||
|
||||
UpdateGui();
|
||||
programmaticChange = false;
|
||||
RefreshPreview();
|
||||
|
||||
|
||||
//for new MV, we want to keep the member list up-to-date in order
|
||||
|
@ -436,17 +362,17 @@ namespace dezentrale.view
|
|||
//becomes active after MV entry was generated. The other way round,
|
||||
//entries with no (or inactive) member reference will not be
|
||||
//removed (documentation purposes)
|
||||
if (this.mv.Status < Mv.MvStatus.Started)
|
||||
if (mv.Status < Mv.MvStatus.Started)
|
||||
{
|
||||
foreach (Member m in Program.members.Entries)
|
||||
{
|
||||
if (m.Status == Member.eStatus.Active)
|
||||
{
|
||||
//find invitation entry
|
||||
if(this.mv.Members.Find((x) => x.MemberNumber == m.Number) == null)
|
||||
if(mv.Members.Find((x) => x.MemberNumber == m.Number) == null)
|
||||
//if there is none, create one
|
||||
{
|
||||
this.mv.Members.Add(new MvInvitedMember()
|
||||
mv.Members.Add(new MvInvitedMember()
|
||||
{
|
||||
MemberNumber = m.Number,
|
||||
});
|
||||
|
@ -455,7 +381,7 @@ namespace dezentrale.view
|
|||
}
|
||||
}
|
||||
|
||||
foreach(MvInvitedMember mvi in this.mv.Members)
|
||||
foreach(MvInvitedMember mvi in mv.Members)
|
||||
lvMvInvitations.AddEntry(mvi);
|
||||
}
|
||||
|
||||
|
@ -471,22 +397,15 @@ namespace dezentrale.view
|
|||
Init();
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
private void frmMv_Closing(object sender, EventArgs e)
|
||||
{
|
||||
DialogResult = DialogResult.OK;
|
||||
/*
|
||||
GenerateAuthCode = chkGenerateAuthCode.Checked;
|
||||
Headline = tbPreviewHeadline.Text;
|
||||
Body = tbPreviewBody.Text;
|
||||
InvitationGroup = (MvInvitationGroup)cbInviteSelection.SelectedItem;
|
||||
MvEventDate = new DateTime(mvDate.Value.Year, mvDate.Value.Month, mvDate.Value.Day,
|
||||
mvTime.Value.Hour, mvTime.Value.Minute, mvTime.Value.Second);
|
||||
*/
|
||||
UpdateMvData();
|
||||
}
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
this.Close();
|
||||
}
|
||||
// private void btnCancel_Click(object sender, EventArgs e)
|
||||
// {
|
||||
// this.Close();
|
||||
// }
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue