【问题标题】:How can I run this class in MainPage.cs?如何在 MainPage.cs 中运行此类?
【发布时间】:2017-05-20 13:44:27
【问题描述】:

我的面包板上的按钮有这个类,这些按钮连接到我的 Raspberry Pi 3。在 Raspberry Pi 上我有 Windows 10 IoT Core,Visual Studio 项目是一个通用空白应用程序。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Devices.Gpio;

namespace LCDScherm
{
    class ButtonMap
    {
        private const int btnLeft = 26;
        private const int btnUp = 19;
        private const int btnDown = 13;
        private const int btnRight = 6;

        private static GpioController _gpioController;

        private GpioPin _btnLeft;
        private GpioPin _btnUp;
        private GpioPin _btnDown;
        private GpioPin _btnRight;

        private string word;

        private StringBuilder sb = new StringBuilder();

        private char[] wordsAndLetters = { ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', ',', '.', '!', '?' };

        private int i;

        private ButtonMap()
        {
            _gpioController = GpioController.GetDefault();
            if (_gpioController == null) { return; }

            _btnLeft = _gpioController.OpenPin(btnLeft);
            _btnLeft.SetDriveMode(GpioPinDriveMode.InputPullUp);
            _btnLeft.DebounceTimeout = TimeSpan.FromMilliseconds(50);
            _btnLeft.ValueChanged += btnLeftValueChanged;

            _btnUp = _gpioController.OpenPin(btnUp);
            _btnUp.SetDriveMode(GpioPinDriveMode.InputPullUp);
            _btnUp.DebounceTimeout = TimeSpan.FromMilliseconds(50);
            _btnUp.ValueChanged += btnUpValueChanged;

            _btnDown = _gpioController.OpenPin(btnDown);
            _btnDown.SetDriveMode(GpioPinDriveMode.InputPullUp);
            _btnDown.DebounceTimeout = TimeSpan.FromMilliseconds(50);
            _btnDown.ValueChanged += btnDownValueChanged;

            _btnRight = _gpioController.OpenPin(btnRight);
            _btnRight.SetDriveMode(GpioPinDriveMode.InputPullUp);
            _btnRight.DebounceTimeout = TimeSpan.FromMilliseconds(50);
            _btnRight.ValueChanged += btnRightValueChanged;
        }

        private void btnLeftValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e)
        {
            if (e.Edge == GpioPinEdge.FallingEdge)
            {
                //go to previous letter
                int lengthword = sb.Length;
                sb.Remove(lengthword - 1, 1);
                word = sb.ToString();
                //tbOutput.Clear();
                //tbOutput.Text = word;
            }
        }

        private void btnUpValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e)
        {
            if (e.Edge == GpioPinEdge.FallingEdge)
            {
                //We don't want the i to go above the array
                if (i <= 39)
                {
                    i = i + 1;
                }
                //output on lcd
                //Output.Text = word + Convert.ToString(wordsAndLetters[i]);
            }
        }

        private void btnDownValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e)
        {
            if (e.Edge == GpioPinEdge.FallingEdge)
            {
                //We don't want the i to go below the array
                if (i > 0)
                {
                    i = i - 1;
                }
                //output on lcd
                //tbOutput.Text = word + Convert.ToString(wordsAndLetters[i]);
            }
        }

        private void btnRightValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e)
        {
            if (e.Edge == GpioPinEdge.FallingEdge)
            {
                //go to next letter & if held for a certain amount of time sent the message
                //tbOutput.Text = word;
                sb.Append(wordsAndLetters[i]);
                word = sb.ToString();
                i = 0;
                //tbOutput.Clear();
                //tbOutput.Text = word;
            }
        }
    }
}

我希望在我的 MainPage 中初始化 ButtonMap,目前看起来如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409

namespace LCDScherm
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        LCD lcd;

        public MainPage()
        {
            this.InitializeComponent();

            Init();
            Run();
        }

        private async void Init()
        {
            lcd = new LCD(16, 2);
            await lcd.InitAsync(7, 8, 25, 24, 23, 18);
            //await lcd.clearAsync();

        }

        public async void Run()
        {
            //await lcd.clearAsync();
            lcd.setCursor(0, 0);
            lcd.write("test");
            lcd.setCursor(0, 1);
            lcd.write("test");
        }

    }
}

我怎样才能像使用 LCD 类一样初始化 ButtonMap,因为当我尝试时

ButtonMap btnMap = new ButtonMap();

我收到一个错误,指出该类由于其保护级别而无法访问。有什么快速解决方法?

【问题讨论】:

    标签: c# visual-studio class private public


    【解决方案1】:

    您需要将ButtonMap 类的声明更改为public class ButtonMap { ... } 而不仅仅是class ButtonMap { ... },并且您需要创建类的构造函数public 而不是private(即public ButtonMap() { ... })。然后你应该能够实例化你的类的一个实例。

    【讨论】:

      猜你喜欢
      • 2015-06-18
      • 1970-01-01
      • 2020-05-13
      • 2010-12-14
      • 2011-01-24
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多