台灣最大程式設計社群網站
線上人數
835
 
會員總數:240668
討論主題:186529
歡迎您免費加入會員
討論區列表 >> C# >> 關於Window Form在XP開正常WIN7部分異常
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
關於Window Form在XP開正常WIN7部分異常
價值 : 50 QP  點閱數:292 回應數:12

樓主

bryant0926
門外漢
0 2
78 7
發送站內信

最近小弟負責門禁系統
是一個簡單的WINDOW FORM介面
純粹顯示名稱 工號那些
則WINDOW FORM有兩個頁 一個顯示最新十位另一個是設定-選取COMPORT啟用
在XP環境下刷卡都正常
可是到WIN7環境刷卡 資料庫資料有正常存進去
畫面在顯示十位的時候會無法顯示
則在設定那則是正常
想說應該是重新載入最新十位的時候有異常
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new fmEmpMain());//卡在這行-會顯示並未將物件參考設定為物件的執行個體
}


protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);//偵查的時候好像有出現執行createhandle時 無法呼叫值dispose
}
再麻煩各位高手是否有辦法解決~
謝謝


搜尋相關Tags的文章: [ WINDOW FORM ] , [ XP ] , [ WIN7 ] ,
本篇文章發表於2017-07-11 18:04
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

小魚
檢舉此回應
WinForm好像不是長這樣,
這比較像主控台應用程式的感覺,
還是說舊版的是長這樣?
你乾脆新建一個專案,
再將舊版的程式碼貼過去適當的地方吧。
本篇文章回覆於2017-07-11 19:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

bryant0926
檢舉此回應
貼到新建的專案出現一樣的問題~
#region 感應器觸發事件
private void com_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string sBuffer = string.Empty;
sBuffer = ((SerialPort)sender).ReadExisting();
sBuffer = sBuffer.Replace("\r\n", "");

if (!sBuffer.Equals(""))
{
sBuffer = Entrant.GetRight(sBuffer, 0, 5);
this.InfoDisplay(sBuffer);
}
}
#endregion

#region
private void InfoDisplay(string cardID)
{
DataSet ds = ent.GetEmpInfo(cardID);
if (ds != null)
{
if (ds.Tables[0].Rows.Count > 0)
{
string workID = ds.Tables[0].Rows[0]["workID"].ToString();
ent.InsertEntryData(workID, "", "N", "WH01", DateTime.Now, DateTime.Now, "", "工作", "");
ent.InsertExitData(workID, "", "N", "WH01", DateTime.Now, DateTime.Now, "", "");

string picPath = System.Windows.Forms.Application.StartupPath + @"\face\" + workID + ".jpg";
if (!File.Exists(picPath))
{
picPath = Path.GetDirectoryName(picPath) + @"\Question.jpg";
}

fmEmpInfo fme = new fmEmpInfo();
fme.dsEmp = ds;
fme.urlFace = picPath;
fme.StartPosition = FormStartPosition.CenterScreen;
fme.ShowDialog();
this.DialogResult = DialogResult.OK;
fme.Dispose();
fme = null;
this.gvDataBind();
}
else
{
MessageBox.Show("卡號:" + cardID + "不存在!");
}
}
}
應該是跑這段有問題
刷卡後只在顯示最新十位那畫面有問題
而且值有跑進資料庫
本篇文章回覆於2017-07-12 09:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
不錯的參考

春天
檢舉此回應
fmEmpMain() 為NULL的原因大概是 fmEmpMain() 這個Form在建構式裡就已經catch了,看你要不要用try catch包住整個建構式看看到底怎麼回事
本篇文章回覆於2017-07-12 09:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

誰是誰
檢舉此回應
建議一樓,打開你的 Visual Studio , 新增一個 Windows Forms Application 專案。
之後開啟方案總管,開啟位於剛剛新增專案下的 program.cs

樓主貼的就是 Windows Forms Application 的進入點。
本篇文章回覆於2017-07-12 11:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

bryant0926
檢舉此回應
大概知道出在哪個環節了
private void gvDataBind()
{
DataSet ds = ent.GetLastRecords();
if (ds != null)
{
if (ds.Tables[0].Rows.Count > 0)
{
this.gvData.DataSource = ds.Tables[0];
}
}
}
//ent.GetLastRecords();跳到裡面後

public DataSet GetLastRecords()
{
DataSet ds = new DataSet();
try
{
SqlServerDBAccess sa = new SqlServerDBAccess();
ds = sa.GetDataSet("exec P_GetLastRecords");
sa = null;
}
catch (Exception ex)
{
string x = ex.Message.ToString();
}
return ds;
}
//跑到ds = sa.GetDataSet這段時進到GetDataSet
//可是回到ds = sa.GetDataSet("exec P_GetLastRecords"); ds好像是null
//ds.Tables[0].Rows.Count 的count卻為10
#region GetDataSet
public DataSet GetDataSet(string sql)
{

#endregion
SqlDataAdapter sda = new SqlDataAdapter(sql, connStr);
DataSet ds = new DataSet();
sda.Fill(ds);
sda.Dispose();
sda = null;

return ds;
}
//所以最後就直接跳到Application.Run(new fmEmpMain());顯示並未將物件參考設定為物件的執行個體
本篇文章回覆於2017-07-12 11:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

bryant0926
檢舉此回應
而且如果我中斷點下在
public DataSet GetLastRecords()前後
逐步執行 竟然就可以順利顯示
不會出現並未將物件參考設定為物件的執行個體
本篇文章回覆於2017-07-12 12:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
最有價值解答

史努比
檢舉此回應
win7 64bit OS 當 exception 發生在form_load時, 不會中斷程式, 程式會繼續RUN下去,

所以你才會看到這種怪異的的現象, 用個try catch把form_load裡的資料包起來, RUN看看

應該可以攔截到其它的例外情況。
本篇文章回覆於2017-07-12 16:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

bryant0926
檢舉此回應
private void gvDataBind()
{
DataSet ds = ent.GetLastRecords();
if (ds != null)
{
if (ds.Tables[0].Rows.Count > 0)
{
try
{
this.gvData.DataSource = ds.Tables[0];
}
catch(Exception ex)
{
MessageBox.Show("無法開啟");
}
}
}<<<<<<<
}
我用try catch包一樣
問題都出在run到try裡面跑this.gvData.DataSource這段
在設定頁面跑可正常跑完
則在刷卡頁面 一跑到this.gvData.DataSource這段會自動跳到<<<<<那段
本篇文章回覆於2017-07-27 16:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

bryant0926
檢舉此回應
補八樓的
跳到那段後 之後一樣會卡在Application.Run(new fmEmpMain());
然後會顯示並未將物件參考設定為物件的執行個體
本篇文章回覆於2017-07-27 16:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

小魚
檢舉此回應
並未將物件參考設定為物件的執行個體

我通常會出現這個錯誤訊息
是宣告了物件、但沒有new出來
會出現這個錯誤訊息。
本篇文章回覆於2017-07-27 21:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
不錯的參考

Alex_Lee
捐贈 VP 給 Alex_Lee 檢舉此回應
改成這樣吧
private void gvDataBind()
{
DataSet ds = ent.GetLastRecords();
if (ds != null)
{
if (ds.Tables.Count > 0)
{
try
{
this.gvData.DataSource = ds.Tables[0];
}
catch(Exception ex)
{
MessageBox.Show("無法開啟");
}
}
}
}
</pre>
本篇文章回覆於2017-08-02 10:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
不錯的參考

QZ_CHUNG
檢舉此回應
public DataSet GetDataSet(string sql)
{
SqlDataAdapter sda = new SqlDataAdapter(sql, connStr);
DataSet ds = new DataSet();
sda.Fill(ds);
sda.Dispose();
sda = null;

return ds;
}

這邊用try catch 包一下,看一下有沒有問題
本篇文章回覆於2017-08-02 17:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.