2011-05-05 308 views
0

我已经将RouMao的解决方案编辑到了我的代码示例中。如何在Wx中添加换行符:: textCtrl


根据接受的答案给this question here on stackoverflow,我应该能够通过终止与“\ N”所附文本添加额外的行为Wx :: TextCtrl。

my $t = Wx::TextCtrl->new($p, -1, "$title\n" ,[-1,-1],[600,260]); 
$t->{TERM}->AppendText("another line\n"); 

不幸的是,这似乎不起作用,如下面的代码所示。 我在Windows XP上运行Strawberry Perl。

package main; 
use Modern::Perl; 
WxMultiLineCtrl->new()->MainLoop();  

package WxMultiLineCtrl; 

use base qw(Wx::App); 
use Wx qw (wxVERTICAL wxTOP wxGROW wxHORIZONTAL wxTE_MULTILINE 
      wxFIXED_MINSIZE wxLEFT); 

use Wx::Event qw(EVT_BUTTON); 

sub OnInit { 

    my $app = shift ; 

    my $title='MultiLine Wx Text Control'; 
    my $frame = Wx::Frame->new( undef ,-1,$title,[-1, -1],[640,280]); 
    my $p = Wx::Panel->new( $frame, -1); 
    my $v0= Wx::BoxSizer->new(wxVERTICAL); 
    my $h1= Wx::BoxSizer->new(wxHORIZONTAL); 
    my $h2= Wx::BoxSizer->new(wxHORIZONTAL); 
    my $term  = Wx::TextCtrl->new( $p, -1 
             , "$title\n" 
             , [-1,-1],[600,260] 
             , wxTE_MULTILINE 
            ); 
    my $cancelBtn = Wx::Button->new( $p, -1, "cancel" ,[-1,-1],[-1,-1]); 
    my $addTxtBtn = Wx::Button->new( $p, -1, "add text",[-1,-1],[-1,-1]); 
    $p->{TERM}=$term; 
    EVT_BUTTON( $p, $cancelBtn, \&cancel); 
    EVT_BUTTON( $p, $addTxtBtn, \&addTxt); 
    $v0->Add($h1,1,wxLEFT); 
    $v0->Add($h2,1,wxLEFT); 
    $h1->Add($term  , 1, wxTOP | wxGROW   , 5); 
    $h2->Add($cancelBtn , 1, wxTOP | wxFIXED_MINSIZE , 5); 
    $h2->Add($addTxtBtn , 1, wxTOP | wxFIXED_MINSIZE , 5); 
    $p->SetSizer($v0); 
    $p->SetAutoLayout(1); 
    $app->SetTopWindow($frame); 
    $frame->Show(1);   
} 

sub addTxt {shift->{TERM}->AppendText("another line\n");} 
sub cancel {exit;} 
+0

我不禁注意到另一个问题是关于'wxpython',而这个问题是'wxperl'。 – TLP 2011-05-05 16:13:29

+0

@TLP:是的,但是由于Wx是一个我认为可行的框架(100%肯定),内部工作方式将是相同的! – lexu 2011-05-06 05:33:31

回答

3

按照manual of wxWidgetwxTE_MULTILINE风格,可以控制创建过程中只设置。所以你需要改变代码如下:

#my $term  = Wx::TextCtrl->new($p, -1, "$title\n" ,[-1,-1],[600,260]); 
#$term->SetWindowStyle(wxTE_MULTILINE); 
my $term = Wx::TextCtrl->new($p, -1, "$title\n" ,[-1,-1],[600,260], wxTE_MULTILINE); 

它应该工作!

+0

我会尽力让你知道!谢谢 – lexu 2011-05-06 07:42:49

+0

叶普,这个伎俩......谢谢! – lexu 2011-05-06 09:30:52