Visual Basic .NET: Difference between revisions

m
link fix; pretty sure this is what's being referred to
m (toying around with registry ... file associations look promising)
m (link fix; pretty sure this is what's being referred to)
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
==Visual Basic .NET==
This page serves as a brief documentation of VB.net with a focus on Oni-related aspects.
This page serves as a brief VB.net documentation with focus on Oni-related aspects.


 
==Projects==
===Projects===
* [http://mods.oni2.net/node/332 Simple OniSplit GUI]
* [[User:Paradox-01/for_WIP_pages#Simple_Converter_GUI|Simple Converter GUI]] (for OniSplit)
* [[TRAM setup assistant]]
* [[TRAM setup assistant]]




===Basic knowledge===
==Basic knowledge==
: Q: How can I use functions from another class?
: Q: How can I use functions from another class?
: A: '''First condition:''' The function must be a "Shared" one. For example "Shared Function GetApp()". '''Second condition:''' in the ''target code'', the class must be written beforehand (for example "Oni.GetApp" whereby "Oni" is the ''source class's'' name).
: A: '''First condition:''' The function must be a "Shared" one. For example "Shared Function GetApp()". '''Second condition:''' in the ''target code'', the class must be written beforehand (for example "Oni.GetApp" whereby "Oni" is the ''source class's'' name).


====Registry====
 
===Command-line functions within a forms application===
Since you have to watch out for multiple events, the argument processing should happen in a separate function so the code can be easily re-used.
 
  ' Form1.vb (main form)
  Public Function processArgs(ByVal args() As String)
      For Each a In args
          MsgBox(a)
      Next
  End Function
 
 
 
; Catch arguments from form load event
 
' Form1.vb (main form)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  If My.Application.CommandLineArgs.Count > 0 Then
      processArgs(My.Application.CommandLineArgs.ToArray)
  End If
 
  ' [...]
 
end sub
 
 
; Catch arguments when a single-instance application is already running
 
The load event can't be triggered if the application can't be opened more than once at a time. This is named a "single-instance application" and will trigger an StartupNextInstance event. Read [https://stackoverflow.com/questions/28831765/pass-command-line-to-first-instance-of-a-single-instance-app here] for details.
 
'ApplicationEvents.vb
Imports Microsoft.VisualBasic.ApplicationServices
Namespace My
    Partial Friend Class MyApplication
        Private Sub MyApplication_StartupNextInstance(sender As Object, e As StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
            Dim f = Application.MainForm
            If f.GetType Is GetType(Form1) Then
                CType(f, Form1).processArgs(e.CommandLine.ToArray)
            End If
        End Sub
    End Class
End Namespace
 
 
===Registry===
Data in '''HKEY_CLASSES_ROOT''' can only be changed by admins.
Data in '''HKEY_CLASSES_ROOT''' can only be changed by admins.


Line 23: Line 69:


Since .bsl in an unique suffix it would be enough to set 2 nodes:
Since .bsl in an unique suffix it would be enough to set 2 nodes:
  SOFTWARE\Classes\bsl_auto_file\shell\edit\command, ""(leave value name empty), (path to bsl editor), RegistryValueKind.String
  SOFTWARE\Classes\bsl_auto_file\shell\edit\command, ""(leave value name empty), (path to bsl editor plus file as argument), RegistryValueKind.String
  SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bsl\OpenWithProgids, bsl_auto_file, New Byte() {}, RegistryValueKind.None
  SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bsl\OpenWithProgids, bsl_auto_file, New Byte() {}, RegistryValueKind.None


Line 33: Line 79:




===Code snippets===
==Code snippets==
===Registry===
; Check if key exists
 
Private Function getXsiFromRegistry() As String()
        Dim oRegKey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\\Softimage\\SOFTIMAGE Application")
        Dim XsiPathInReg As String = ""
        If oRegKey Is Nothing Then
            XsiPathInReg = ""
        Else
            Dim Arr = oRegKey.GetSubKeyNames
            For Each n In Arr
                If InStr(n, "Softimage_Mod_Tool_7.5|Application|bin") > 0 Then
                    XsiPathInReg = Replace(n, "|", "\")
                    If Directory.Exists(XsiPathInReg) = False Then
                        XsiPathInReg = ""
                    End If
                End If
            Next
            oRegKey.Close()
        End If
        If XsiPathInReg = "" Then
            Return New String() {"", "notvalid"}
        Else
            Return New String() {XsiPathInReg, "valid"}
        End If
    End Function
 
 
    If getXsiFromRegistry(1) = "valid" Then
        MsgBox(getXsiFromRegistry(0))
    End If
 
: example of a valid, returned path: C:\Softimage\Softimage_Mod_Tool_7.5\Application\bin
 
 
==Code snippets (old)==
Common functions that are shared among VB.net projects should have their own class.
Common functions that are shared among VB.net projects should have their own class.


Line 39: Line 121:




====Oni Class====
===Oni Class===


Functions in this class:
Functions in this class:
Line 152: Line 234:




====Drag and drop====
===Drag and drop===
The target element must have its "AllowDrop" property set to "true".
The target element must have its "AllowDrop" property set to "true".


Line 180: Line 262:




<!-- Are points allowed in category names? -->


[[Category: VB.net]]
[[Category:Modding tutorials]]