Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 2

0
votes
answers
84 views
+10

未處理的異常錯誤 - 用戶登錄失敗

0

這裏有一個奇怪的錯誤。在我們的ASP.NET 4.6應用中,使用實體框架6.2,當訪問SQL Azure數據庫時,我們得到「用戶登錄失敗」。我很確定錯誤的原因是在Azure中切換層。我沒有得到的是爲什麼沒有發現錯誤。我們所有的SQL操作都在try ... catch塊內。錯誤從塊中消失,並在應用程序崩潰之前被Globals.asax捕獲。 我們有未處理的異常錯誤 - 用戶登錄失敗

SetExecutionStrategy("System.Data.SqlClient", Function() New SqlServer.SqlAzureExecutionStrategy(10, TimeSpan.FromSeconds(7))) 

其中,按照我的理解,將重試任何SQL執行10次,至少70秒內從第一個錯誤。根據微軟技術支持,這不是因爲它尚未與SQL Azure建立連接而參與其中。 ConnectRetryCount和連接字符串中的時間間隔不適用,因爲它正在與服務器通話。服務器只是說,「我知道你在那裏,但我不會讓你進去!」 根據MS Tech的支持,解決這個問題的唯一方法就是圍繞我們所有的SQL命令嘗試...... catch塊......我們這樣做!它只是通過和崩潰的應用程序!

我不能在globals.asax中重試,因爲那時它已經崩潰了。 根據MS,沒有辦法在上下文中捕獲錯誤並從那裏重試。那麼,解決方案是什麼?除了「只是讓應用崩潰並讓他們刷新頁面」之外,還必須有一些答案!

當頁面刷新幾秒後,一切正常。沒有錯誤,沒有問題。

的代碼引發錯誤的線路之一的實例:

MapTo = ctx.BrowserMaps.FirstOrDefault(Function(x) code.Contains(x.NameOrUserAgent)) 

這真的很簡單。這個只是碰巧遇到了很多,因爲這個代碼塊被頻繁調用。實際的SQL請求是不相關的,因爲不管使用哪條線,EF內的連接都會失敗。

沙发
0
2

服務器登錄將斷開連接,同時向上/向下擴展到新層,並且事務回滾。但是,包含的數據庫登錄在擴展過程中保持連接狀態,因此建議通過服務器登錄進行登錄。

嘗試並捕獲可能無法解決問題,因爲您可能正在捕獲錯誤#0,並且Azure SQL數據庫中的很多錯誤落在該錯誤0類別上。

只是一個評論,縮放後的性能可能在縮放後很差,幾分鐘後會提高。查詢計劃也可能會改變。

+0

這或多或少是答案。在我們的例子中,在模型的構造函數中放置一個try.catch允許我們設置一些重試邏輯。我們正在調查數據庫登錄,謝謝。 –

0
votes
answers
60 views
+10

檢查是否Textfile.txt包含某些字符串

0

我正在創建一個系統來驗證文本文件是否包含此序列號,如果它包含它將打開到Form2。檢查是否Textfile.txt包含某些字符串

enter image description here

沙发
0
1
Dim content = My.Computer.FileSystem.ReadAllText(filePath) 
If content.Contains(stringToSearch) Then 
    Dim form As New Form2 
    form.Show() 
End If 
+0

效果很不錯,謝謝! –

0
votes
answers
28 views
+10

允許全局熱鍵

1

首先,我不是一個真正的編碼器,但我很滿意迄今爲止所做的。允許全局熱鍵

我已經寫下了這個代碼,這是與機器人技術。下面的代碼允許我在單擊表單時使用鍵盤快捷鍵。但是,無論應用程序是否處於焦點或甚至最小化狀態,我都需要使用熱鍵。

我已經看了網上,但它不是很清楚。

Public Class MainForm 

    Private Sub MainForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown 

     If (e.KeyCode And Not Keys.Modifiers) = Keys.T AndAlso e.Modifiers = Keys.Control Then 
      DF1Com1.Write("O:1/0", "1") ' (O:9/0) (R) 
     End If 

     'If e.KeyCode = Keys.R Then 
     'DF1Com1.Write("O:1/0", "1") ' (O:9/0) (R) 
     'End If 

    End Sub 

    Private Sub MainForm_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp 

     If (e.KeyCode And Not Keys.Modifiers) = Keys.T AndAlso e.Modifiers = Keys.Control Then 
      DF1Com1.Write("O:1/0", "0") ' (O:9/0) (R) 
     End If 

     'If e.KeyCode = Keys.R Then 
     'DF1Com1.Write("O:1/0", "0") ' (O:9/0) (R) 
     'End If 

    End Sub 

Public Class MainForm 


    Private Sub MainForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown 

     If (e.KeyCode And Not Keys.Modifiers) = Keys.T AndAlso e.Modifiers = Keys.Control Then 
      DF1Com1.Write("O:1/0", "1") ' (O:9/0) (R) 
     End If 

     'If e.KeyCode = Keys.R Then 
     'DF1Com1.Write("O:1/0", "1") ' (O:9/0) (R) 
     'End If 

    End Sub 

    Private Sub MainForm_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp 

     If (e.KeyCode And Not Keys.Modifiers) = Keys.T AndAlso e.Modifiers = Keys.Control Then 
      DF1Com1.Write("O:1/0", "0") ' (O:9/0) (R) 
     End If 

     'If e.KeyCode = Keys.R Then 
     'DF1Com1.Write("O:1/0", "0") ' (O:9/0) (R) 
     'End If 

    End Sub 

End Class 

更新:

權。我已經添加了一個允許註冊GlobalKey的類。

在我的主要形式,我現在有這個鍵:

Public Class MainForm 
    Dim hkr As New HotKeyRegistryClass(Me.Handle) 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     hkr.Register(HotKeyRegistryClass.Modifiers.MOD_CTRL, Keys.A).ToString() 
     hkr.Register(HotKeyRegistryClass.Modifiers.MOD_CTRL, Keys.S).ToString() 
     hkr.Register(HotKeyRegistryClass.Modifiers.MOD_CTRL, Keys.D).ToString() 
     hkr.Register(HotKeyRegistryClass.Modifiers.MOD_CTRL, Keys.F).ToString() 
     hkr.Register(HotKeyRegistryClass.Modifiers.MOD_CTRL, Keys.G).ToString() 
     hkr.Register(HotKeyRegistryClass.Modifiers.MOD_SHIFT Or HotKeyRegistryClass.Modifiers.MOD_CTRL, Keys.H).ToString() 
    End Sub 

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
     If m.Msg = HotKeyRegistryClass.Messages.WM_HOTKEY Then 'NOT THE ACTUAL WINDOWS NAMESPACE 
      Dim ID As String = m.WParam.ToString() 
      Select Case ID 
       Case 0 : If DF1Com1.Write("O:1/0", "1") Then DF1Com1.Write("O:1/0", "0") 
       Case 1 : MessageBox.Show("S") 
       Case 2 : MessageBox.Show("D") 
       Case 3 : MessageBox.Show("F") 
       Case 4 : MessageBox.Show("G") 
       Case 5 : MessageBox.Show("H") 
      End Select 
     End If 
     MyBase.WndProc(m) 
    End Sub 

如果你看看案例0。它可以工作,但它不會使鑰匙備份。它一直壓下來。我需要它的時候,關鍵是鬱悶它DF1Com1.Write( 「O:1/0」, 「0」)'

類代碼

Public NotInheritable Class HotKeyRegistryClass 
    Private Declare Function RegisterHotKey Lib "user32.dll" (ByVal handle As IntPtr, ByVal id As Int32, ByVal fsModifier As Int32, ByVal vk As Int32) As Int32 
    Private Declare Function UnregisterHotKey Lib "user32.dll" (ByVal handle As IntPtr, ByVal id As Int32) As Int32 
    Private Handle As IntPtr = IntPtr.Zero 
    Private Registry As New System.Collections.Generic.List(Of Int32) 
    Public Enum Messages 
     [WM_HOTKEY] = &H312 
    End Enum 
    Public Enum Modifiers 
     [MOD_ALT] = &H1 
     [MOD_CTRL] = &H2 
     [MOD_SHIFT] = &H4 
    End Enum 
    Sub New(ByVal Handle As IntPtr) 
     Me.Handle = Handle 
    End Sub 
    Public Function Register(ByVal Modifier As Int32, ByVal Key As System.Windows.Forms.Keys) As Int32 
     Dim ret As Int32 
     ret = NextAvailableIndex() 
     Call RegisterHotKey(Me.Handle, ret, Modifier, Key) 
     Registry.Insert(ret, ret) 
     Return ret 
    End Function 
    Public Sub Unregister(ByVal ID As Int32) 
     Call UnregisterHotKey(Me.Handle, ID) 
     Registry.Remove(ID) 
    End Sub 
    Private Function NextAvailableIndex() As Int32 
     Dim ret As Int32 = 0 
     Dim n As Int32 = 0 
     For i As Int32 = 0 To Registry.Count - 1 
      If Registry(i) = n Then 
       n = n + 1 
      ElseIf n < Registry(i) Then 
       Return n 
      End If 
     Next 
     If n = Registry.Count Then 
      Return Registry.Count 
     End If 
     Return ret 
    End Function 
End Class 
+1

查看'Windows.Input.Keyboard.GetKeyStates',而不是捕獲窗體上的關鍵事件,輪詢計時器或後臺線程中的鍵狀態。 –

+1

問這個問題。有點不公正。正如我所說的。我不是一個硬核編碼器。 – Arthor

+1

我已經更新了代碼,我幾乎是他們的。仍在繼續,但我堅持最後一部分。 – Arthor

沙发
0
1

遺憾的是,只有RegisterHotkey告訴你當一個組合鍵被激活時。另外,正如您已經意識到的那樣,只有當您的應用具有焦點時,您才能使用KeyDownKeyUp事件。

真正全球化的KeyDownKeyUp的唯一方法是使用低級別的鍵盤鉤子。由於我不想複製我的整個答案,我只會鏈接到它。該鏈接將爲您設置鍵盤掛鉤提供一些指導。

How to disable/override Windows 10 Hotkeys with C#

另一種可能性是在熱鍵激活這樣執行這兩個命令...

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
     If m.Msg = HotKeyRegistryClass.Messages.WM_HOTKEY Then 'NOT THE ACTUAL WINDOWS NAMESPACE 
      Dim ID As String = m.WParam.ToString() 
      Select Case ID 
       Case 0 : 
        DF1Com1.Write("O:1/0", "1") 
        System.Threading.Thread.Sleep(2000) 
        DF1Com1.Write("O:1/0", "0") 
       Case 1 : MessageBox.Show("S") 
       Case 2 : MessageBox.Show("D") 
       Case 3 : MessageBox.Show("F") 
       Case 4 : MessageBox.Show("G") 
       Case 5 : MessageBox.Show("H") 
      End Select 
     End If 
     MyBase.WndProc(m) 
    End Sub 
+0

只是一個簡單的問題。我知道你在C#中有你的解決方案。是否有一個VB.NET解決方案,因爲我的機器人系統使用VB.NET。和以前一樣,我不介意如果我不能進入最低級別,我只需要一種方法,一旦釋放了密鑰,就可以停用'DF1Com1.Write(「O:1/0」,「0」)。謝謝 – Arthor

+0

你應該可以從CodeProject中獲取項目並將C#編譯成DLL庫。然後,您可以引用該庫並在VB.net中編寫處理程序。 –

+0

也許....通過RegisterHotkey激活每個熱鍵應執行第一個代碼DF1Com1.Write(「O:1/0」,「1」),然後休眠一秒鐘然後執行最後一位, 'DF1Com1.Write(「O:1/0」,「0」)'。基本上這意味着即使您按住按鍵,每次按鍵也只能使機器人移動一定的量。如果這不起作用,那麼我只能想到一個鍵盤鉤子。 –

板凳
0
0

達到這個目的可能是使用布爾追蹤的另一種選擇。這意味着,按熱鍵啓動,然後再按一次停止。

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
Static toggle As Boolean 
     If m.Msg = HotKeyRegistryClass.Messages.WM_HOTKEY Then 'NOT THE ACTUAL WINDOWS NAMESPACE 
      Dim ID As String = m.WParam.ToString() 
      Select Case ID 
       Case 0 : 
      If toggle Then 
      DF1Com1.Write("O:1/0", "0") 
      Else 
         DF1Com1.Write("O:1/0", "1") 
      End If 
      toggle = Not toggle 
       Case 1 : MessageBox.Show("S") 
       Case 2 : MessageBox.Show("D") 
       Case 3 : MessageBox.Show("F") 
       Case 4 : MessageBox.Show("G") 
       Case 5 : MessageBox.Show("H") 
      End Select 
     End If 
     MyBase.WndProc(m) 
    End Sub 
+0

你好,好主意。但不幸的是,這樣做不可行。我只能想象會出錯的用戶數量。由於這個系統不只是由我自己使用, – Arthor

+0

你好,有人提議的解決方案的任何更新有一天提出。謝謝 – Arthor

+0

我已經取得了一些進展,但假期讓我感到耽擱。我會盡力在今天完成。 –

0
votes
answers
29 views
+10

什麼interace爲的System.Array類的運行時實現在.net中是什麼意思?

0

documentation什麼interace爲的System.Array類的運行時實現在.net中是什麼意思?

[...] Array類實現了System.Collections.Generic.IList<T>System.Collections.Generic.ICollection<T>System.Collections.Generic.IEnumerable<T>通用接口。 實現在運行時提供給數組,因此對文檔構建工具不可見。

這是提供給C#開發人員。我的意思是我可以提供運行時實現到任何類的接口嗎?

+0

文檔只能拿你這一步,如果你想進一步挖掘,閱讀源代碼,https://github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/ Array.cs –

+1

https://stackoverflow.com/q/11163297/17034 –

+0

感謝@HansPassant。正是我需要的。 –

沙发
0
2

是,數組是特殊的,準確地表現爲鏈接的文件說。

不,你不能隨心所欲(甚至特定的)接口的類在運行時,除非你正在創建自己的實現CLR的補充。

注意,有很多方法來模擬接口加入喜歡的擴展方法或代理類包裝的對象,但有添加接口類動態沒有真正的辦法的行爲。

+0

感謝您的解釋。所以,這個動態接口實現是CLR內置的邏輯,只適用於數組類型。 –

0
votes
answers
44 views
+10

顯示messagebox如果select查詢返回沒有行在vb.net

0

我有這個問題,如果選擇查詢有行,它會傳遞數據到datagridview,但如果查詢結果沒有行,messagebox將出現包含「沒有記錄爲此代碼。「顯示messagebox如果select查詢返回沒有行在vb.net

這是我的代碼:

Private Sub txtScheduleID_KeyDown(sender As Object, e As KeyEventArgs) Handles txtScheduleID.KeyDown 
    If (e.KeyCode = Keys.Space) Then 

     Dim TextboxValue As String = RTrim(txtScheduleID.Text) 
     Dim vals = TextboxValue.Split(" ").Last() 

     sqlCon.Open() 
     Try 
      Dim QUERY As String 

      QUERY = "SELECT [Class Schedule LINE].SchedID, ListofSubjects.[Course No.], ListofSubjects.[Descriptive Title], Section.Section, Curriculum.[Lab.] + Curriculum.[Lec.], UtlyTIMETable.[FROM Time] +'-'+ UtlyTIMETable.[TO Time] + ' ' + UtlyDAY.Day + ' ' + UtlyRoom.Building + ' ' +UtlyRoom.[Room No.], UtlyInstructor.[Last Name] + ', ' + LEFT (UtlyInstructor.[First Name],1)+'.' " & 
        "FROM [Class Schedule LINE] INNER JOIN Curriculum ON [Class Schedule LINE].[Subject Code] = Curriculum.[Subject Code] INNER JOIN ListofSubjects ON Curriculum.SubjectID = ListofSubjects.SubjectID INNER JOIN Section ON [Class Schedule LINE].Section = Section.SectionID INNER JOIN UtlyTIMETable ON [Class Schedule LINE].TimeID = UtlyTIMETable.TimeID INNER JOIN UtlyDAY ON [Class Schedule LINE].DayID = UtlyDAY.DayID INNER JOIN UtlyRoom ON [Class Schedule LINE].RoomID = UtlyRoom.RoomID INNER JOIN UtlyInstructor ON [Class Schedule LINE].InstructorID = UtlyInstructor.IntructorID " & 
        "WHERE ([Class Schedule LINE].SchedID = '" + vals + "') " 
      CMD = New SqlCommand(QUERY, sqlCon) 
      Reader = CMD.ExecuteReader 
      While Reader.Read 
       table.Rows.Add(Reader.GetInt32(0), Reader.GetString(1), Reader.GetString(2), Reader.GetString(3), Reader.GetDecimal(4), Reader.GetString(5), Reader.GetString(6)) 
       dgvSubjectsEnrolled.DataSource = table 
      End While 
     Catch ex As Exception 
      MessageBox.Show(ex.Message) 
     End Try 
     sqlCon.Close() 
    End If 
End Sub 

請編輯我的代碼。謝謝

沙发
0
1

讀者沒有錯誤是不行的。

If Reader.HasRows Then 
While Reader.Read 
'Your code 
Else 
MessageBox.Show() 
End If 

如何把你的連接。關閉在最後一塊,所以你確信它會關閉,即使有一個錯誤。首先檢查它的狀態。

+1

哦,這只是一個簡單的解決方案,我的問題。感謝@mary它工作! – deitysha

0
votes
answers
58 views
+10

C#Lambda表達式到VB.Net

0

我想轉換C#Lambda表達式到VB.Net

cfind.OnResponseReceived = (DicomCFindRequest rq, DicomCFindResponse rp) => { 
    Console.WriteLine("Study UID: {0}", rp.Dataset.Get<string>(DicomTag.StudyInstanceUID)); 
}; 

到VB.Net

但是, 既不

AddHandler cfind.OnResponseReceived, AddressOf onResponse 

也不

AddHandler cfind.OnResponseReceived, Sub(rq, rp) 
     onCFindResponse(rq, rp) 
End Sub 

事作品.. 我該如何轉換它?

+0

的作用,並不等同 - 你重構原始的C#Console.WriteLine行動統一到一個單獨的'Sub'? – StuartLC

+0

這是一項任務,而不是事件訂閱。注意=,沒有+ =。因此使用AddHander是不正確的。賦值在VB.NET中的作用相同,您可以使用=。使用Sub,而不是Function。 –

沙发
0
2

這應該是對應的VB.NET:要執行

cfind.OnResponseReceived = Sub(rq As DicomCFindRequest, rp As DicomCFindResponse) 
    Console.WriteLine("Study UID: {0}", rp.Dataset.[Get](Of String)(DicomTag.StudyInstanceUID)) 

End Sub 
+0

由於該方法不返回任何東西,它應該是一個'Sub',而不是'Function'。 –

+0

@visualvincent你是對的,謝謝。更新了答案。 – CodingYoshi

0
votes
answers
48 views
+10

VB如何按升序和降序對ListView進行排序

0

我不明白爲什麼這不起作用。我有一個ListView,我希望能夠按升序和降序排序。當逐行逐行通過代碼時看起來一切順利,除了lvItems.Sorting將不等於Descending。它在None {0}和Ascending {1}之間處於一個常量循環中。VB如何按升序和降序對ListView進行排序

這裏是Form類:

Private Sub lvItems_ColumnClick(sender As Object, e As System.Windows.Forms.ColumnClickEventArgs) Handles lvItems.ColumnClick 

    ' If current column is not the previously clicked column 
    ' Add 
    If e.Column <> sortColumn Then 

     ' Set the sort column to the new column 
     sortColumn = e.Column 

     'Default to ascending sort order 
     lvItems.Sorting = SortOrder.Ascending 

    Else 

     'Flip the sort order 
     If lvItems.Sorting = SortOrder.Ascending Then 
      lvItems.Sorting = SortOrder.Descending 
     Else 
      lvItems.Sorting = SortOrder.Ascending 
     End If 
    End If 

    'Set the ListviewItemSorter property to a new ListviewItemComparer object 
    Me.lvItems.ListViewItemSorter = New ListViewItemComparer(e.Column, lvItems.Sorting) 

    ' Call the sort method to manually sort 
    lvItems.Sort() 

End Sub 

這裏是ListViewItemComparer類:

Public Class ListViewItemComparer 

    Implements IComparer 

    Private col As Integer 
    Private order As SortOrder 

    Public Sub New() 
     col = 0 
     order = SortOrder.Ascending 
    End Sub 

    Public Sub New(column As Integer, order As SortOrder) 
     col = column 
     Me.order = order 
    End Sub 

    Public Function Compare(x As Object, y As Object) As Integer Implements System.Collections.IComparer.Compare 

     Dim returnVal As Integer = -1 

     Try 

      ' Attempt to parse the two objects as DateTime 
      Dim firstDate As System.DateTime = DateTime.Parse(CType(x, ListViewItem).SubItems(col).Text) 
      Dim secondDate As System.DateTime = DateTime.Parse(CType(y, ListViewItem).SubItems(col).Text) 

      ' Compare as date 
      returnVal = DateTime.Compare(firstDate, secondDate) 

     Catch ex As Exception 

      ' If date parse failed then fall here to determine if objects are numeric 
      If IsNumeric(CType(x, ListViewItem).SubItems(col).Text) And 
       IsNumeric(CType(y, ListViewItem).SubItems(col).Text) Then 

       ' Compare as numeric 
       returnVal = Val(CType(x, ListViewItem).SubItems(col).Text).CompareTo(Val(CType(y, ListViewItem).SubItems(col).Text)) 

      Else 
       ' If not numeric then compare as string 
       returnVal = [String].Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text) 
      End If 

     End Try 

     ' If order is descending then invert value 
     If order = SortOrder.Descending Then 
      returnVal *= -1 
     End If 

     Return returnVal 

    End Function 

End Class 

不管是什麼數據我把我只能似乎得到升序排列。讓我知道是否有必要提供更多信息。

+1

不要設置'Sorting'和'ListViewItemSorter'。正如文檔所述,第一個用於按字母順序自動排序,第二個用於自定義排序。挑一個並使用它。 – jmcilhinney

沙发
0
0

感謝@ jmcilhinney的評論,我能夠解決問題。我沒有使用SortingListViewItemSorter,而是創建了一個字符串變量ordering併爲其分配了合適的排序順序(請參閱下面的最終解決方案)。

 'If current column is not the previously clicked column 
     'Add 
     If e.Column <> sortColumn Then 

      ' Set the sort column to the new column 
      sortColumn = e.Column 

      'Default to ascending sort order 
      ordering = "Ascending" 

     Else 

      'Flip the sort order 
      If ordering = "Ascending" Then 
       ordering = "Descending" 
      Else 
       ordering = "Ascending" 
      End If 
     End If 

     'Set the ListviewItemSorter property to a new ListviewItemComparer object 
     lvItems.ListViewItemSorter = New ListViewItemComparer(e.Column, ordering) 

     'Call the sort method to manually sort 
     lvItems.Sort() 
0
votes
answers
65 views
+10

表RichTextBox中

2

在我剛纔的問題,我貼在豐富的文本框..The代碼是增加了一個表(實際上不是,只是增加了數據從DGVW的richtxtbx)代碼:表RichTextBox中

For i As Integer = 0 To dg2.Rows.Count - 2 
     SendMail.bodytxt.Text = SendMail.bodytxt.Text + "-" 
     For j As Integer = 0 To dg2.Columns.Count - 1 
      Try 
       SendMail.bodytxt.Text = SendMail.bodytxt.Text + vbTab + dg2.Rows(i).Cells(j).Value.ToString() + vbTab 
      Catch ex As Exception 
      End Try 
      SendMail.bodytxt.Text = SendMail.bodytxt.Text + vbLf 
      SendMail.bodytxt.Text = SendMail.bodytxt.Text + "--------------------------------------------" + vbLf 
      SendMail.bodytxt.Text = SendMail.bodytxt.Text + vbLf 
     Next 
    Next 

結果是這樣的:

-------------------------------------------- 

88795446 
-------------------------------------------- 

Mr.  
-------------------------------------------- 

Raiyan 
-------------------------------------------- 

rashid 
-------------------------------------------- 

Male 
-------------------------------------------- 

我希望你看到的問題是什麼。是在一個新行添加的每個單元格的值..如何生成這樣的觀點:

HEADER TEXT  HEADER TEXT  HEADER TEXT 
------------------------------------------------ 
    Mr.    ABC   
------------------------------------------------ 
    Mr.    DEF    987654321 
------------------------------------------------ 
    Mr.    GHI    898989898 

我的意思是一行中的所有單元格值將在一行中......下一行將填充短劃線.....然後下一行將包含下一行的單元格值......

我知道我的代碼是正確的,但也許我有一些「安排代碼」問題...或者是因爲我的豐富的文本框大小發生?我之所以這麼認爲,是因爲當我從包含2/3列的dgvw添加數據時,它按預期工作。那麼如何修復它或實現我期待的外觀呢?

沙发
0
1

也許這將有助於

SendMail.bodytxt.Text = SendMail.bodytxt.Text + "------------------------------------------------------------------------------------------" + vbLf 
      For i As Integer = 0 To dg2.Rows.Count - 1 

       For j As Integer = 0 To dg2.Columns.Count - 1 
        Try 
         SendMail.bodytxt.Text = SendMail.bodytxt.Text + "• " + dg2.Rows(i).Cells(j).Value.ToString() + " •" 
        Catch ex As Exception 
        End Try 
       Next 
       SendMail.bodytxt.Text = SendMail.bodytxt.Text + vbLf 
       SendMail.bodytxt.Text = SendMail.bodytxt.Text + "------------------------------------------------------------------------------------------" + vbLf 
      Next 

這甚至可能給你一個更好的look.You必須添加儘可能多的 - 因爲你need.Let我知道它的工作

+0

OMG!你現在兩次救了我的一天!是的,它的作品....並添加「•」是一個好主意...... !!!! –

+0

歡迎。很高興幫助 –

板凳
0
0

正如您所提到的,當您將數據添加到具有幾列的datagridview的RTF文本框時,然後根據需要獲得結果。那麼爲什麼不設置RTF格式的WordWarp屬性呢? box屬性設置爲true,然後添加數據。然後我猜一行的單元格的值不會到達下一行,也許你可以生成你想要的外觀。

+1

都能跟得上先生(破折號)「」 ,沒有工作。 –

+0

其實,我只是一個初學者,所以請原諒我的錯誤 –

0
votes
answers
27 views
+10

如何在文本框中添加正則表達式按鍵事件?VB.NET窗體

0

我有這個R.E驗證器^[0-9+]{5}-[0-9+]{7}-[0-9]{1}$,如何在textbox中添加驗證器,我正在創建vb.net窗體窗體應用程序。 我想插入自動破折號時,用戶輸入他/她的cnic號碼像巴基斯坦格式:3240X-XXXXXXX-X如何在文本框中添加正則表達式按鍵事件?VB.NET窗體

謝謝。

+1

您必須等待用戶完成數據輸入。使用驗證事件。這不是MaskedTextBox無法做到的任何事情,它的優點是它可以在用戶忙於輸入時工作。 –

沙发
0
0

就像漢斯說 - 最簡單的方法是用MaskedTextBox中: https://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.aspx

您將只需創建你的面具,以符合您的標準,所以大概00000-0000000-0 https://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.mask.aspx

對於別的東西 - 您需要在KeyUp事件中創建自己的方法 - 如下所示:http://www.vbforums.com/showthread.php?758387-VBA-Adding-Dashes-Automatically-Into-Text-Box

0
votes
answers
43 views
+10

如何使用console.readline()讀取整數?

-3

我是一個學習.NET的初學者。如何使用console.readline()讀取整數?

我試圖在控制檯readline中解析我的整數,但它顯示一個格式異常。

我的代碼:

using System; 
namespace inputoutput 
{ 
    class Program 
    {   
     static void Main() 
     { 
      string firstname; 
      string lastname; 
     // int age = int.Parse(Console.ReadLine()); 
      int age = Convert.ToInt32(Console.ReadLine()); 
      firstname = Console.ReadLine(); 
      lastname=Console.ReadLine(); 
      Console.WriteLine("hello your firstname is {0} Your lastname is {1} Age: {2}", 
       firstname, lastname, age); 
     } 
    } 
} 
+2

此代碼適用於我。你確定你輸入了第一行的有效整數嗎?也許你可以先將readline放入一個字符串變量,並在解析之前檢查該值? – Chris

+0

可能的重複:https://stackoverflow.com/questions/24443827/reading-an-integer-from-user-input – cSteusloff

+0

是的。它爲我工作。我給了有效的整數。感謝很多 - 格蘭特溫尼 –

沙发
0
1

如果它拋出一個格式異常那麼意味着輸入不能被解析爲int。您可以使用int.TryParse()之類的東西更有效地檢查此問題。例如:

int age = 0; 
string ageInput = Console.ReadLine(); 
if (!int.TryParse(ageInput, out age)) 
{ 
    // Parsing failed, handle the error however you like 
} 
// If parsing failed, age will still be 0 here. 
// If it succeeded, age will be the expected int value. 
板凳
0
0

你的代碼是完全正確的,但你的投入可能不是整數,所以你所得到的錯誤。 嘗試在try catch塊中使用轉換代碼或改用int.TryParse。

+1

它的工作給出一個有效的整數。謝謝 –

+0

TryPars更好,更少開銷 – Sybren

地板
0
-2

您可以將數字輸入字符串的整數(你的代碼是正確的):

int age = Convert.ToInt32(Console.ReadLine()); 

,如果您處理文本輸入試試這個:

int.TryParse(Console.ReadLine(), out var age); 
+1

這實際上就是問題的代碼。它如何回答這個問題? – UnholySheep

+0

它已被寫入有問題的原始代碼。 – lucky

+0

這就是C#7.0並且工作正常。 – cSteusloff

4楼
0
0

你可以處理無效的格式,除了像這樣的整數;

 int age; 
     string ageStr = Console.ReadLine(); 
     if (!int.TryParse(ageStr, out age)) 
     { 
      Console.WriteLine("Please enter valid input for age ! "); 
      return; 
     }