在 C# 中,我遇到了启动画面的问题。当需要关闭并且主 Form1 出现时,它会移动到 Form1 的右上角。然后消失。我以前从未发生过这种情况,并且几乎没有解决它的想法。我希望启动画面消失在中央屏幕中,而不是移动到打开 Form1 的上角。这是代码:
public Form1() {
Splash mySplash = new Splash();
mySplash.TotalValue = 7; //or however many steps you must complete
mySplash.Show();
mySplash.Update();
InitializeComponent();
//--<begin>--------------
this.Hide();
this.WindowState = FormWindowState.Normal;
mySplash.Progress++;
printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
printBOM.PrintPage += new PrintPageEventHandler(printBOM_PrintPage);
printList.PrintPage += new PrintPageEventHandler(printList_PrintPage);
mySplash.Progress++;
// using old Kodak Imaging OCX !
axImgEdit1.Image = "\\\\Netstore\\eng_share\\EView\\BOB-eView9.tif";
axImgEdit1.DisplayScaleAlgorithm =
ImgeditLibCtl.DisplayScaleConstants.wiScaleOptimize;
axImgEdit1.FitTo(0);
axImgEdit1.Display();
mySplash.Progress++;
//~~~~~~~~~~~~~~~~~~~~Getting printer info~~~~~~~~~~~~~~~~~~~~~~~~~
List<Win32_Printer> printerList = Win32_Printer.GetList();
int i = 0;
foreach (Win32_Printer printer in printerList) {
prnName = printer.Name;
prnPort = printer.PortName;
prnDriver = printer.DriverName;
if (i == 0) {
prnNameString = prnName;
prnDriverString = prnDriver;
prnPortString = prnPort;
}
else {
prnNameString += "," + prnName;
prnDriverString += "," + prnDriver;
prnPortString += "," + prnPort;
}
i++;
}
mySplash.Progress++;
EViewMethods.defaultPrn[0] = Settings.Default.DefaultPrinter; //defaultPrn[] is
//string array holding the default printer name, driver and port
EViewMethods.defaultPrn[1] = Settings.Default.DefaultPrinterDriver;
EViewMethods.defaultPrn[2] = Settings.Default.DefaultPrinterPort;
//making this printer the system default printer
object printerName = Settings.Default.DefaultPrinter;
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM
Win32_Printer");
ManagementObjectCollection collection = searcher.Get();
foreach (ManagementObject currentObject in collection) {
if (currentObject["name"].ToString() == printerName.ToString()) {
currentObject.InvokeMethod("SetDefaultPrinter", new object[] { printerName
});
}
}
mySplash.Progress++;
EViewMethods.reCenterEVafterDwgClose = Settings.Default.ReCenterEVafterDwgClose;
if (Settings.Default.ReCenterEVafterDwgClose == true)
recenterEViewAfterDrawingViewerClosesToolStripMenuItem.Checked = true;
else
recenterEViewAfterDrawingViewerClosesToolStripMenuItem.Checked = false;
//-------------------------------------------------------
EViewMethods.screenBehavior = Settings.Default.ViewStyle;
normalToolStripMenuItem.Checked = false;
clearViewToolStripMenuItem.Checked = false;
clearviewDULevLRToolStripMenuItem.Checked = false;
clearviewdULevLLToolStripMenuItem.Checked = false;
clearviewdURevULToolStripMenuItem.Checked = false;
clearviewdURevLLToolStripMenuItem.Checked = false;
clearviewdURevLRToolStripMenuItem.Checked = false;
smallScreenToolStripMenuItem.Checked = false;
switch (EViewMethods.screenBehavior) {
case "Normal":
normalToolStripMenuItem.Checked = true;
Settings.Default.FormViewDwgLocation = new Point(0, 0);
//Settings.Default.FormEviewLocation = new
//Point(EViewMethods.form1CenterLeft, EViewMethods.form1CenterTop);
Settings.Default.FormEviewLocation = new Point(588, 312);
Settings.Default.FormECNLocation = new Point(EViewMethods.formECNLeft,
EViewMethods.formECNTop);
//EViewMethods.reCenterEVafterDwgClose = false;
Form1.ActiveForm.SetDesktopLocation(588, 312);
break;
case "Clearview-dULevUR":
clearViewToolStripMenuItem.Checked = true;
Settings.Default.FormViewDwgLocation = new Point(0, 0);
Settings.Default.FormEviewLocation = new Point(1180, 0);
Settings.Default.FormECNLocation = new Point(EViewMethods.formECNLeft,
EViewMethods.formECNTop);
//EViewMethods.reCenterEVafterDwgClose = true;
Form1.ActiveForm.SetDesktopLocation(588, 312);
break;
case "Clearview-dULevLR":
clearviewDULevLRToolStripMenuItem.Checked = true;
Settings.Default.FormViewDwgLocation = new Point(0, 0);
Settings.Default.FormEviewLocation = new Point(1180, 622);
Settings.Default.FormECNLocation = new Point(EViewMethods.formECNLeft,
EViewMethods.formECNTop);
//EViewMethods.reCenterEVafterDwgClose = true;
Form1.ActiveForm.SetDesktopLocation(588, 312);
break;
case "Clearview-dULevLL":
clearviewdULevLLToolStripMenuItem.Checked = true;
Settings.Default.FormViewDwgLocation = new Point(0, 0);
Settings.Default.FormEviewLocation = new Point(0, 622);
Settings.Default.FormECNLocation = new Point(EViewMethods.formECNLeft,
EViewMethods.formECNTop);
//EViewMethods.reCenterEVafterDwgClose = true;
Form1.ActiveForm.SetDesktopLocation(588, 312);
break;
case "Clearview-dURevUL":
clearviewdURevULToolStripMenuItem.Checked = true;
Settings.Default.FormViewDwgLocation = new Point(825, 0);
Settings.Default.FormEviewLocation = new Point(0, 0);
Settings.Default.FormECNLocation = new Point(EViewMethods.formECNLeft,
EViewMethods.formECNTop);
//EViewMethods.reCenterEVafterDwgClose = true;
Form1.ActiveForm.SetDesktopLocation(588, 312);
break;
case "Clearview-dURevLL":
clearviewdURevLLToolStripMenuItem.Checked = true;
Settings.Default.FormViewDwgLocation = new Point(825, 0);
Settings.Default.FormEviewLocation = new Point(0, 622);
Settings.Default.FormECNLocation = new Point(EViewMethods.formECNLeft,
EViewMethods.formECNTop);
//EViewMethods.reCenterEVafterDwgClose = true;
Form1.ActiveForm.SetDesktopLocation(588, 312);
break;
case "Clearview-dURevLR":
clearviewdURevLRToolStripMenuItem.Checked = true;
Settings.Default.FormViewDwgLocation = new Point(825, 0);
Settings.Default.FormEviewLocation = new Point(1180, 622);
Settings.Default.FormECNLocation = new Point(EViewMethods.formECNLeft,
EViewMethods.formECNTop);
//EViewMethods.reCenterEVafterDwgClose = true;
Form1.ActiveForm.SetDesktopLocation(588, 312);
break;
case "Small-screen":
//clearviewdURevLRToolStripMenuItem.Checked = true;
smallScreenToolStripMenuItem.Checked = true;
Settings.Default.FormViewDwgLocation = new Point(0, 0);
Settings.Default.FormEviewLocation = new Point(0, 0);
Settings.Default.FormECNLocation = new Point(0, 0);
//EViewMethods.reCenterEVafterDwgClose = true;
Form1.ActiveForm.SetDesktopLocation(588, 312);
break;
}
//Form1.ActiveForm.SetDesktopLocation(588, 312); //all screen behavior mode will
//begin centered on the screen
EViewMethods.eviewUserPrefLocation = Settings.Default.FormEviewLocation;
//-------------------------------------------------------
EViewMethods.syncListToDwgNum = Settings.Default.SyncListDwgNum;
if (EViewMethods.syncListToDwgNum == true)
synchronizeListToActiveDwgToolStripMenuItem.Checked = true;
else
synchronizeListToActiveDwgToolStripMenuItem.Checked = false;
toolStripStatusLabel1.Text = "";
toolStripStatusLabel2.Text = Settings.Default.ViewStyle;
toolStripStatusLabel3.Text = Settings.Default.DefaultPrinter;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
Assembly asm = Assembly.GetExecutingAssembly();
AssemblyName asmName = asm.GetName();
EViewMethods.eviewVersion = asmName.Version.ToString();
radioPartInfo.Checked = true;
disableAllSearch();
EViewMethods.userName = Environment.UserName;
EViewMethods.openConnection();
mySplash.Progress++;
EViewMethods.loadFavorites(listFavorites);
mySplash.Close();
mySplash.Dispose();
this.Show();
this.ActiveControl = comboEntry;
}
更精简的列表只显示更相关的代码:
public Form1() {
Splash mySplash = new Splash();
mySplash.TotalValue = 7; //or however many steps you must complete
mySplash.Show();
mySplash.Update();
InitializeComponent();
//--<begin>--------------
this.Hide();
this.WindowState = FormWindowState.Normal;
mySplash.Progress++;
...
mySplash.Progress++;
...
mySplash.Progress++;
//~~~~~~~~~~~~~~~~~~~~Getting printer info~~~~~~~~~~~~~~~~~~~~~~~~~
List<Win32_Printer> printerList = Win32_Printer.GetList();
...
mySplash.Progress++;
...
mySplash.Progress++;
EViewMethods.reCenterEVafterDwgClose = Settings.Default.ReCenterEVafterDwgClose;
if (Settings.Default.ReCenterEVafterDwgClose == true)
recenterEViewAfterDrawingViewerClosesToolStripMenuItem.Checked = true;
else
recenterEViewAfterDrawingViewerClosesToolStripMenuItem.Checked = false;
//-------------------------------------------------------
EViewMethods.screenBehavior = Settings.Default.ViewStyle;
...
//Form1.ActiveForm.SetDesktopLocation(588, 312); //all screen behavior mode will
begin centered on the screen
EViewMethods.eviewUserPrefLocation = Settings.Default.FormEviewLocation;
//-------------------------------------------------------
EViewMethods.openConnection();
mySplash.Progress++;
...
mySplash.Close();
mySplash.Dispose();
this.Show();
this.ActiveControl = comboEntry;
}
飞溅代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.Threading;
namespace EView2 {
public partial class Splash : Form {
static int total = 100;
static int currPos = 0;
static string text;
// Threading
static Splash ms_frmSplash = null;
static Thread ms_oThread = null;
public Splash() {
InitializeComponent();
this.labelVersion.Text =
Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
public int TotalValue {
get {
return total;
}
set {
total = value;
progressBar1.Maximum = total;
}
}
public int Progress {
get {
return currPos;
}
set {
currPos = value;
try {
progressBar1.Value = currPos;
}
catch {
}
}
}
static public void ShowSplashScreen() {
// Make sure it's only launched once.
if (ms_frmSplash != null)
return;
ms_oThread = new Thread(new ThreadStart(Splash.ShowForm));
ms_oThread.IsBackground = true;
ms_oThread.Start();
}
// A property returning the splash screen instance
static public Splash SplashForm {
get {
return ms_frmSplash;
}
}
// A private entry point for the thread.
static private void ShowForm() {
ms_frmSplash = new Splash();
Application.Run(ms_frmSplash);
}