Bagikan melalui


WebPartManager.CanConnectWebParts Metode

Definisi

WebPart Memeriksa kontrol yang akan berpartisipasi dalam koneksi untuk menentukan apakah kontrol tersebut mampu tersambung.

Overload

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

WebPart Memeriksa kontrol yang akan berpartisipasi dalam koneksi untuk menentukan apakah mereka mampu terhubung, ketika kontrol konsumen dan penyedia memiliki antarmuka yang WebPartTransformer kompatibel dan objek tidak diperlukan.

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer)

WebPart Memeriksa kontrol yang akan berpartisipasi dalam koneksi untuk menentukan apakah mereka mampu terhubung, dan menggunakan WebPartTransformer objek untuk membuat koneksi antara konsumen dan penyedia yang tidak kompatibel.

Keterangan

Metode CanConnectWebParts ini digunakan untuk menentukan apakah dua WebPart kontrol dapat dihubungkan. Metode ini biasanya digunakan sebagai pemeriksaan bersyarah sebelum memanggil ConnectWebParts metode .

Metode CanConnectWebParts ini memeriksa sejumlah kriteria yang harus dipenuhi sebelum dua kontrol dapat membentuk koneksi. Daftar berikut ini meringkas kriteria utama untuk membuat koneksi. Jika semua kriteria ini (ditambah beberapa kondisi internal tambahan) terpenuhi, metode mengembalikan true, yang berarti bahwa kontrol dapat dihubungkan:

  • Kontrol penyedia dan konsumen tidak boleh null, dan harus terkandung dalam pengumpulan kontrol yang direferensikan oleh WebParts properti .

  • Penyedia dan konsumen tidak boleh memiliki kontrol yang sama. Dengan kata WebPart lain kontrol tidak dapat tersambung ke dirinya sendiri.

  • Objek ConnectionPoint (titik koneksi) untuk penyedia dan konsumen tidak boleh null.

  • Penyedia dan konsumen tidak dapat ditutup (properti kontrol tidak IsClosed boleh true).

  • Properti ControlType kontrol titik koneksi harus cocok dengan jenis kontrol konsumen dan penyedia.

  • Titik koneksi keduanya harus diaktifkan (metodenya GetEnabled harus mengembalikan truekeduanya ).

  • Setiap titik koneksi tidak boleh mencoba membentuk lebih banyak koneksi daripada apa yang ditentukan dalam propertinya sendiri AllowsMultipleConnections .

  • WebPartTransformer Jika objek (transformator) diperlukan untuk menyambungkan kontrol yang tidak kompatibel, objek tidak boleh null. Namun, jika kontrol sudah kompatibel, transformator harus null.

  • Transformator (jika digunakan) harus dirujuk dalam AvailableTransformers koleksi.

  • Transformator (jika digunakan) harus memiliki antarmuka yang kompatibel dengan penyedia dan konsumen sehingga dapat mengubah data di antara kedua kontrol. Antarmuka sekunder konsumen dan penyedia juga harus kompatibel.

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

WebPart Memeriksa kontrol yang akan berpartisipasi dalam koneksi untuk menentukan apakah mereka mampu terhubung, ketika kontrol konsumen dan penyedia memiliki antarmuka yang WebPartTransformer kompatibel dan objek tidak diperlukan.

public:
 bool CanConnectWebParts(System::Web::UI::WebControls::WebParts::WebPart ^ provider, System::Web::UI::WebControls::WebParts::ProviderConnectionPoint ^ providerConnectionPoint, System::Web::UI::WebControls::WebParts::WebPart ^ consumer, System::Web::UI::WebControls::WebParts::ConsumerConnectionPoint ^ consumerConnectionPoint);
public bool CanConnectWebParts (System.Web.UI.WebControls.WebParts.WebPart provider, System.Web.UI.WebControls.WebParts.ProviderConnectionPoint providerConnectionPoint, System.Web.UI.WebControls.WebParts.WebPart consumer, System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint consumerConnectionPoint);
member this.CanConnectWebParts : System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ProviderConnectionPoint * System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint -> bool
Public Function CanConnectWebParts (provider As WebPart, providerConnectionPoint As ProviderConnectionPoint, consumer As WebPart, consumerConnectionPoint As ConsumerConnectionPoint) As Boolean

Parameter

provider
WebPart

Kontrol yang menyediakan data saat consumer kontrol tersambung.

providerConnectionPoint
ProviderConnectionPoint

ConnectionPoint yang memungkinkan provider untuk berpartisipasi dalam koneksi.

consumer
WebPart

Kontrol yang menerima data dari provider saat kontrol tersambung.

consumerConnectionPoint
ConsumerConnectionPoint

ConnectionPoint yang bertindak sebagai metode panggilan balik sehingga consumer dapat berpartisipasi dalam koneksi.

Mengembalikan

Nilai Boolean yang menunjukkan apakah provider dan consumer dapat disambungkan.

Contoh

Contoh kode berikut menunjukkan cara menggunakan metode ini.

Contoh kode memiliki empat bagian:

  • Kontrol pengguna yang memungkinkan Anda mengubah mode tampilan pada halaman Bagian Web.

  • Halaman Web yang berisi dua kontrol kustom WebPart yang dapat disambungkan, <asp:webpartmanager> elemen, dan beberapa kode penanganan peristiwa yang membuat koneksi menggunakan metode .CanConnectWebParts

  • File kode sumber yang berisi dua kontrol kustom WebPart , dan antarmuka kustom.

  • Penjelasan tentang cara kerja contoh di browser.

Bagian pertama dari contoh kode adalah kontrol pengguna untuk mengubah mode tampilan. Anda dapat memperoleh kode sumber untuk kontrol pengguna dari bagian Contoh dari WebPartManager gambaran umum kelas. Untuk informasi selengkapnya tentang mode tampilan dan cara kerja kontrol pengguna, lihat Panduan: Mengubah Mode Tampilan pada Halaman Bagian Web.

Markup deklaratif untuk halaman Web berisi Register arahan untuk kontrol pengguna dan kontrol kustom. Ada <asp:webpartmanager> elemen, <asp:webpartzone> elemen untuk berisi kontrol kustom, dan <asp:connectionszone> elemen. Perhatikan bahwa dalam metode ini Page_Load , kode memeriksa apakah koneksi dapat dibuat dan, jika demikian, menentukan penyedia, konsumen, dan titik koneksi masing-masing, lalu menambahkan koneksi baru ke kumpulan koneksi statis yang dirujuk oleh StaticConnections properti .

<%@ Page Language="C#" %>
<%@ register TagPrefix="uc1" 
  TagName="DisplayModeMenuCS" 
  Src="DisplayModeMenuCS.ascx" %>
<%@ register tagprefix="aspSample" 
  Namespace="Samples.AspNet.CS.Controls" 
  Assembly="ConnectionSampleCS"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  protected void Page_Load(object sender, EventArgs e)
  {
    
    // Define provider, consumer, and connection points.
    WebPart provider = mgr.WebParts["zip1"];
    ProviderConnectionPoint provConnPoint =
      mgr.GetProviderConnectionPoints(provider)["ZipCodeProvider"];
    WebPart consumer = mgr.WebParts["weather1"];
    ConsumerConnectionPoint consConnPoint =
      mgr.GetConsumerConnectionPoints(consumer)["ZipCodeConsumer"];
    
    // Check whether the connection already exists.
    if (mgr.CanConnectWebParts(provider, provConnPoint,
      consumer, consConnPoint))
    {
      // Create a new static connection.
      WebPartConnection conn = new WebPartConnection();
      conn.ID = "staticConn1";
      conn.ConsumerID = "weather1";
      conn.ConsumerConnectionPointID = "ZipCodeConsumer";
      conn.ProviderID = "zip1";
      conn.ProviderConnectionPointID = "ZipCodeProvider";
      mgr.StaticConnections.Add(conn);
    }
 }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <!-- Reference the WebPartManager control. -->
      <asp:WebPartManager ID="mgr" runat="server" />   
    <div>
      <uc1:DisplayModeMenuCS ID="displaymode1" 
        runat="server" />
      <!-- Reference consumer and provider controls 
           in a zone. -->
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" 
            runat="server" 
            Title="Zip Code Control"/>
          <aspSample:WeatherWebPart ID="weather1" 
            runat="server" 
            Title="Weather Control" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <!-- Add a ConnectionsZone so users can connect 
           controls. -->
      <asp:ConnectionsZone ID="ConnectionsZone1" 
        runat="server" />
    </div>
    </form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ register TagPrefix="uc1" 
  TagName="DisplayModeMenuVB" 
  Src="DisplayModeMenuVB.ascx" %>
<%@ register tagprefix="aspSample" 
  Namespace="Samples.AspNet.VB.Controls" 
  Assembly="ConnectionSampleVB"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  Protected Sub Page_Load(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    
    ' Define provider, consumer, and connection points.
    Dim provider As WebPart = mgr.WebParts("zip1")
    Dim provConnPoint As ProviderConnectionPoint = _
      mgr.GetProviderConnectionPoints(provider)("ZipCodeProvider")
    Dim consumer As WebPart = mgr.WebParts("weather1")
    Dim consConnPoint As ConsumerConnectionPoint = _
      mgr.GetConsumerConnectionPoints(consumer)("ZipCodeConsumer")
    
    ' Check whether the connection already exists.
    If mgr.CanConnectWebParts(provider, provConnPoint, _
      consumer, consConnPoint) Then
      ' Create a new static connection.
      Dim conn As New WebPartConnection()
      conn.ID = "staticConn1"
      conn.ConsumerID = "weather1"
      conn.ConsumerConnectionPointID = "ZipCodeConsumer"
      conn.ProviderID = "zip1"
      conn.ProviderConnectionPointID = "ZipCodeProvider"
      mgr.StaticConnections.Add(conn)
    End If
    
  End Sub
  
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <!-- Reference the WebPartManager control. -->
      <asp:WebPartManager ID="mgr" runat="server" />   
    <div>
      <uc1:DisplayModeMenuVB ID="displaymode1" 
        runat="server" />
      <!-- Reference consumer and provider controls 
           in a zone. -->
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" 
            runat="server" 
            Title="Zip Code Control"/>
          <aspSample:WeatherWebPart ID="weather1" 
            runat="server" 
            Title="Weather Control" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <!-- Add a ConnectionsZone so users can connect 
           controls. -->
      <asp:ConnectionsZone ID="ConnectionsZone1" 
        runat="server" />
    </div>
    </form>
</body>
</html>

Bagian ketiga dari contoh adalah kode sumber untuk kontrol. Ini berisi antarmuka dan dua kontrol kustom WebPart , satu bertindak sebagai penyedia, dan yang lainnya sebagai konsumen. Karena memiliki titik koneksi yang kompatibel (keduanya mengenali IZipCode antarmuka), transformator tidak diperlukan untuk membuat koneksi. Agar contoh kode berjalan, Anda harus mengkompilasi kode sumber ini. Anda dapat mengkompilasinya secara eksplisit dan meletakkan rakitan yang dihasilkan di folder Bin situs Web Anda atau cache perakitan global. Atau, Anda dapat meletakkan kode sumber di folder App_Code situs Anda, di mana kode tersebut akan dikompilasi secara dinamis pada durasi. Untuk panduan yang menunjukkan cara mengkompilasi, lihat Panduan: Mengembangkan dan Menggunakan Kontrol Server Web Kustom.

namespace Samples.AspNet.CS.Controls
{
  using System;
  using System.Web;
  using System.Web.Security;
  using System.Security.Permissions;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.UI.WebControls.WebParts;

  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public interface IZipCode
  {
    string ZipCode { get; set;}
  }

  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class ZipCodeWebPart : WebPart, IZipCode
  {
    string zipCodeText = String.Empty;
    TextBox input;
    Button send;

    public ZipCodeWebPart()
    {
    }

    // Make the implemented property personalizable to save 
    // the Zip Code between browser sessions.
    [Personalizable()]
    public virtual string ZipCode
    {
      get { return zipCodeText; }
      set { zipCodeText = value; }
    }

    // This is the callback method that returns the provider.
    [ConnectionProvider("Zip Code", "ZipCodeProvider")]
    public IZipCode ProvideIZipCode()
    {
      return this;
    }

    protected override void CreateChildControls()
    {
      Controls.Clear();
      input = new TextBox();
      this.Controls.Add(input);
      send = new Button();
      send.Text = "Enter 5-digit Zip Code";
      send.Click += new EventHandler(this.submit_Click);
      this.Controls.Add(send);
    }

    private void submit_Click(object sender, EventArgs e)
    {
      if (!string.IsNullOrEmpty(input.Text))
      {
        zipCodeText = Page.Server.HtmlEncode(input.Text);
        input.Text = String.Empty;
      }
    }
  }

  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class WeatherWebPart : WebPart
  {
    private IZipCode _provider;
    string _zipSearch;
    Label DisplayContent;

    // This method is identified by the ConnectionConsumer 
    // attribute, and is the mechanism for connecting with 
    // the provider. 
    [ConnectionConsumer("Zip Code", "ZipCodeConsumer")]
    public void GetIZipCode(IZipCode Provider)
    {
      _provider = Provider;
    }
    
    protected override void OnPreRender(EventArgs e)
    {
      EnsureChildControls();

      if (this._provider != null)
      {
        _zipSearch = _provider.ZipCode.Trim();
        DisplayContent.Text = "My Zip Code is:  " + _zipSearch;
      }
    }

    protected override void CreateChildControls()
    {
      Controls.Clear();
      DisplayContent = new Label();
      this.Controls.Add(DisplayContent);
    }
  }
}
Imports System.Web
Imports System.Web.Security
Imports System.Security.Permissions
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

Namespace Samples.AspNet.VB.Controls

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Interface IZipCode

    Property ZipCode() As String

  End Interface

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class ZipCodeWebPart
    Inherits WebPart
    Implements IZipCode
    Private zipCodeText As String = String.Empty
    Private input As TextBox
    Private send As Button

    Public Sub New()
    End Sub

    ' Make the implemented property personalizable to save 
    ' the Zip Code between browser sessions.
    <Personalizable()> _
    Public Property ZipCode() As String _
      Implements IZipCode.ZipCode

      Get
        Return zipCodeText
      End Get
      Set(ByVal value As String)
        zipCodeText = value
      End Set
    End Property

    ' This is the callback method that returns the provider.
    <ConnectionProvider("Zip Code", "ZipCodeProvider")> _
    Public Function ProvideIZipCode() As IZipCode
      Return Me
    End Function


    Protected Overrides Sub CreateChildControls()
      Controls.Clear()
      input = New TextBox()
      Me.Controls.Add(input)
      send = New Button()
      send.Text = "Enter 5-digit Zip Code"
      AddHandler send.Click, AddressOf Me.submit_Click
      Me.Controls.Add(send)

    End Sub


    Private Sub submit_Click(ByVal sender As Object, _
      ByVal e As EventArgs)

      If input.Text <> String.Empty Then
        zipCodeText = Page.Server.HtmlEncode(input.Text)
        input.Text = String.Empty
      End If

    End Sub

  End Class

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class WeatherWebPart
    Inherits WebPart
    Private _provider As IZipCode
    Private _zipSearch As String
    Private DisplayContent As Label

    ' This method is identified by the ConnectionConsumer 
    ' attribute, and is the mechanism for connecting with 
    ' the provider. 
    <ConnectionConsumer("Zip Code", "ZipCodeConsumer")> _
    Public Sub GetIZipCode(ByVal Provider As IZipCode)
      _provider = Provider
    End Sub


    Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
      EnsureChildControls()

      If Not (Me._provider Is Nothing) Then
        _zipSearch = _provider.ZipCode.Trim()
                DisplayContent.Text = "My Zip Code is:  " + _zipSearch
      End If

    End Sub

    Protected Overrides Sub CreateChildControls()
      Controls.Clear()
      DisplayContent = New Label()
      Me.Controls.Add(DisplayContent)

    End Sub

  End Class

End Namespace

Setelah Anda memuat halaman Web di browser, klik kontrol daftar drop-down Mode Tampilan dan pilih Sambungkan untuk mengalihkan halaman ke mode sambungkan. Mode sambungkan menggunakan <asp:connectionszone> elemen untuk memungkinkan Anda membuat koneksi antar kontrol. Dalam mode sambungkan, klik panah ke bawah di bilah judul kontrol Kode Pos untuk mengaktifkan menu kata kerjanya, lalu klik Sambungkan. Setelah antarmuka pengguna koneksi (UI) muncul, perhatikan bahwa koneksi telah dibuat oleh kode yang terkandung dalam Page_Load metode .

Keterangan

Metode ini digunakan untuk menyambungkan provider dan consumer ketika kedua kontrol memiliki jenis titik koneksi yang kompatibel, sehingga WebPartTransformer objek tidak diperlukan. Anda mungkin ingin menggunakan metode ini untuk memverifikasi bahwa dua kontrol dapat dihubungkan ConnectWebParts sebelum memanggil untuk membuat koneksi terprogram.

Kelebihan beban ini menggunakan implementasi CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer) yang sama dengan metode yang kelebihan beban, dengan satu-satunya pengecualian adalah bahwa kelebihan beban ini tidak memerlukan transformator.

Lihat juga

Berlaku untuk

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer)

WebPart Memeriksa kontrol yang akan berpartisipasi dalam koneksi untuk menentukan apakah mereka mampu terhubung, dan menggunakan WebPartTransformer objek untuk membuat koneksi antara konsumen dan penyedia yang tidak kompatibel.

public:
 virtual bool CanConnectWebParts(System::Web::UI::WebControls::WebParts::WebPart ^ provider, System::Web::UI::WebControls::WebParts::ProviderConnectionPoint ^ providerConnectionPoint, System::Web::UI::WebControls::WebParts::WebPart ^ consumer, System::Web::UI::WebControls::WebParts::ConsumerConnectionPoint ^ consumerConnectionPoint, System::Web::UI::WebControls::WebParts::WebPartTransformer ^ transformer);
public virtual bool CanConnectWebParts (System.Web.UI.WebControls.WebParts.WebPart provider, System.Web.UI.WebControls.WebParts.ProviderConnectionPoint providerConnectionPoint, System.Web.UI.WebControls.WebParts.WebPart consumer, System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint consumerConnectionPoint, System.Web.UI.WebControls.WebParts.WebPartTransformer transformer);
abstract member CanConnectWebParts : System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ProviderConnectionPoint * System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint * System.Web.UI.WebControls.WebParts.WebPartTransformer -> bool
override this.CanConnectWebParts : System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ProviderConnectionPoint * System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint * System.Web.UI.WebControls.WebParts.WebPartTransformer -> bool
Public Overridable Function CanConnectWebParts (provider As WebPart, providerConnectionPoint As ProviderConnectionPoint, consumer As WebPart, consumerConnectionPoint As ConsumerConnectionPoint, transformer As WebPartTransformer) As Boolean

Parameter

provider
WebPart

Kontrol yang menyediakan data saat consumer kontrol tersambung.

providerConnectionPoint
ProviderConnectionPoint

ConnectionPoint yang bertindak sebagai metode panggilan balik sehingga provider dapat berpartisipasi dalam koneksi.

consumer
WebPart

Kontrol yang menerima data dari provider saat kontrol tersambung.

consumerConnectionPoint
ConsumerConnectionPoint

ConnectionPoint yang bertindak sebagai metode panggilan balik sehingga consumer dapat berpartisipasi dalam koneksi.

transformer
WebPartTransformer

WebPartTransformer yang memungkinkan tidak kompatibel provider dan consumer tersambung.

Mengembalikan

Nilai Boolean yang menunjukkan apakah provider dan consumer dapat membentuk koneksi.

Keterangan

Metode ini digunakan untuk menyambungkan provider dan consumer ketika kedua kontrol memiliki jenis titik koneksi yang tidak kompatibel, sehingga WebPartTransformer objek diperlukan. Anda mungkin ingin menggunakan metode ini untuk memverifikasi bahwa dua kontrol dapat dihubungkan ConnectWebParts sebelum memanggil untuk membuat koneksi terprogram.

Kelebihan beban ini menggunakan implementasi CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint) yang sama dengan metode yang kelebihan beban, dengan satu-satunya pengecualian adalah bahwa kelebihan beban ini memerlukan transformator.

Berlaku untuk