【问题标题】:How to declare a constructor?如何声明构造函数?
【发布时间】:2014-09-30 14:00:17
【问题描述】:

编译程序时出现以下错误

"Microsoft.Samples.Kinect.ControlsBasics.SelectionDisplay' 没有 包含一个带有 2 个参数的构造函数"

我可能需要为我创建的新事物声明另一个构造函数,但我不知道该怎么做。我已经在下面发布了相应的代码,你能帮我吗?

public SelectionDisplay(string itemId)
{
    this.InitializeComponent();

    this.messageTextBlock.Text = string.Format(CultureInfo.CurrentCulture,Properties.Resources.SelectedMessage,itemId);
}

var files = Directory.GetFiles(@".\GalleryImages");

foreach (var file in files)
{
    FileInfo fileInfo = new FileInfo(file);

    BitmapImage bi = new BitmapImage();
    bi.BeginInit();
    bi.UriSource = new Uri(file, UriKind.Relative);
    bi.EndInit();

    var button = new KinectTileButton
    {
        Label = System.IO.Path.GetFileNameWithoutExtension(file),
        Background = new ImageBrush(bi),
        Tag = file
    };
    var selectionDisplay = new SelectionDisplay(button.Label as string, button.Tag as string);
    this.wrapPanel.Children.Add(button);
}

private void KinectTileButtonClick(object sender, RoutedEventArgs e)
{
    var button = (KinectTileButton)e.Source;
    var image = button.CommandParameter as BitmapImage;
    var selectionDisplay = new SelectionDisplay(button.Label, button.Background); // aici poti apoi sa mai trimiti si imaginea ca parametru pentru constructor
    this.kinectRegionGrid.Children.Add(selectionDisplay);
    e.Handled = true;
}

http://i61.tinypic.com/nno384.png

http://i57.tinypic.com/33vm2k7.png

提前致谢!

编辑:现在我有一个不同的问题.. 进行这些更改后,我遇到了三个新错误。看看新图像的变化

http://i58.tinypic.com/qwwqvn.png

【问题讨论】:

  • 参数个数不对,查看SelectionDisplay文档
  • 你有SelectionDisplay(string, string)SelectionDisplay(Label,Brush) 你打算同时使用它们吗??

标签: c# wpf


【解决方案1】:

好吧,您已经创建了一个带有一个参数的构造函数:

public SelectionDisplay(string itemId)
{
    //...
}

但是你传递给它两个参数:

new SelectionDisplay(button.Label as string, button.Tag as string);

您可以向已有的构造函数添加一个参数,或者创建一个新参数:

public SelectionDisplay(string itemId, string someOtherValue)
{
    //...
}

【讨论】:

    【解决方案2】:

    您应该创建SelectionDisplay 的构造函数的重载或更改您已有的构造函数。像这样:

    public SelectionDisplay(string itemId, string tag)
    {
        //Do something here
    }
    

    由于您正在创建一个带有两个参数的SelectionDisplay 的新实例,但它的构造函数只接受一个参数。 (string itemId):

    //foreach
    new SelectionDisplay(button.Label as string, button.Tag as string); //
    
    //KinectTileButtonClick method
    new SelectionDisplay(button.Label, button.Background);
    

    您必须检查button.Labelbutton.Tagbutton.Background 是什么类型,并使用这些值创建一个新的构造函数。

    你可以阅读更多关于Constructorshere的信息

    【讨论】:

      【解决方案3】:

      你有两行错误:

      var selectionDisplay = new SelectionDisplay(button.Label as string, button.Tag as string);
      

      var selectionDisplay = new SelectionDisplay(button.Label, button.Background); 
      

      你将构造函数定义为

      public SelectionDisplay(string itemId)
          {
              this.InitializeComponent();
      
              this.messageTextBlock.Text = string.Format(CultureInfo.CurrentCulture,Properties.Resources.SelectedMessage,itemId);
      
          }
      

      如果你需要定义一些默认值,那么你需要这样做

      public SelectionDisplay(string itemId, string nextParam="default value")
          {
              this.InitializeComponent();
      
              this.messageTextBlock.Text = string.Format(CultureInfo.CurrentCulture,Properties.Resources.SelectedMessage,itemId);
      
          }
      

      在这种情况下,您可以传递下一个参数或忽略它

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-13
        • 2017-03-17
        • 1970-01-01
        • 2014-06-09
        • 1970-01-01
        • 2022-01-15
        • 2013-05-02
        • 1970-01-01
        相关资源
        最近更新 更多