简体   繁体   English

C#转VB.Net问题

[英]C# to VB.Net Issue

OK so I am not very fluent in either language so please forgive me if this is a simple question. 好的,所以我的两种语言都不太流利,如果这是一个简单的问题,请原谅我。 I am trying to transpose some sample code from C# to VB.net as I am more fluent in VB.Net and want to implement this into an existing project. 我正在尝试将一些示例代码从C#转换为VB.net,因为我更精通VB.Net,并希望将其实现到现有项目中。 I have a simple class and a simple form. 我有一个简单的课程和一个简单的表格。 I am having errors with the inherits line for events.required and am not sure how to solve. 我在events.required的继承行中出现错误,不确定如何解决。

C# works great MyClass C# C#很棒的MyClass C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using com.handpoint.api;
namespace WindowsGettingStartedApp
{
    class MyClass : Events.Required
    {
        Hapi api;
        Device device;
        private Form1 UIClass;
        public MyClass(Form1 form1)
        {
            InitApi();
            UIClass = form1;
        }
        public void InitApi()
        {
            string sharedSecret = "0102030405060708091011121314151617181920212223242526272829303132";
            api = HapiFactory.GetAsyncInterface(this).DefaultSharedSecret(sharedSecret);
            // The api is now initialized, and we've  set a default shared secret
            // The shared secret is a unique string shared between the card reader and your mobile application.
            // It prevents other people from connecting to your card reader.
            // You should replace this default shared secret by the one sent by our support team.
        }
        public void DiscoverDevices()
        {
            api.ListDevices(ConnectionMethod.BLUETOOTH);
            // This triggers the search for all the bluetooth devices around.
            // You can also search for USB and Serial as a connection method
        }
        public void DeviceDiscoveryFinished(List<Device> devices)
        {
            foreach (Device device in devices)
            {
                if (device.Name != null)
                {
                    if (device.Name.Equals("PP0513901435"))
                    // Put the name of your device, find it by pressing C then up arrow on your card reader keypad
                    {
                        this.device = device;
                        // We'll remember the device for this session, and you should too
                        api.UseDevice(this.device);
                        // Connection to the device is handled automatically in the API
                    }
                }
            }
        }
        // You can also connect directly to a specific device without having to discover the other devices around :
        public void DirectConnect()
        {
            Device device = new Device("PP0513901435", "68:AA:D2:00:D5:27", "", ConnectionMethod.BLUETOOTH);
            // The MAC Adress always has to be written in UPPER CASE
            // new Device("name", "address", "port", ConnectionMethod);
            api.UseDevice(device);
        }
        public bool Pay()
        {
            return api.Sale(new BigInteger("1000"), Currency.GBP);
            // Let´s start our first payment of 10 pounds
        }
        public void SignatureRequired(SignatureRequest signatureRequest, Device device)
        {
            // You'll be notified here if a sale process needs a signature verification
            // A signature verification is needed if the cardholder uses an MSR or a chip & signature card
            // This method will not be invoked if a transaction is made with a Chip & PIN card
            api.SignatureResult(true); // This line means that the cardholder ALWAYS accepts to sign the receipt.
            // A specific line will be displayed on the merchant receipt for the cardholder to be able to sign it
        }
        public void EndOfTransaction(TransactionResult transactionResult, Device device)
        {
            UIClass.DisplayReceipts(transactionResult.MerchantReceipt, transactionResult.CustomerReceipt);
        }
        public void Disconnect()
        {
            api.Disconnect();
        }
    }
}

C# works great Form1 C#非常适合Form1

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;
namespace WindowsGettingStartedApp
{
    public partial class Form1 : Form
    {
        MyClass my;
        public Form1()
        {
            InitializeComponent();
            my = new MyClass(this);
        }
        private void PayButton_Click(object sender, EventArgs e)
        {
            my.Pay();
        }
        private void ConnectButton_Click(object sender, EventArgs e)
        {
            my.DiscoverDevices();
            // my.DirectConnect();
        }
        private void DisconnectButton_Click(object sender, EventArgs e)
        {
            my.Disconnect();
        }
        public delegate void UpdateReceiptsCallback(string MerchantReceipt, string CustomerReceipt);
        public void DisplayReceipts(string MerchantReceipt, string CustomerReceipt)
        {
            // Only need to check for one of the webBrowsers
            if (MerchantReceiptBrowser.InvokeRequired)
            {
                UpdateReceiptsCallback d = new UpdateReceiptsCallback(DisplayReceipts);
                this.Invoke(d, new object[] { MerchantReceipt, CustomerReceipt });
            }
            else
            {
                MerchantReceiptBrowser.DocumentText = MerchantReceipt;
                CardholderReceiptBrowser.DocumentText = CustomerReceipt;
            }
        }
    }
}

My VB.Net MyClass Conversion 我的VB.Net MyClass转换

Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports com.handpoint.api
Namespace WindowsGettingStartedApp

Class [MyClass]
    Inherits Events.Required

The above line gets the error: Classes can inherit only from other classes 上一行出现错误:类只能从其他类继承

    Private api As Hapi
    Private device As Device
    Private UIClass As Form1
    Public Sub New(form1 As Form1)
        InitApi()
        UIClass = form1
    End Sub
    Public Sub InitApi()
        Dim sharedSecret As String = "0102030405060708091011121314151617181920212223242526272829303132"
        api = HapiFactory.GetAsyncInterface(Me).DefaultSharedSecret(sharedSecret)
        ' The api is now initialized, and we've  set a default shared secret
        ' The shared secret is a unique string shared between the card reader and your mobile application.
        ' It prevents other people from connecting to your card reader.
        ' You should replace this default shared secret by the one sent by our support team.
    End Sub
    Public Sub DiscoverDevices()
        api.ListDevices(ConnectionMethod.BLUETOOTH)
        ' This triggers the search for all the bluetooth devices around.
        ' You can also search for USB and Serial as a connection method
    End Sub
    Public Sub DeviceDiscoveryFinished(devices As List(Of Device))
        For Each device As Device In devices
            If device.Name IsNot Nothing Then
            If device.Name.Equals("PP0513901435") Then
                    ' Put the name of your device, find it by pressing C then up arrow on your card reader keypad
                    Me.device = device
                    ' We'll remember the device for this session, and you should too
                        ' Connection to the device is handled automatically in the API
                    api.UseDevice(Me.device)
                End If
            End If
        Next
    End Sub
    ' You can also connect directly to a specific device without having to discover the other devices around :
    Public Sub DirectConnect()
        Dim device As New Device("PP0513901435", "68:AA:D2:00:D5:27", "", ConnectionMethod.BLUETOOTH)
        ' The MAC Adress always has to be written in UPPER CASE
        ' new Device("name", "address", "port", ConnectionMethod);
        api.UseDevice(device)
    End Sub
    Public Function Pay() As Boolean
        Return api.Sale(New BigInteger("1000"), Currency.GBP)
        ' Let´s start our first payment of 10 pounds
    End Function
    Public Sub SignatureRequired(signatureRequest As SignatureRequest, device As Device)
        ' You'll be notified here if a sale process needs a signature verification
        ' A signature verification is needed if the cardholder uses an MSR or a chip & signature card
        ' This method will not be invoked if a transaction is made with a Chip & PIN card
        api.SignatureResult(True)
        ' This line means that the cardholder ALWAYS accepts to sign the receipt.
        ' A specific line will be displayed on the merchant receipt for the cardholder to be able to sign it
    End Sub

    Public Sub EndOfTransaction(transactionResult As TransactionResult, device As Device)
        UIClass.DisplayReceipts(transactionResult.MerchantReceipt, transactionResult.CustomerReceipt)
    End Sub
    Public Sub Disconnect()
        api.Disconnect()
    End Sub
End Class
End Namespace

My VB.Net Form1 我的VB.Net Form1

Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Windows.Forms
Namespace WindowsGettingStartedApp
Public Partial Class Form1
    Inherits Form
    Private my As [MyClass]
    Public Sub New()
        InitializeComponent()

The above line is giving me the error 'InitializeComponent' is not declared. 上一行给了我未声明错误“ InitializeComponent”的信息。 It may be inaccessible due to its protection level. 由于其保护级别,它可能无法访问。 I get the above error when referencing objects on the form as well. 当引用窗体上的对象时,也会出现上述错误。

        my = New [MyClass](Me)
    End Sub
    Private Sub PayButton_Click(sender As Object, e As EventArgs)
        my.Pay()
    End Sub
    Private Sub ConnectButton_Click(sender As Object, e As EventArgs)
        my.DiscoverDevices()
        ' my.DirectConnect();
    End Sub

    Private Sub DisconnectButton_Click(sender As Object, e As EventArgs)
        my.Disconnect()
    End Sub
    Public Delegate Sub UpdateReceiptsCallback(MerchantReceipt As String, CustomerReceipt As String)
    Public Sub DisplayReceipts(MerchantReceipt As String, CustomerReceipt As String)
        ' Only need to check for one of the webBrowsers
        If MerchantReceiptBrowser.InvokeRequired Then
            Dim d As New UpdateReceiptsCallback(AddressOf DisplayReceipts)
            Me.Invoke(d, New Object() {MerchantReceipt, CustomerReceipt})
        Else
            MerchantReceiptBrowser.DocumentText = MerchantReceipt
            CardholderReceiptBrowser.DocumentText = CustomerReceipt
        End If
    End Sub
End Class
End Namespace

My Form1.Designer.vb 我的Form1.Designer.vb

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
Inherits System.Windows.Forms.Form

'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    Try
        If disposing AndAlso components IsNot Nothing Then
            components.Dispose()
        End If
    Finally
        MyBase.Dispose(disposing)
    End Try
End Sub

'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer

'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.  
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
    components = New System.ComponentModel.Container
    Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
    Me.Text = "Form1"
End Sub
End Class

Any insight would be great. 任何见识都会很棒。 I am sure I am missing something simple but again am a newbie. 我确定我缺少一些简单的东西,但又是新手。 I bolded the spots where I am getting the errors. 我将出现错误的地方加粗了。 Thanks for any help. 谢谢你的帮助。

The first error is because Events.Required is an interface so it should read 第一个错误是因为Events.Required是一个接口,因此应读取

 Implements Events.Required 

instead of 代替

 Inherits Events.Required

The second error is because InitializeComponent is declared in the form designer file which you may not have included / translated in your application. 第二个错误是因为在窗体设计器文件中声明了InitializeComponent ,您可能未在应用程序中包含/翻译了该文件。 Add a new form to your project if you want to inspect what this should look like. 如果要检查外观,请向项目中添加新表单。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM