static void createInstance() { if (instance == null) { instance = new SpeechPlayer(); } }
void tabControlFile_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Middle) { TabControl tc = sender as TabControl; // 選択タブではなくて、マウスの上にあるタブだな if (tc != null && tc.SelectedTab != null) { Point p = tabControlFile.PointToClient(Cursor.Position); for (int i = 0; i < tabControlFile.TabPages.Count; ++i) { Rectangle rect = tabControlFile.GetTabRect(i); if (rect.Contains(p)) { // tab Close // conform save? TabPage tab = tabControlFile.TabPages[i]; Editor edit = tab.Tag as Editor; SpeechPlayer.stop(edit); if (edit != null && edit.checkModify()) { DialogResult result = MessageBox.Show( this, tab.Text + " は変更されています。保存しますか?", "タブを閉じる", MessageBoxButtons.YesNoCancel ); // foreach回している最中に消しても大丈夫なのかしら? switch (result) { case DialogResult.Cancel: return; case DialogResult.No: break; case DialogResult.Yes: save(edit); break; default: break; } } if (tc.SelectedTab == tab) { setTitle(""); } tc.TabPages.RemoveAt(i); break; } } } } }
void TabCloseAll_Click(object sender, EventArgs e) { foreach (TabPage tab in tabControlFile.TabPages) { // modify check? Editor edit = tab.Tag as Editor; SpeechPlayer.stop(edit); if (edit != null && edit.checkModify()) { DialogResult result = MessageBox.Show( this, tab.Text + " は変更されています。保存しますか?", "全てのタブを閉じる", MessageBoxButtons.YesNoCancel ); switch (result) { case DialogResult.Cancel: return; case DialogResult.No: break; case DialogResult.Yes: save(edit); break; default: break; } } // セーブキャンセルしたときでも意図したとおりタイトル消せる?? if (tab == tabControlFile.SelectedTab) { setTitle(""); } // foreach回している最中に消しても大丈夫っぽい tabControlFile.TabPages.Remove(tab); } }
void TabClose_Click(object sender, EventArgs e) { // middle click時と微妙に被っている TabPage tab = tabControlFile.SelectedTab; if (tab != null) { Editor edit = tab.Tag as Editor; SpeechPlayer.stop(edit); if (edit != null && edit.checkModify()) { DialogResult result = MessageBox.Show( this, tab.Text + " は変更されています。保存しますか?", "タブを閉じる", MessageBoxButtons.YesNoCancel ); // foreach回している最中に消しても大丈夫なのかしら? switch (result) { case DialogResult.Cancel: return; case DialogResult.No: break; case DialogResult.Yes: save(edit); break; default: break; } } tabControlFile.TabPages.Remove(tab); setTitle(""); // 次に選択されるタブは指定しないと先頭になる模様 } }
void SpeechStop_Click(object sender, EventArgs e) { SpeechPlayer.stop(null); // force stop }