转换控制使用转换不工作

时间:2016-07-17 15:47:39

标签: vb.net casting visual-studio-2015

我在每个SuperValidator类型的表单上都有一个名为SuperValidator1的控件。我想找到这个控件并使用它的名称启用它,因为名称在所有形式中都是一致的。所以这就是我提出的代码:

        Dim validator As SuperValidator
        Dim frm As Form = Me.ParentForm
        Dim ctrl As Control()
        ctrl = frm.Controls.Find("SuperValidator1", True)
        Dim singleCtrl As Control = ctrl(0)
        validator = TryCast(singleCtrl, SuperValidator) '< ERROR LINE

它引发编辑错误:Value of Type 'Control' cannot be converted to 'SuperValidator'

我尝试CTypeDirectCast,但它是一样的。根据{{​​3}}我应该能够转换任何数据类型。什么是错的,我该怎么办?

btw SuperValidator来自DevComponents.DotNetBar.Validator

感谢

2 个答案:

答案 0 :(得分:1)

这是一个使用我在表单上的控件的测试。稍微改变了你的逻辑。试一试,看看你有什么结果。

import twitter4j.util.*;
import twitter4j.*;
import twitter4j.management.*;
import twitter4j.api.*;
import twitter4j.conf.*;
import twitter4j.json.*;
import twitter4j.auth.*;
import guru.ttslib.*;
import processing.serial.*;

TTS tts;
Serial myPort;

int sensor = 0;

void setup() {
  tts = new TTS();
  
  myPort = new Serial(this, Serial.list()[0], 9600); 
  
}

void draw() {
  
ConfigurationBuilder cb = new ConfigurationBuilder();

cb.setOAuthConsumerKey("XXXX");
cb.setOAuthConsumerSecret("XXXX");
cb.setOAuthAccessToken("XXXX");
cb.setOAuthAccessTokenSecret("XXXX");

java.util.List statuses = null;

Twitter twitter = new TwitterFactory(cb.build()).getInstance();

String userName ="TWITTER HANDLE";
int numTweets = 19;
String[] twArray = new String[numTweets];

  try {
    statuses = twitter.getUserTimeline(userName);
  }
  catch(TwitterException e) {
  }

if( statuses != null) {
  for (int i=0; i<statuses.size(); i++) {
    Status status = (Status)statuses.get(i);
    
    if (sensor == 491310) {
    println(status.getUser().getName() + ": " + status.getText());
 tts.speak(status.getUser().getName() + ": " + status.getText());
  }
}
}

}

void serialEvent (Serial myPort) {
 int inByte = myPort.read();
   sensor = inByte;
  print(sensor);
}

答案 1 :(得分:1)

SuperValidator is a component以来,您必须从表单的组件集合中获取它。 然而在运行时组件似乎没有继承名称,因此找到确切的名称可能会很棘手。

据我所知,你唯一的选择是:

A)获取您可以找到的第一个SuperValidator

B)匹配其属性(如果可能)。

无论哪种方式,都必须遍历Me.components.Components集合:

Dim validator As SuperValidator = Nothing

For Each component In Me.components.Components
    If component.GetType() Is GetType(SuperValidator) Then
        validator = DirectCast(component, SuperValidator)
        'Perform additional property checking here if you go with Option B.
    End If
Next