Bạn đang dùng VB.Net (1 người xem)

Liên hệ QC

Bạn đã từng dùng VB.Net?


  • Total voters
    22

Người dùng đang xem chủ đề này

Hai Lúa Miền Tây

❆❆❆❆❆❆❆❆
Thành viên BQT
Administrator
Tham gia
18/3/08
Bài viết
8,311
Được thích
15,873
Giới tính
Nam
Nghề nghiệp
Làm ruộng.
Mình cũng mới bắt đầu "vọc" VB.Net nên muốn "Tìm bạn đồng hành" nên xin mở chủ đề này. Nếu bạn nào đã, đang, sẽ dùng nó xin vui lòng điểm danh nhé.

Xin chân thành cảm ơn,
HLMT
 
Chưa dùng bao giờ, nhưng vừa rồi thấy file của HLMT đã mắt quá, sẽ nghiên cứu học hỏi về VB.Net!
 
VB.6 thì anh có thử qua lâu rồi, nhưng VB. NET thì chưa sử dụng bao giờ.
 
VB.6 thì anh có thử qua lâu rồi, nhưng VB. NET thì chưa sử dụng bao giờ.
vb6 và vbnet nói chung về code cơ bản giống nhau, chẳng qua vb net mới hơn thêm 1 ít mắn muối, 2 cái này điều có mục đích sử dụng là sử lý và hiển thị dữ liệu từ các nguồn data thông qua ado là chính
 
vb6 và vbnet nói chung về code cơ bản giống nhau, chẳng qua vb net mới hơn thêm 1 ít mắn muối, 2 cái này điều có mục đích sử dụng là sử lý và hiển thị dữ liệu từ các nguồn data thông qua ado là chính

Theo ý kiến của mình thì ngày xưa cũng chuyên dùng VB6.0, tuy nhiên để thật sự dùng thì bắt đầu từ bài #4. Theo nhận xét thì VB.Net có nhiều ưu điểm hơn mà VB6.0 không có được. Mà có được cũng "trầy da tróc bàn phím" Ví dụ để hiển thị tiếng Việt Unicode trong của sổ code, trên thanh tiêu đề, msgbox, imputbox... thì VB.Net hỗ trợ luôn, gõ trong code như thế nào hay viết trên form thế nào thì hiện kết quả thế ấy...
 
Lúc trước tôi là tín đồ của nhà VB nên cũng từng có để ý tớiVB.Net khi NetframeWork ra đời. Quả thật là khá tương đồng nên dễ chuyển qua nhấtlà các chương trình nho nhỏ. Tiếc là tôi không có điều kiện để sử dụng nó.

Tuy nhiên sau này tìm hiểu thì tôi thấy C# được đánh giá caohơn nhất là về tốc độ và sự phổ biến. Bạn có thể xem các so sánh về tốc độ thựcthi C# vs VB Net trên mạng. Về sự phổ biến, cú pháp C# hiện này còn được dùngcho nhiều script phát triển web điển hình là MVC.

Cũng như VB.NET, C# thật sự không khó. Tôi đã từng chuyển một project viết bằng VB.NET về C# trong khi hiểu biết và tài liệu về VB.NET lẫn C#chỉ gói gọn trong vài trang giấy diễn giải về từ các khóa chứ không có nổi 1 cuốn sách.

Ngoài môi trường Visual Studio của Microsoft, thì bạn có thểdùng Sharpdevelope dùng chung cho nhiều ngôn ngữ .NET. Dù ít phổ biến nhưng IDEnày cực nhẹ (chỉ vài chục mb cài đặt và khi load) và tương đầy đủ các tính năngcần thiết nhất trong khi VS rất nặng nhất là xài laptop. Bản Sharpdevelope 4.4.1 là bản ổn định nhất mà tôi hiện đangdùng.
 
Là chưowng trình gì mà nhìn đã mắt vậy bạn?
Tại thấy nội dung hay quá mà chưa kịp hỏi tên, khả năng là một chương trình sản xuất kinh doanh gì đó, đại loại là một cơ sở dữ liệu cỡ bự với các công cụ truy xuất, tính toán, phân tích, biểu đồ, gridline, giao diện, v.v... Nhìn mà sướng cả mắt!
 
Tại thấy nội dung hay quá mà chưa kịp hỏi tên, khả năng là một chương trình sản xuất kinh doanh gì đó, đại loại là một cơ sở dữ liệu cỡ bự với các công cụ truy xuất, tính toán, phân tích, biểu đồ, gridline, giao diện, v.v... Nhìn mà sướng cả mắt!

Nếu anh chịu nghiên cứu thì không phải mất thời gian đến tận 2 năm như em đâu. Hy vọng thời gian ngắn anh sẽ đạt được hơn những gì mà anh đang mong đợi.
 
Em cũng đang thử viết một chương trình nhỏ bằng VB.Net 2008 nhưng thấy có nhiều điểm khác VB, VBA quá.
Anh HLMT và các bạn cho dhn46 hỏi: trong VB.Net dhn46 dùng
Mã:
 FileOpen(1, MFDLink, OpenMode.Binary, OpenAccess.Read)

thì các khoảng trống trong chuỗi nhị phân biến mất tiêu, trong khi VB6 dùng

Mã:
Open MFDLink For Binary Access Read As #1
thì không bị
Dùng debug.Print hay dùng len để kiểm tra là thấy ngay sự khác biệt này.

Vậy tại sao lại như thế? Cách khắc phục VB.Net để cho ra kết quả như VB6?

dhn46 xin cảm ơn!
 
Lần chỉnh sửa cuối:
Em cũng đang thử viết một chương trình nhỏ bằng VB.Net 2008 nhưng thấy có nhiều điểm khác VB, VBA quá.
Anh HLMT và các bạn cho dhn46 hỏi: trong VB.Net dhn46 dùng
Mã:
 FileOpen(1, MFDLink, OpenMode.Binary, OpenAccess.Read)

thì các khoảng trống trong chuỗi nhị phân biến mất tiêu, trong khi VB6 dùng

Mã:
Open MFDLink For Binary Access Read As #1
thì không bị
Dùng debug.Print hay dùng len để kiểm tra là thấy ngay sự khác biệt này.

Vậy tại sao lại như thế? Cách khắc phục VB.Net để cho ra kết quả như VB6?

dhn46 xin cảm ơn!

Vậy mục đích cuối cùng của bạn là gì vậy?
 
Anh HLMT,

Em đang viết 1 chương trình để Edit File *.Mfd => Music Finder DataBase (dành cho đàn Yamaha), cái này nó dựa trên số byte của file *.Mfd để đọc ra các thông số.

Em đã sử dụng Excel, VB6 thì đều ra kết quả là có những khoảng trống trong file Binary, tương ứng với đọc file Text nhưng dùng VB.Net thì những khoảng trống đó không còn. Hiện em chưa biết cách xử lý, anh có thể tư vấn cho em trường hợp này?

Cảm ơn anh nhiều!
 
Anh HLMT,

........

Em đã sử dụng Excel, VB6 thì đều ra kết quả là có những khoảng trống trong file Binary, tương ứng với đọc file Text nhưng dùng VB.Net thì những khoảng trống đó không còn. Hiện em chưa biết cách xử lý, anh có thể tư vấn cho em trường hợp này?

Cảm ơn anh nhiều!

Anh HLMT và các bạn,

Không biết vấn đề dhn46 hỏi sẽ có hướng giải quyết như thể nào ạ? Mong phản hồi của mọi người

dhn46.
 
vb6 và vbnet nói chung về code cơ bản giống nhau, chẳng qua vb net mới hơn thêm 1 ít mắn muối, 2 cái này điều có mục đích sử dụng là sử lý và hiển thị dữ liệu từ các nguồn data thông qua ado là chính

VB6 chỉ là ngôn ngữ Hướng Đối Tượng bán phần. Trong khi VB.NET hướng đối tượng coi như toàn phần. cach sử dụng gần như khác biệt nhau. Nếu bạn không thấy khác biệt là do bạn không viết code hướng đối tuợng nhiều.

Nói VB.NET thêm mắm muối là hoàn toàn sai. Các lớp (class) cung cấp bởi .NET framework được Microsoft viết theo nguyên tắc hướng đối tượng có khả năng khai triển rộng, và rất hiệu quả (xem cuối bài, tôi trả lời cho dhn46). Điển hình là các loại căn bản như integer, float, string,... đều dựa trên lớp của chúng.

Trong .NET, đừng nói chuyện ADO. Các lớp (class) của .NET làm việc với Data hiệu quả hơn nhiều, điển hình là lớp thuộc nhóm System.IO. Nếu có thì giờ thì học LINQ sẽ thấy nó rất ngon lành. Lưu ý: tôi nói "có thì giờ", nếu không có thì giờ thì đừng học mất công, vì địa bàn dùng không rộng rãi; LINQ là công cụ của Microsoft, không phải tiêu chuẩn như SQL.

Lúc trước tôi là tín đồ của nhà VB nên cũng từng có để ý tớiVB.Net khi NetframeWork ra đời. Quả thật là khá tương đồng nên dễ chuyển qua nhấtlà các chương trình nho nhỏ. Tiếc là tôi không có điều kiện để sử dụng nó.

Tuy nhiên sau này tìm hiểu thì tôi thấy C# được đánh giá caohơn nhất là về tốc độ và sự phổ biến. Bạn có thể xem các so sánh về tốc độ thựcthi C# vs VB Net trên mạng. Về sự phổ biến, cú pháp C# hiện này còn được dùngcho nhiều script phát triển web điển hình là MVC.

Cũng như VB.NET, C# thật sự không khó. Tôi đã từng chuyển một project viết bằng VB.NET về C# trong khi hiểu biết và tài liệu về VB.NET lẫn C#chỉ gói gọn trong vài trang giấy diễn giải về từ các khóa chứ không có nổi 1 cuốn sách.

Ngoài môi trường Visual Studio của Microsoft, thì bạn có thểdùng Sharpdevelope dùng chung cho nhiều ngôn ngữ .NET. Dù ít phổ biến nhưng IDEnày cực nhẹ (chỉ vài chục mb cài đặt và khi load) và tương đầy đủ các tính năngcần thiết nhất trong khi VS rất nặng nhất là xài laptop. Bản Sharpdevelope 4.4.1 là bản ổn định nhất mà tôi hiện đangdùng.

Chuyển từ VB.NET sang C# thì không khó. Nhưng chuyển ngược lại (C# sang VB.NET) là chuyện khác.

Sẵn ở đây, tôi có thể cho lời khuêyn các bạn muốn học VB.NET:

Muốn vào .NET thì phải dùng .NET Framework. Đã vào nời này thì học luôn C# cho tiện, đừng vướng víu với VB chi nữa. Vì C# là ngôn ngữ dòng họ C cho nên hầu hết các nguyên tắc về cú pháp nó gần gũi với Java. Biết C#, bạn sẽ biết gần hết JavaScript (trừ lệnh function của JavaScript, lệnh này khó bỏ bố, tôi học mấy năm rồi chưa thông).
Trừ phi bạn đã khá giỏi về VB6 rồi thì chuyển sang VB.NET nhanh hơn.

Em cũng đang thử viết một chương trình nhỏ bằng VB.Net 2008 nhưng thấy có nhiều điểm khác VB, VBA quá.
Anh HLMT và các bạn cho dhn46 hỏi: trong VB.Net dhn46 dùng
Mã:
 FileOpen(1, MFDLink, OpenMode.Binary, OpenAccess.Read)

thì các khoảng trống trong chuỗi nhị phân biến mất tiêu, trong khi VB6 dùng

Mã:
Open MFDLink For Binary Access Read As #1
thì không bị
Dùng debug.Print hay dùng len để kiểm tra là thấy ngay sự khác biệt này.

Vậy tại sao lại như thế? Cách khắc phục VB.Net để cho ra kết quả như VB6?

dhn46 xin cảm ơn!

Anh HLMT và các bạn,

Không biết vấn đề dhn46 hỏi sẽ có hướng giải quyết như thể nào ạ? Mong phản hồi của mọi người

dhn46.

Tôi không có cấu trả lời trực tiếp cho bạn. Nhưng gián tiếp thì là:

FileOpen là hàm VB.NET đưa ra để "miễn cưỡng" hổ trợ lùi (backward compatible) với VB6.

Nguyên tắc hổ trợ lùi là bạn chỉ dùng khi nào bạn bê nguyên cái module cũ sang nơi mới, chỉnh sửa 1 chút. Nếu viết code mới thì đừng bao giờ, nhấn mạnh: đừng bao giờ, dùng các công cụ hở trợ lùi.

Trong .NET, dùng System.IO.File.Open với class BinaryReader/BinaryWriter hoặc ReadAllBytes (cũng có thể dùng FileStream,...).
 
Chuyển từ VB.NET sang C# thì không khó. Nhưng chuyển ngược lại (C# sang VB.NET) là chuyện khác.
Chuyển từ VB.NET sang C# thì không khó. Nhưng chuyển ngược lại (C# sang VB.NET)... thì vô cùng dễ. Tích hợp trong Sharpdevelop công cụ chuyển đổi qua lại giữa các ngôn ngữ C#, VB.NET và cả thêm Ruby, Python, Boo. Không quá 5s để bạn có thể chuyển đổi qua lại..
 
...
Trong .NET, đừng nói chuyện ADO. Các lớp (class) của .NET làm việc với Data hiệu quả hơn nhiều, điển hình là lớp thuộc nhóm System.IO. Nếu có thì giờ thì học LINQ sẽ thấy nó rất ngon lành. Lưu ý: tôi nói "có thì giờ", nếu không có thì giờ thì đừng học mất công, vì địa bàn dùng không rộng rãi; LINQ là công cụ của Microsoft, không phải tiêu chuẩn như SQL.
...

Cũng cần nói rõ thêm về điểm này: thực ra trong .NET thì công cụ kết nối là ADO.NET. Công cụ này có mô hình lớp bao quát (và trừu tuợng) hơn ADO nhiều.

Chuyển từ VB.NET sang C# thì không khó. Nhưng chuyển ngược lại (C# sang VB.NET)... thì vô cùng dễ. Tích hợp trong Sharpdevelop công cụ chuyển đổi qua lại giữa các ngôn ngữ C#, VB.NET và cả thêm Ruby, Python, Boo. Không quá 5s để bạn có thể chuyển đổi qua lại..

Chắc là vậy. Có lẽ tôi cổ hủ quá rồi.
Đối với tôi 5 s hay 5 hrs để chuyển đổi 1 project không quan trọng. Thậm chí 5 ngày cũng được; 1 project làm việc 6 tháng đổi ngôn ngữ tốn vài ngày chết gì ai?
Vấn đề là sau đó, đọc lại cái code chuyển đổi tôi có hiểu hay không. Tôi cần đại khái các điểm mốc (key areas) để đặt thunks mà unit test chúng, hoặc để nghiệm thu chúng. Không đặt được điểm nghiệm thu, đối với tôi là code bỏ đi.

Cách đây khoảng 2 năm, có người làm công việc chuyển đổi này. Lúc code đưa qua tôi nghiệm thu, tôi chịu thua.
 
Lần chỉnh sửa cuối:
Đối với tôi 5 s hay 5 hrs để chuyển đổi 1 project không quan trọng. Thậm chí 5 ngày cũng được; 1 project làm việc 6 tháng đổi ngôn ngữ tốn vài ngày chết gì ai?
Vấn đề là sau đó, đọc lại cái code chuyển đổi tôi có hiểu hay không. Tôi cần đại khái các điểm mốc (key areas) để đặt thunks mà unit test chúng, hoặc để nghiệm thu chúng. Không đặt được điểm nghiệm thu, đối với tôi là code bỏ đi.

Cách đây khoảng 2 năm, có người làm công việc chuyển đổi này. Lúc code đưa qua tôi nghiệm thu, tôi chịu thua.
Thấy những từ ngữ cao siêu key areas, thunks, unit test của anh là tôi biết anh có lối tư duy cao siêu rồi (Thật xấu hổ là tôi cũng chẳng hiểu nghĩa là gì **~**). Tôi thì làm việc theo kiểu "điếc không sợ súng". Chẳng cứ phải đúng ngôn ngữ nào mình biết, đến cả những ngôn ngữ chẳng biết, chẳng được học thì khi cần tôi cũng tham khảo. Tôi từng tham khảo Delphi để viết VB6, VB.Nét để viết C#... nếu không tìm được code minh họa bằng đúng ngôn ngữ mong muốn.

Một chương trình có thể viết bằng các ngôn ngữ lập trình khác nhau nhưng vẫn chung nguyên lý, giải thuật, cách dùng các API... Trong các tài liệu về thuật toán người ta cũng minh họa bằng những đoạn code mà xét về hình thức tôi chẳng biết phải Pascal, VB, Delphi, C#, Python... mà tôi xin tạm gọi là ngôn ngữ thuật giải, và ngôn ngữ này cũng chẳng có giáo trình nào đề cập nhưng tại sao người ta vẫn sử dụng để minh họa cho hàng triệu người học lập trình?

Hiểu hay không là do cái hứng thú + tư duy vận động của chúng ta (google, tự điển, giấy nháp...), chứ chẳng thể nào đòi hỏi nó phải diễn giải bằng đúng ngôn ngữ này hay ngôn ngữ nọ. Không hứng thú + tư duy vận động thì mọi đoạn code dù là VB hay C# cũng là vô nghĩa.
 
Lần chỉnh sửa cuối:
.............................
Tôi không có cấu trả lời trực tiếp cho bạn. Nhưng gián tiếp thì là:

FileOpen là hàm VB.NET đưa ra để "miễn cưỡng" hổ trợ lùi (backward compatible) với VB6.

Nguyên tắc hổ trợ lùi là bạn chỉ dùng khi nào bạn bê nguyên cái module cũ sang nơi mới, chỉnh sửa 1 chút. Nếu viết code mới thì đừng bao giờ, nhấn mạnh: đừng bao giờ, dùng các công cụ hở trợ lùi.

Trong .NET, dùng System.IO.File.Open với class BinaryReader/BinaryWriter hoặc ReadAllBytes (cũng có thể dùng FileStream,...).
Cảm ơn bác VetMini đã quan tâm câu hỏi của dhn46, sử dụng ReadAllBytes đã giải quyết được thắc mắc của dhn46, nhưng không hiểu sao khi dùng ChrW để dịch mã và nối chúng vào 1 str thì không thể Debug.print hay Msgbox toàn bộ chuỗi được, Str ghi ra file Txt hay trích xuất byte thì đúng là có kết quả mong muốn.

Xin cảm ơn bác!
 
Tôi không hiểu rõ vấn đề của bạn nên chỉ có thể trả lời đại khái.

vì vb.net là ngôn ngữ hoàn toàn hướng đối tượng cho nên luật ép kiểu của nó khó khăn hơn vba một chút. Bạn phải cẩn thận khi gộp dữ liệu.

con toán ghép chuỗi là con toán rất tốn tài nguyên. Trong dot net, nếu phải cộng chuỗi nhiều thì người ta dùng lớp stringbuilder.
 
Tôi không hiểu rõ vấn đề của bạn nên chỉ có thể trả lời đại khái.

vì vb.net là ngôn ngữ hoàn toàn hướng đối tượng cho nên luật ép kiểu của nó khó khăn hơn vba một chút. Bạn phải cẩn thận khi gộp dữ liệu.

con toán ghép chuỗi là con toán rất tốn tài nguyên. Trong dot net, nếu phải cộng chuỗi nhiều thì người ta dùng lớp stringbuilder.
dhn46 xin cảm ơn bác đã trả lời, Trong VB.Net dhn46 muốn đọc File *.Mfd (đính kèm) và sử dụng Code
Mã:
Public Class Form1


    Public MFDLink As String
    Public ArrMFD           'Mảng Binary file *.Mfd
    Const LTitle = 16       'Lenght of Title Mfd
    Const LInstrument = 18  'Lenght of Instrument Mfd
    Const LMusicName = 32   'Lenght of MusicName Mfd
    Const LGenre = 16       'Lenght of Genre Style
    Const LKeyWord = 32     'Lenght of Keyword Style


  
    Private Sub Cmd_Open_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_Open.Click


        Dim MPos As Long
        Dim Title As String         'Tiêu đề
        Dim Instrument As String     'Loại nhạc cụ
        Dim MusicName As String     'Tên bản nhạc
        Dim Genre As String         'Thể loại
        Dim KeyWord As String       'Từ khóa
        Dim i As Long


        With OpenFileDialog1
            .Multiselect = False
            .Title = "Select MFD file - DHN"
            .Filter = "Yamaha music finder database files (*.mfd)|*.mfd|All files (*.*)|*.*"
            .FilterIndex = 1
            .FileName = ""
            .RestoreDirectory = True
            If .ShowDialog = Windows.Forms.DialogResult.OK Then
                MFDLink = .FileName
            End If
        End With
        If Len(MFDLink) > 0 Then
            ArrMFD = System.IO.File.ReadAllBytes(MFDLink)
        End If


        '*Chú ý: Phần tử trong mảng luôn bắt đầu từ 0, MPos =0
        'Tiêu đề File
        For i = MPos To MPos + LTitle - 1
            Title = Title & ChrW(ArrMFD(i))
            MPos = LTitle
        Next


        'Loại nhạc cụ
[COLOR=#006400]        For i = MPos To MPos + LInstrument - 1[/COLOR]
[COLOR=#006400]            Instrument = String.Concat(Instrument, ChrW(ArrMFD(i)))[/COLOR]
[COLOR=#006400]        Next[/COLOR]


    End Sub

Như bác đã thấy trong khai báo, Title lấy 16 bytes đầu, còn Instrument thì lấy 18 Bytes tiếp theo. Khi Title là 1 chuỗi liên tục dùng toán tử nối chuổi trích ra từ Array ArrMFD thì được, nhưng trích Instrument thì chỉ được đến phần có dấu cách (PSR-S750) còn phần phía sau (V1.03) thì không có hiện trong chuỗi.

Bác và các anh chị có thể cho dhn46 sự chỉ dẫn được không ah? dhn46 muốn tự mình học hỏi qua những lời chỉ hướng của bác và các anh chị.

Xin cảm ơn mọi người
 

File đính kèm

Web KT

Bài viết mới nhất

Back
Top Bottom